mirror of
https://github.com/h44z/wg-portal.git
synced 2025-06-28 01:07:03 +00:00
Merge branch 'prepare V2 release'
This commit is contained in:
commit
8271dd7c1f
2
.github/workflows/docker-publish.yml
vendored
2
.github/workflows/docker-publish.yml
vendored
@ -4,7 +4,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches: [master]
|
branches: [master]
|
||||||
push:
|
push:
|
||||||
branches: [master, stable]
|
branches: [master, stable, legacy]
|
||||||
# Publish vX.X.X tags as releases.
|
# Publish vX.X.X tags as releases.
|
||||||
tags: ["v*.*.*"]
|
tags: ["v*.*.*"]
|
||||||
|
|
||||||
|
6
.github/workflows/pages.yml
vendored
6
.github/workflows/pages.yml
vendored
@ -2,7 +2,11 @@ name: github-pages
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [master]
|
branches: [master]
|
||||||
tags: ["v*"]
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
- '!v*-alpha*'
|
||||||
|
- '!v*-beta*'
|
||||||
|
- '!v*-rc*'
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
19
README.md
19
README.md
@ -1,4 +1,4 @@
|
|||||||
# WireGuard Portal (v2 - testing)
|
# WireGuard Portal v2
|
||||||
|
|
||||||
[](https://github.com/h44z/wg-portal/actions/workflows/docker-publish.yml)
|
[](https://github.com/h44z/wg-portal/actions/workflows/docker-publish.yml)
|
||||||
[](https://opensource.org/licenses/MIT)
|
[](https://opensource.org/licenses/MIT)
|
||||||
@ -8,14 +8,6 @@
|
|||||||

|

|
||||||
[](https://hub.docker.com/r/wgportal/wg-portal/)
|
[](https://hub.docker.com/r/wgportal/wg-portal/)
|
||||||
|
|
||||||
> [!CAUTION]
|
|
||||||
> Version 2 is currently under development and may contain bugs and breaking changes.
|
|
||||||
> It is not advised to use this version in production. Use version [v1](https://github.com/h44z/wg-portal/tree/stable) instead.
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Since the project was accepted by the Docker-Sponsored Open Source Program, the Docker image location has moved to [wgportal/wg-portal](https://hub.docker.com/r/wgportal/wg-portal).
|
|
||||||
> Please update the Docker image from **h44z/wg-portal** to **wgportal/wg-portal**.
|
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
<!-- Text from this line # is included in docs/documentation/overview.md -->
|
<!-- Text from this line # is included in docs/documentation/overview.md -->
|
||||||
**WireGuard Portal** is a simple, web-based configuration portal for [WireGuard](https://wireguard.com) server management.
|
**WireGuard Portal** is a simple, web-based configuration portal for [WireGuard](https://wireguard.com) server management.
|
||||||
@ -23,7 +15,7 @@ The portal uses the WireGuard [wgctrl](https://github.com/WireGuard/wgctrl-go) l
|
|||||||
interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN
|
interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN
|
||||||
connections.
|
connections.
|
||||||
|
|
||||||
The configuration portal supports using a database (SQLite, MySQL, MsSQL or Postgres), OAuth or LDAP
|
The configuration portal supports using a database (SQLite, MySQL, MsSQL, or Postgres), OAuth or LDAP
|
||||||
(Active Directory or OpenLDAP) as a user source for authentication and profile data.
|
(Active Directory or OpenLDAP) as a user source for authentication and profile data.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
@ -44,7 +36,7 @@ The configuration portal supports using a database (SQLite, MySQL, MsSQL or Post
|
|||||||
* Handles route and DNS settings like wg-quick does
|
* Handles route and DNS settings like wg-quick does
|
||||||
* Exposes Prometheus metrics for monitoring and alerting
|
* Exposes Prometheus metrics for monitoring and alerting
|
||||||
* REST API for management and client deployment
|
* REST API for management and client deployment
|
||||||
* Webhook for custom actions on peer, interface or user updates
|
* Webhook for custom actions on peer, interface, or user updates
|
||||||
|
|
||||||
<!-- Text to this line # is included in docs/documentation/overview.md -->
|
<!-- Text to this line # is included in docs/documentation/overview.md -->
|
||||||

|

|
||||||
@ -68,3 +60,8 @@ For the complete documentation visit [wgportal.org](https://wgportal.org).
|
|||||||
## License
|
## License
|
||||||
|
|
||||||
* MIT License. [MIT](LICENSE.txt) or <https://opensource.org/licenses/MIT>
|
* MIT License. [MIT](LICENSE.txt) or <https://opensource.org/licenses/MIT>
|
||||||
|
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Since the project was accepted by the Docker-Sponsored Open Source Program, the Docker image location has moved to [wgportal/wg-portal](https://hub.docker.com/r/wgportal/wg-portal).
|
||||||
|
> Please update the Docker image from **h44z/wg-portal** to **wgportal/wg-portal**.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
services:
|
services:
|
||||||
wg-portal:
|
wg-portal:
|
||||||
image: wgportal/wg-portal:latest
|
image: wgportal/wg-portal:v2
|
||||||
container_name: wg-portal
|
container_name: wg-portal
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
logging:
|
logging:
|
||||||
@ -10,6 +10,7 @@ services:
|
|||||||
max-file: "3"
|
max-file: "3"
|
||||||
cap_add:
|
cap_add:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
|
# Use host network mode for WireGuard and the UI. Ensure that access to the UI is properly secured.
|
||||||
network_mode: "host"
|
network_mode: "host"
|
||||||
volumes:
|
volumes:
|
||||||
# left side is the host path, right side is the container path
|
# left side is the host path, right side is the container path
|
||||||
|
@ -15,7 +15,7 @@ web:
|
|||||||
site_title: My WireGuard Server
|
site_title: My WireGuard Server
|
||||||
site_company_name: My Company
|
site_company_name: My Company
|
||||||
listening_address: :8080
|
listening_address: :8080
|
||||||
external_url: https://my.externa-domain.com
|
external_url: https://my.external-domain.com
|
||||||
csrf_secret: super-s3cr3t-csrf
|
csrf_secret: super-s3cr3t-csrf
|
||||||
session_secret: super-s3cr3t-session
|
session_secret: super-s3cr3t-session
|
||||||
request_logging: true
|
request_logging: true
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
This page provides an overview of **all available configuration options** for WireGuard Portal.
|
This page provides an overview of **all available configuration options** for WireGuard Portal.
|
||||||
|
|
||||||
You can supply these configurations in a **YAML** file (e.g. `config.yaml`) when starting the Portal.
|
You can supply these configurations in a **YAML** file when starting the Portal.
|
||||||
The path of the configuration file defaults to **config/config.yaml** (or config/config.yml) in the working directory of the executable.
|
The path of the configuration file defaults to `config/config.yaml` (or `config/config.yml`) in the working directory of the executable.
|
||||||
It is possible to override configuration filepath using the environment variable `WG_PORTAL_CONFIG`.
|
It is possible to override the configuration filepath using the environment variable `WG_PORTAL_CONFIG`.
|
||||||
For example: `WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal`.
|
For example: `WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal`.
|
||||||
Also, environment variable substitution in config file is supported. Refer to [syntax](https://github.com/a8m/envsubst?tab=readme-ov-file#docs).
|
Also, environment variable substitution in the config file is supported. Refer to the [syntax](https://github.com/a8m/envsubst?tab=readme-ov-file#docs).
|
||||||
|
|
||||||
Configuration examples are available on the [Examples](./examples.md) page.
|
Configuration examples are available on the [Examples](./examples.md) page.
|
||||||
|
|
||||||
@ -15,6 +15,7 @@ Configuration examples are available on the [Examples](./examples.md) page.
|
|||||||
core:
|
core:
|
||||||
admin_user: admin@wgportal.local
|
admin_user: admin@wgportal.local
|
||||||
admin_password: wgportal
|
admin_password: wgportal
|
||||||
|
admin_api_token: ""
|
||||||
editable_keys: true
|
editable_keys: true
|
||||||
create_default_peer: false
|
create_default_peer: false
|
||||||
create_default_peer_on_creation: false
|
create_default_peer_on_creation: false
|
||||||
@ -35,6 +36,7 @@ advanced:
|
|||||||
config_storage_path: ""
|
config_storage_path: ""
|
||||||
expiry_check_interval: 15m
|
expiry_check_interval: 15m
|
||||||
rule_prio_offset: 20000
|
rule_prio_offset: 20000
|
||||||
|
route_table_offset: 20000
|
||||||
api_admin_only: true
|
api_admin_only: true
|
||||||
|
|
||||||
database:
|
database:
|
||||||
@ -42,6 +44,7 @@ database:
|
|||||||
slow_query_threshold: "0"
|
slow_query_threshold: "0"
|
||||||
type: sqlite
|
type: sqlite
|
||||||
dsn: data/sqlite.db
|
dsn: data/sqlite.db
|
||||||
|
encryption_passphrase: ""
|
||||||
|
|
||||||
statistics:
|
statistics:
|
||||||
use_ping_checks: true
|
use_ping_checks: true
|
||||||
@ -79,6 +82,7 @@ web:
|
|||||||
session_secret: very_secret
|
session_secret: very_secret
|
||||||
csrf_secret: extremely_secret
|
csrf_secret: extremely_secret
|
||||||
request_logging: false
|
request_logging: false
|
||||||
|
expose_host_info: false
|
||||||
cert_file: ""
|
cert_file: ""
|
||||||
key_File: ""
|
key_File: ""
|
||||||
|
|
||||||
@ -282,7 +286,7 @@ Controls how WireGuard Portal collects and reports usage statistics, including p
|
|||||||
|
|
||||||
### `listening_address`
|
### `listening_address`
|
||||||
- **Default:** `:8787`
|
- **Default:** `:8787`
|
||||||
- **Description:** Address and port for the integrated Prometheus metric server (e.g., `:8787` or `127.0.0.1:8888`).
|
- **Description:** Address and port for the integrated Prometheus metric server (e.g., `:8787` or `127.0.0.1:8787`).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -576,7 +580,8 @@ Without a valid `external_url`, the login process may fail due to CSRF protectio
|
|||||||
|
|
||||||
### `listening_address`
|
### `listening_address`
|
||||||
- **Default:** `:8888`
|
- **Default:** `:8888`
|
||||||
- **Description:** The listening port of the web server.
|
- **Description:** The listening address and port for the web server (e.g., `:8888` to bind on all interfaces or `127.0.0.1:8888` to bind only on the loopback interface).
|
||||||
|
Ensure that access to WireGuard Portal is protected against unauthorized access, especially if binding to all interfaces.
|
||||||
|
|
||||||
### `external_url`
|
### `external_url`
|
||||||
- **Default:** `http://localhost:8888`
|
- **Default:** `http://localhost:8888`
|
||||||
@ -607,6 +612,10 @@ Without a valid `external_url`, the login process may fail due to CSRF protectio
|
|||||||
- **Default:** `false`
|
- **Default:** `false`
|
||||||
- **Description:** Log all HTTP requests.
|
- **Description:** Log all HTTP requests.
|
||||||
|
|
||||||
|
### `expose_host_info`
|
||||||
|
- **Default:** `false`
|
||||||
|
- **Description:** Expose the hostname and version of the WireGuard Portal server in an HTTP header. This is useful for debugging but may expose sensitive information.
|
||||||
|
|
||||||
### `cert_file`
|
### `cert_file`
|
||||||
- **Default:** *(empty)*
|
- **Default:** *(empty)*
|
||||||
- **Description:** (Optional) Path to the TLS certificate file.
|
- **Description:** (Optional) Path to the TLS certificate file.
|
||||||
|
@ -3,6 +3,12 @@ These binary versions can be manually downloaded and installed.
|
|||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
|
Make sure that you download the correct binary for your architecture. The available binaries are:
|
||||||
|
|
||||||
|
- `wg-portal_linux_amd64` - Linux x86_64
|
||||||
|
- `wg-portal_linux_arm64` - Linux ARM 64-bit
|
||||||
|
- `wg-portal_linux_arm_v7` - Linux ARM 32-bit
|
||||||
|
|
||||||
With `curl`:
|
With `curl`:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@ -21,6 +27,8 @@ with `gh cli`:
|
|||||||
gh release download ${WG_PORTAL_VERSION} --repo h44z/wg-portal --output wg-portal --pattern '*amd64'
|
gh release download ${WG_PORTAL_VERSION} --repo h44z/wg-portal --output wg-portal --pattern '*amd64'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@ -28,7 +36,7 @@ sudo mkdir -p /opt/wg-portal
|
|||||||
sudo install wg-portal /opt/wg-portal/
|
sudo install wg-portal /opt/wg-portal/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased versions (master branch builds)
|
||||||
|
|
||||||
|
Unreleased versions can be fetched directly from the artifacts section of the [GitHub Workflow](https://github.com/h44z/wg-portal/actions/workflows/docker-publish.yml?query=branch%3Amaster).
|
||||||
|
|
||||||
Unreleased versions could be downloaded from
|
|
||||||
[GitHub Workflow](https://github.com/h44z/wg-portal/actions/workflows/docker-publish.yml?query=branch%3Amaster) artifacts also.
|
|
||||||
|
@ -10,10 +10,10 @@ The recommended method for deploying WireGuard Portal is via Docker Compose for
|
|||||||
A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:
|
A sample docker-compose.yml (managing WireGuard interfaces directly on the host) is provided below:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
--8<-- "docker-compose.yml::17"
|
--8<-- "docker-compose.yml::19"
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, the webserver is listening on port **8888**.
|
By default, the webserver for the UI is listening on port **8888** on all available interfaces.
|
||||||
|
|
||||||
Volumes for `/app/data` and `/app/config` should be used ensure data persistence across container restarts.
|
Volumes for `/app/data` and `/app/config` should be used ensure data persistence across container restarts.
|
||||||
|
|
||||||
@ -32,6 +32,8 @@ WireGuard Portal supports managing WireGuard interfaces through three distinct d
|
|||||||
network_mode: "host"
|
network_mode: "host"
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
> :warning: If host networking is used, the WireGuard Portal UI will be accessible on all the host's IP addresses if the listening address is set to `:8888` in the configuration file.
|
||||||
|
To avoid this, you can bind the listening address to a specific IP address, for example, the loopback address (`127.0.0.1:8888`). It is also possible to deploy firewall rules to restrict access to the WireGuard Portal UI.
|
||||||
|
|
||||||
- **Within the WireGuard Portal Docker container**:
|
- **Within the WireGuard Portal Docker container**:
|
||||||
WireGuard interfaces can be managed directly from within the WireGuard Portal container itself.
|
WireGuard interfaces can be managed directly from within the WireGuard Portal container itself.
|
||||||
@ -39,7 +41,7 @@ WireGuard Portal supports managing WireGuard interfaces through three distinct d
|
|||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
wg-portal:
|
wg-portal:
|
||||||
image: wgportal/wg-portal:latest
|
image: wgportal/wg-portal:v2
|
||||||
container_name: wg-portal
|
container_name: wg-portal
|
||||||
...
|
...
|
||||||
cap_add:
|
cap_add:
|
||||||
@ -65,7 +67,7 @@ WireGuard Portal supports managing WireGuard interfaces through three distinct d
|
|||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
wg-portal:
|
wg-portal:
|
||||||
image: wgportal/wg-portal:latest
|
image: wgportal/wg-portal:v2
|
||||||
container_name: wg-portal
|
container_name: wg-portal
|
||||||
...
|
...
|
||||||
cap_add:
|
cap_add:
|
||||||
@ -118,11 +120,11 @@ These are official releases of WireGuard Portal. They correspond to the GitHub t
|
|||||||
|
|
||||||
Once these tags show up in this repository, they will never change.
|
Once these tags show up in this repository, they will never change.
|
||||||
|
|
||||||
For production deployments of WireGuard Portal, we strongly recommend using one of these tags, e.g. **wgportal/wg-portal:1.0.19**, instead of the latest or canary tags.
|
For production deployments of WireGuard Portal, we strongly recommend using one of these tags, e.g. `wgportal/wg-portal:2.0.0`, instead of the latest or canary tags.
|
||||||
|
|
||||||
If you only want to stay at the same major or major+minor version, use either `v[MAJOR]` or `[MAJOR].[MINOR]` tags. For example `v1` or `1.0`.
|
If you only want to stay at the same major or major+minor version, use either `v[MAJOR]` or `[MAJOR].[MINOR]` tags. For example `v2` or `2.0`.
|
||||||
|
|
||||||
Version **1** is currently **stable**, version **2** is in **development**.
|
Version **2** is the current stable release. Version **1** has moved to legacy status and is no longer recommended.
|
||||||
|
|
||||||
#### latest
|
#### latest
|
||||||
|
|
||||||
@ -149,7 +151,7 @@ You should mount those directories as a volume:
|
|||||||
|
|
||||||
A detailed description of the configuration options can be found [here](../configuration/overview.md).
|
A detailed description of the configuration options can be found [here](../configuration/overview.md).
|
||||||
|
|
||||||
If you want to access configuration files in wg-quick format, you can mount the `/etc/wireguard` directory to a location of your choice.
|
If you want to access configuration files in wg-quick format, you can mount the `/etc/wireguard` directory inside the container to a location of your choice.
|
||||||
Also enable the `config_storage_path` option in the configuration file:
|
Also enable the `config_storage_path` option in the configuration file:
|
||||||
```yaml
|
```yaml
|
||||||
advanced:
|
advanced:
|
||||||
|
@ -44,7 +44,7 @@ services:
|
|||||||
- 'traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'
|
- 'traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'
|
||||||
|
|
||||||
wg-portal:
|
wg-portal:
|
||||||
image: wgportal/wg-portal:latest
|
image: wgportal/wg-portal:v2
|
||||||
container_name: wg-portal
|
container_name: wg-portal
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
logging:
|
logging:
|
||||||
|
@ -22,4 +22,5 @@ make build
|
|||||||
## Install
|
## Install
|
||||||
|
|
||||||
Compiled binary will be available in `./dist` directory.
|
Compiled binary will be available in `./dist` directory.
|
||||||
|
|
||||||
For installation instructions, check the [Binaries](./binaries.md) section.
|
For installation instructions, check the [Binaries](./binaries.md) section.
|
||||||
|
@ -13,7 +13,7 @@ By default, WG-Portal exposes Prometheus metrics on port `8787` if interface/pee
|
|||||||
|
|
||||||
## Prometheus Config
|
## Prometheus Config
|
||||||
|
|
||||||
Add following scrape job to your Prometheus config file:
|
Add the following scrape job to your Prometheus config file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# prometheus.yaml
|
# prometheus.yaml
|
||||||
|
@ -1 +1 @@
|
|||||||
--8<-- "README.md:20:47"
|
--8<-- "README.md:12:41"
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
For production deployments of WireGuard Portal, we strongly recommend using version 1.
|
Major upgrades between different versions may require special procedures, which are described in the following sections.
|
||||||
If you want to use version 2, please be aware that it is still a release candidate and not yet fully stable.
|
|
||||||
|
|
||||||
## Upgrade from v1 to v2
|
## Upgrade from v1 to v2
|
||||||
|
|
||||||
@ -14,7 +13,9 @@ To upgrade from a previous SQLite database, start wg-portal like:
|
|||||||
./wg-portal-amd64 -migrateFrom=old_wg_portal.db
|
./wg-portal-amd64 -migrateFrom=old_wg_portal.db
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also specify the database type using the parameter **-migrateFromType**, supported types: mysql, mssql, postgres or sqlite.
|
You can also specify the database type using the parameter **-migrateFromType**.
|
||||||
|
Supported database types: `mysql`, `mssql`, `postgres` or `sqlite`.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@ -29,8 +30,8 @@ If you are using Docker, you can adapt the docker-compose.yml file to start the
|
|||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
wg-portal:
|
wg-portal:
|
||||||
image: wgportal/wg-portal:latest
|
image: wgportal/wg-portal:v2
|
||||||
# ... other settings
|
# ... other settings
|
||||||
restart: no
|
restart: no
|
||||||
command: ["-migrateFrom=/app/data/wg_portal.db"]
|
command: ["-migrateFrom=/app/data/old_wg_portal.db"]
|
||||||
```
|
```
|
||||||
|
20
frontend/package-lock.json
generated
20
frontend/package-lock.json
generated
@ -29,7 +29,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^5.2.3",
|
"@vitejs/plugin-vue": "^5.2.3",
|
||||||
"sass-embedded": "^1.86.3",
|
"sass-embedded": "^1.86.3",
|
||||||
"vite": "6.3.2"
|
"vite": "6.3.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/helper-string-parser": {
|
"node_modules/@babel/helper-string-parser": {
|
||||||
@ -2012,13 +2012,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tinyglobby": {
|
"node_modules/tinyglobby": {
|
||||||
"version": "0.2.12",
|
"version": "0.2.13",
|
||||||
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
|
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
|
||||||
"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
|
"integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fdir": "^6.4.3",
|
"fdir": "^6.4.4",
|
||||||
"picomatch": "^4.0.2"
|
"picomatch": "^4.0.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -2043,18 +2043,18 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.3.2",
|
"version": "6.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz",
|
||||||
"integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==",
|
"integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.25.0",
|
"esbuild": "^0.25.0",
|
||||||
"fdir": "^6.4.3",
|
"fdir": "^6.4.4",
|
||||||
"picomatch": "^4.0.2",
|
"picomatch": "^4.0.2",
|
||||||
"postcss": "^8.5.3",
|
"postcss": "^8.5.3",
|
||||||
"rollup": "^4.34.9",
|
"rollup": "^4.34.9",
|
||||||
"tinyglobby": "^0.2.12"
|
"tinyglobby": "^0.2.13"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite": "bin/vite.js"
|
"vite": "bin/vite.js"
|
||||||
|
@ -29,6 +29,6 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^5.2.3",
|
"@vitejs/plugin-vue": "^5.2.3",
|
||||||
"sass-embedded": "^1.86.3",
|
"sass-embedded": "^1.86.3",
|
||||||
"vite": "6.3.2"
|
"vite": "6.3.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,10 @@ $web-font-path: false;
|
|||||||
@import "bootstrap/scss/bootstrap";
|
@import "bootstrap/scss/bootstrap";
|
||||||
@import "bootswatch/dist/lux/bootswatch";
|
@import "bootswatch/dist/lux/bootswatch";
|
||||||
|
|
||||||
|
// fix strange border width bug in bootswatch 5.3
|
||||||
|
:root {
|
||||||
|
--bs-border-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
// for future use, once bootswatch supports @use
|
// for future use, once bootswatch supports @use
|
||||||
/*
|
/*
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
"placeholder": "Bitte geben Sie Ihren Benutzernamen ein"
|
"placeholder": "Bitte geben Sie Ihren Benutzernamen ein"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "Kennwort",
|
"label": "Passwort",
|
||||||
"placeholder": "Bitte geben Sie Ihr Passwort ein"
|
"placeholder": "Bitte geben Sie Ihr Passwort ein"
|
||||||
},
|
},
|
||||||
"button": "Anmelden"
|
"button": "Anmelden"
|
||||||
@ -38,6 +38,7 @@
|
|||||||
"lang": "Sprache ändern",
|
"lang": "Sprache ändern",
|
||||||
"profile": "Mein Profil",
|
"profile": "Mein Profil",
|
||||||
"settings": "Einstellungen",
|
"settings": "Einstellungen",
|
||||||
|
"audit": "Event Protokoll",
|
||||||
"login": "Anmelden",
|
"login": "Anmelden",
|
||||||
"logout": "Abmelden",
|
"logout": "Abmelden",
|
||||||
"keygen": "Schlüsselgenerator"
|
"keygen": "Schlüsselgenerator"
|
||||||
@ -80,77 +81,77 @@
|
|||||||
},
|
},
|
||||||
"interfaces": {
|
"interfaces": {
|
||||||
"headline": "Schnittstellenverwaltung",
|
"headline": "Schnittstellenverwaltung",
|
||||||
"headline-peers": "Current VPN Peers",
|
"headline-peers": "Aktuelle VPN-Peers",
|
||||||
"headline-endpoints": "Current Endpoints",
|
"headline-endpoints": "Aktuelle Endpunkte",
|
||||||
"no-interface": {
|
"no-interface": {
|
||||||
"default-selection": "No Interface available",
|
"default-selection": "Keine Schnittstelle verfügbar",
|
||||||
"headline": "No interfaces found...",
|
"headline": "Keine Schnittstellen gefunden...",
|
||||||
"abstract": "Click the plus button above to create a new WireGuard interface."
|
"abstract": "Klicken Sie auf die Plus-Schaltfläche oben, um eine neue WireGuard-Schnittstelle zu erstellen."
|
||||||
},
|
},
|
||||||
"no-peer": {
|
"no-peer": {
|
||||||
"headline": "No peers available",
|
"headline": "Keine Peers verfügbar",
|
||||||
"abstract": "Currently, there are no peers available for the selected WireGuard interface."
|
"abstract": "Derzeit sind keine Peers für die ausgewählte WireGuard-Schnittstelle verfügbar."
|
||||||
},
|
},
|
||||||
"table-heading": {
|
"table-heading": {
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"user": "User",
|
"user": "Benutzer",
|
||||||
"ip": "IP's",
|
"ip": "IP's",
|
||||||
"endpoint": "Endpoint",
|
"endpoint": "Endpunkt",
|
||||||
"status": "Status"
|
"status": "Status"
|
||||||
},
|
},
|
||||||
"interface": {
|
"interface": {
|
||||||
"headline": "Interface status for",
|
"headline": "Schnittstellenstatus für",
|
||||||
"mode": "mode",
|
"mode": "Modus",
|
||||||
"key": "Public Key",
|
"key": "Öffentlicher Schlüssel",
|
||||||
"endpoint": "Public Endpoint",
|
"endpoint": "Öffentlicher Endpunkt",
|
||||||
"port": "Listening Port",
|
"port": "Port",
|
||||||
"peers": "Enabled Peers",
|
"peers": "Aktive Peers",
|
||||||
"total-peers": "Total Peers",
|
"total-peers": "Gesamtanzahl Peers",
|
||||||
"endpoints": "Enabled Endpoints",
|
"endpoints": "Aktive Endpunkte",
|
||||||
"total-endpoints": "Total Endpoints",
|
"total-endpoints": "Gesamtanzahl Endpunkte",
|
||||||
"ip": "IP Address",
|
"ip": "IP-Adresse",
|
||||||
"default-allowed-ip": "Default allowed IPs",
|
"default-allowed-ip": "Standard Erlaubte-IPs",
|
||||||
"dns": "DNS Servers",
|
"dns": "DNS-Server",
|
||||||
"mtu": "MTU",
|
"mtu": "MTU",
|
||||||
"default-keep-alive": "Default Keepalive Interval",
|
"default-keep-alive": "Standard Keepalive-Intervall",
|
||||||
"button-show-config": "Show configuration",
|
"button-show-config": "Konfiguration anzeigen",
|
||||||
"button-download-config": "Download configuration",
|
"button-download-config": "Konfiguration herunterladen",
|
||||||
"button-store-config": "Store configuration for wg-quick",
|
"button-store-config": "Konfiguration für wg-quick speichern",
|
||||||
"button-edit": "Edit interface"
|
"button-edit": "Schnittstelle bearbeiten"
|
||||||
},
|
},
|
||||||
"button-add-interface": "Add Interface",
|
"button-add-interface": "Schnittstelle hinzufügen",
|
||||||
"button-add-peer": "Add Peer",
|
"button-add-peer": "Peer hinzufügen",
|
||||||
"button-add-peers": "Add Multiple Peers",
|
"button-add-peers": "Mehrere Peers hinzufügen",
|
||||||
"button-show-peer": "Show Peer",
|
"button-show-peer": "Peer anzeigen",
|
||||||
"button-edit-peer": "Edit Peer",
|
"button-edit-peer": "Peer bearbeiten",
|
||||||
"peer-disabled": "Peer is disabled, reason:",
|
"peer-disabled": "Peer ist deaktiviert, Grund:",
|
||||||
"peer-expiring": "Peer is expiring at",
|
"peer-expiring": "Peer läuft ab am",
|
||||||
"peer-connected": "Connected",
|
"peer-connected": "Verbunden",
|
||||||
"peer-not-connected": "Not Connected",
|
"peer-not-connected": "Nicht verbunden",
|
||||||
"peer-handshake": "Last handshake:"
|
"peer-handshake": "Letzter Handshake:"
|
||||||
},
|
},
|
||||||
"users": {
|
"users": {
|
||||||
"headline": "Benutzerverwaltung",
|
"headline": "Benutzerverwaltung",
|
||||||
"table-heading": {
|
"table-heading": {
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
"firstname": "Firstname",
|
"firstname": "Vorname",
|
||||||
"lastname": "Lastname",
|
"lastname": "Nachname",
|
||||||
"source": "Source",
|
"source": "Quelle",
|
||||||
"peers": "Peers",
|
"peers": "Peers",
|
||||||
"admin": "Admin"
|
"admin": "Admin"
|
||||||
},
|
},
|
||||||
"no-user": {
|
"no-user": {
|
||||||
"headline": "No users available",
|
"headline": "Keine Benutzer verfügbar",
|
||||||
"abstract": "Currently, there are no users registered with WireGuard Portal."
|
"abstract": "Derzeit sind keine Benutzer im WireGuard-Portal registriert."
|
||||||
},
|
},
|
||||||
"button-add-user": "Add User",
|
"button-add-user": "Benutzer hinzufügen",
|
||||||
"button-show-user": "Show User",
|
"button-show-user": "Benutzer anzeigen",
|
||||||
"button-edit-user": "Edit User",
|
"button-edit-user": "Benutzer bearbeiten",
|
||||||
"user-disabled": "User is disabled, reason:",
|
"user-disabled": "Benutzer ist deaktiviert, Grund:",
|
||||||
"user-locked": "Account is locked, reason:",
|
"user-locked": "Konto ist gesperrt, Grund:",
|
||||||
"admin": "User has administrator privileges",
|
"admin": "Benutzer hat Administratorrechte",
|
||||||
"no-admin": "User has no administrator privileges"
|
"no-admin": "Benutzer hat keine Administratorrechte"
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"headline": "Meine VPN-Konfigurationen",
|
"headline": "Meine VPN-Konfigurationen",
|
||||||
@ -158,16 +159,16 @@
|
|||||||
"name": "Name",
|
"name": "Name",
|
||||||
"ip": "IP's",
|
"ip": "IP's",
|
||||||
"stats": "Status",
|
"stats": "Status",
|
||||||
"interface": "Server Interface"
|
"interface": "Server-Schnittstelle"
|
||||||
},
|
},
|
||||||
"no-peer": {
|
"no-peer": {
|
||||||
"headline": "No peers available",
|
"headline": "Keine Peers verfügbar",
|
||||||
"abstract": "Currently, there are no peers associated with your user profile."
|
"abstract": "Derzeit sind keine Peers mit Ihrem Benutzerprofil verknüpft."
|
||||||
},
|
},
|
||||||
"peer-connected": "Connected",
|
"peer-connected": "Verbunden",
|
||||||
"button-add-peer": "Add Peer",
|
"button-add-peer": "Peer hinzufügen",
|
||||||
"button-show-peer": "Show Peer",
|
"button-show-peer": "Peer anzeigen",
|
||||||
"button-edit-peer": "Edit Peer"
|
"button-edit-peer": "Peer bearbeiten"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"headline": "Einstellungen",
|
"headline": "Einstellungen",
|
||||||
@ -189,345 +190,362 @@
|
|||||||
"api-link": "API Dokumentation"
|
"api-link": "API Dokumentation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"audit": {
|
||||||
|
"headline": "Eventprotokoll",
|
||||||
|
"abstract": "Hier finden Sie das Eventprotokoll aller im WireGuard-Portal vorgenommenen Aktionen.",
|
||||||
|
"no-entries": {
|
||||||
|
"headline": "Keine Protokolleinträge verfügbar",
|
||||||
|
"abstract": "Derzeit sind keine Eventprotokolle aufgezeichnet."
|
||||||
|
},
|
||||||
|
"entries-headline": "Protokolleinträge",
|
||||||
|
"table-heading": {
|
||||||
|
"id": "#",
|
||||||
|
"time": "Zeit",
|
||||||
|
"user": "Benutzer",
|
||||||
|
"severity": "Schweregrad",
|
||||||
|
"origin": "Ursprung",
|
||||||
|
"message": "Nachricht"
|
||||||
|
}
|
||||||
|
},
|
||||||
"keygen": {
|
"keygen": {
|
||||||
"headline": "WireGuard Key Generator",
|
"headline": "WireGuard Key Generator",
|
||||||
"abstract": "Hier können Sie WireGuard Schlüsselpaare generieren. Die Schlüssel werden lokal auf Ihrem Computer generiert und niemals an den Server gesendet.",
|
"abstract": "Hier können Sie WireGuard Schlüsselpaare generieren. Die Schlüssel werden lokal auf Ihrem Computer generiert und niemals an den Server gesendet.",
|
||||||
"headline-keypair": "Neues Schlüsselpaar",
|
"headline-keypair": "Neues Schlüsselpaar",
|
||||||
"headline-preshared-key": "Neuer Pre-shared Key",
|
"headline-preshared-key": "Neuer Pre-Shared Key",
|
||||||
"button-generate": "Erzeugen",
|
"button-generate": "Erzeugen",
|
||||||
"private-key": {
|
"private-key": {
|
||||||
"label": "Private Key",
|
"label": "Privater Schlüssel",
|
||||||
"placeholder": "Der private Schlüssel"
|
"placeholder": "Der private Schlüssel"
|
||||||
},
|
},
|
||||||
"public-key": {
|
"public-key": {
|
||||||
"label": "Public Key",
|
"label": "Öffentlicher Schlüssel",
|
||||||
"placeholder": "Der öffentliche Schlüssel"
|
"placeholder": "Der öffentliche Schlüssel"
|
||||||
},
|
},
|
||||||
"preshared-key": {
|
"preshared-key": {
|
||||||
"label": "Preshared Key",
|
"label": "Pre-Shared Key",
|
||||||
"placeholder": "Der Pre-shared Schlüssel"
|
"placeholder": "Der geteilte Schlüssel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"modals": {
|
"modals": {
|
||||||
"user-view": {
|
"user-view": {
|
||||||
"headline": "User Account:",
|
"headline": "Benutzerkonto:",
|
||||||
"tab-user": "Information",
|
"tab-user": "Informationen",
|
||||||
"tab-peers": "Peers",
|
"tab-peers": "Peers",
|
||||||
"headline-info": "User Information:",
|
"headline-info": "Benutzerinformationen:",
|
||||||
"headline-notes": "Notes:",
|
"headline-notes": "Notizen:",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
"firstname": "Firstname",
|
"firstname": "Vorname",
|
||||||
"lastname": "Lastname",
|
"lastname": "Nachname",
|
||||||
"phone": "Phone number",
|
"phone": "Telefonnummer",
|
||||||
"department": "Department",
|
"department": "Abteilung",
|
||||||
"disabled": "Account Disabled",
|
"api-enabled": "API-Zugriff",
|
||||||
"locked": "Account Locked",
|
"disabled": "Konto deaktiviert",
|
||||||
"no-peers": "User has no associated peers.",
|
"locked": "Konto gesperrt",
|
||||||
|
"no-peers": "Benutzer hat keine zugeordneten Peers.",
|
||||||
"peers": {
|
"peers": {
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"interface": "Interface",
|
"interface": "Schnittstelle",
|
||||||
"ip": "IP's"
|
"ip": "IP's"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"user-edit": {
|
"user-edit": {
|
||||||
"headline-edit": "Edit user:",
|
"headline-edit": "Benutzer bearbeiten:",
|
||||||
"headline-new": "New user",
|
"headline-new": "Neuer Benutzer",
|
||||||
"header-general": "General",
|
"header-general": "Allgemein",
|
||||||
"header-personal": "User Information",
|
"header-personal": "Benutzerinformationen",
|
||||||
"header-notes": "Notes",
|
"header-notes": "Notizen",
|
||||||
"header-state": "State",
|
"header-state": "Status",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"label": "Identifier",
|
"label": "Kennung",
|
||||||
"placeholder": "The unique user identifier"
|
"placeholder": "Die eindeutige Benutzerkennung"
|
||||||
},
|
},
|
||||||
"source": {
|
"source": {
|
||||||
"label": "Source",
|
"label": "Quelle",
|
||||||
"placeholder": "The user source"
|
"placeholder": "Die Benutzerquelle"
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
"label": "Password",
|
"label": "Passwort",
|
||||||
"placeholder": "A super secret password",
|
"placeholder": "Ein super geheimes Passwort",
|
||||||
"description": "Leave this field blank to keep current password."
|
"description": "Lassen Sie dieses Feld leer, um das aktuelle Passwort beizubehalten."
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
"label": "Email",
|
"label": "E-Mail",
|
||||||
"placeholder": "The email address"
|
"placeholder": "Die E-Mail-Adresse"
|
||||||
},
|
},
|
||||||
"phone": {
|
"phone": {
|
||||||
"label": "Phone",
|
"label": "Telefon",
|
||||||
"placeholder": "The phone number"
|
"placeholder": "Die Telefonnummer"
|
||||||
},
|
},
|
||||||
"department": {
|
"department": {
|
||||||
"label": "Department",
|
"label": "Abteilung",
|
||||||
"placeholder": "The department"
|
"placeholder": "Die Abteilung"
|
||||||
},
|
},
|
||||||
"firstname": {
|
"firstname": {
|
||||||
"label": "Firstname",
|
"label": "Vorname",
|
||||||
"placeholder": "Firstname"
|
"placeholder": "Vorname"
|
||||||
},
|
},
|
||||||
"lastname": {
|
"lastname": {
|
||||||
"label": "Lastname",
|
"label": "Nachname",
|
||||||
"placeholder": "Lastname"
|
"placeholder": "Nachname"
|
||||||
},
|
},
|
||||||
"notes": {
|
"notes": {
|
||||||
"label": "Notes",
|
"label": "Notizen",
|
||||||
"placeholder": ""
|
"placeholder": ""
|
||||||
},
|
},
|
||||||
"disabled": {
|
"disabled": {
|
||||||
"label": "Disabled (no WireGuard connection and no login possible)"
|
"label": "Deaktiviert (keine WireGuard-Verbindung und kein Login möglich)"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"label": "Locked (no login possible, WireGuard connections still work)"
|
"label": "Gesperrt (kein Login möglich, WireGuard-Verbindungen funktionieren weiterhin)"
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
"label": "Is Admin"
|
"label": "Ist Administrator"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interface-view": {
|
"interface-view": {
|
||||||
"headline": "Config for Interface:"
|
"headline": "Konfiguration für Schnittstelle:"
|
||||||
},
|
},
|
||||||
"interface-edit": {
|
"interface-edit": {
|
||||||
"headline-edit": "Edit Interface:",
|
"headline-edit": "Schnittstelle bearbeiten:",
|
||||||
"headline-new": "New Interface",
|
"headline-new": "Neue Schnittstelle",
|
||||||
"tab-interface": "Interface",
|
"tab-interface": "Schnittstelle",
|
||||||
"tab-peerdef": "Peer Defaults",
|
"tab-peerdef": "Peer-Standardeinstellungen",
|
||||||
"header-general": "General",
|
"header-general": "Allgemein",
|
||||||
"header-network": "Network",
|
"header-network": "Netzwerk",
|
||||||
"header-crypto": "Cryptography",
|
"header-crypto": "Kryptografie",
|
||||||
"header-hooks": "Interface Hooks",
|
"header-hooks": "Schnittstellen-Hooks",
|
||||||
"header-peer-hooks": "Hooks",
|
"header-peer-hooks": "Hooks",
|
||||||
"header-state": "State",
|
"header-state": "Status",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"label": "Identifier",
|
"label": "Kennung",
|
||||||
"placeholder": "The unique interface identifier"
|
"placeholder": "Die eindeutige Schnittstellenkennung"
|
||||||
},
|
},
|
||||||
"mode": {
|
"mode": {
|
||||||
"label": "Interface Mode",
|
"label": "Schnittstellenmodus",
|
||||||
"server": "Server Mode",
|
"server": "Server-Modus",
|
||||||
"client": "Client Mode",
|
"client": "Client-Modus",
|
||||||
"any": "Unknown Mode"
|
"any": "Unbekannter Modus"
|
||||||
},
|
},
|
||||||
"display-name": {
|
"display-name": {
|
||||||
"label": "Display Name",
|
"label": "Anzeigename",
|
||||||
"placeholder": "The descriptive name for the interface"
|
"placeholder": "Der beschreibende Name für die Schnittstelle"
|
||||||
},
|
},
|
||||||
"private-key": {
|
"private-key": {
|
||||||
"label": "Private Key",
|
"label": "Privater Schlüssel",
|
||||||
"placeholder": "The private key"
|
"placeholder": "Der private Schlüssel"
|
||||||
},
|
},
|
||||||
"public-key": {
|
"public-key": {
|
||||||
"label": "Public Key",
|
"label": "Öffentlicher Schlüssel",
|
||||||
"placeholder": "The public key"
|
"placeholder": "Der öffentliche Schlüssel"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"label": "IP Addresses",
|
"label": "IP-Adressen",
|
||||||
"placeholder": "IP Addresses (CIDR format)"
|
"placeholder": "IP-Adressen (CIDR-Format)"
|
||||||
},
|
},
|
||||||
"listen-port": {
|
"listen-port": {
|
||||||
"label": "Listen Port",
|
"label": "Port",
|
||||||
"placeholder": "The listening port"
|
"placeholder": "Der Port der WireGuard Schnittstelle"
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"label": "DNS Server",
|
"label": "DNS-Server",
|
||||||
"placeholder": "The DNS servers that should be used"
|
"placeholder": "Die zu verwendenden DNS-Server"
|
||||||
},
|
},
|
||||||
"dns-search": {
|
"dns-search": {
|
||||||
"label": "DNS Search Domains",
|
"label": "DNS-Suchdomänen",
|
||||||
"placeholder": "DNS search prefixes"
|
"placeholder": "DNS-Suchpräfixe"
|
||||||
},
|
},
|
||||||
"mtu": {
|
"mtu": {
|
||||||
"label": "MTU",
|
"label": "MTU",
|
||||||
"placeholder": "The interface MTU (0 = keep default)"
|
"placeholder": "Die Schnittstellen-MTU (0 = Standard beibehalten)"
|
||||||
},
|
},
|
||||||
"firewall-mark": {
|
"firewall-mark": {
|
||||||
"label": "Firewall Mark",
|
"label": "Firewall-Markierung",
|
||||||
"placeholder": "Firewall mark that is applied to outgoing traffic. (0 = automatic)"
|
"placeholder": "Firewall-Markierung, die auf ausgehenden Datenverkehr angewendet wird. (0 = automatisch)"
|
||||||
},
|
},
|
||||||
"routing-table": {
|
"routing-table": {
|
||||||
"label": "Routing Table",
|
"label": "Routing-Tabelle",
|
||||||
"placeholder": "The routing table ID",
|
"placeholder": "Die Routing-Tabellen-ID",
|
||||||
"description": "Special cases: off = do not manage routes, 0 = automatic"
|
"description": "Spezialfälle: off = Routen nicht verwalten, 0 = automatisch"
|
||||||
},
|
},
|
||||||
"pre-up": {
|
"pre-up": {
|
||||||
"label": "Pre-Up",
|
"label": "Pre-Up",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"post-up": {
|
"post-up": {
|
||||||
"label": "Post-Up",
|
"label": "Post-Up",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"pre-down": {
|
"pre-down": {
|
||||||
"label": "Pre-Down",
|
"label": "Pre-Down",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"post-down": {
|
"post-down": {
|
||||||
"label": "Post-Down",
|
"label": "Post-Down",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"disabled": {
|
"disabled": {
|
||||||
"label": "Interface Disabled"
|
"label": "Schnittstelle deaktiviert"
|
||||||
},
|
},
|
||||||
"save-config": {
|
"save-config": {
|
||||||
"label": "Automatically save wg-quick config"
|
"label": "wg-quick Konfiguration automatisch speichern"
|
||||||
},
|
},
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"endpoint": {
|
"endpoint": {
|
||||||
"label": "Endpoint Address",
|
"label": "Endpunktadresse",
|
||||||
"placeholder": "Endpoint Address",
|
"placeholder": "Endpunktadresse",
|
||||||
"description": "The endpoint address that peers will connect to. (e.g. wg.example.com or wg.example.com:51820)"
|
"description": "Die Endpunktadresse, mit der sich Peers verbinden. (z.B. wg.example.com oder wg.example.com:51820)"
|
||||||
},
|
},
|
||||||
"networks": {
|
"networks": {
|
||||||
"label": "IP Networks",
|
"label": "IP-Netzwerke",
|
||||||
"placeholder": "Network Addresses",
|
"placeholder": "Netzwerkadressen",
|
||||||
"description": "Peers will get IP addresses from those subnets."
|
"description": "Peers erhalten IP-Adressen aus diesen Subnetzen."
|
||||||
},
|
},
|
||||||
"allowed-ip": {
|
"allowed-ip": {
|
||||||
"label": "Allowed IP Addresses",
|
"label": "Erlaubte IP-Adressen",
|
||||||
"placeholder": "Default Allowed IP Addresses"
|
"placeholder": "Erlaubte IP-Adressen für Peers"
|
||||||
},
|
},
|
||||||
"mtu": {
|
"mtu": {
|
||||||
"label": "MTU",
|
"label": "MTU",
|
||||||
"placeholder": "The client MTU (0 = keep default)"
|
"placeholder": "Die Client-MTU (0 = Standard beibehalten)"
|
||||||
},
|
},
|
||||||
"keep-alive": {
|
"keep-alive": {
|
||||||
"label": "Keep Alive Interval",
|
"label": "Keepalive-Intervall",
|
||||||
"placeholder": "Persistent Keepalive (0 = default)"
|
"placeholder": "Persistentes Keepalive (0 = Standard)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"button-apply-defaults": "Peer-Standardeinstellungen anwenden"
|
||||||
"button-apply-defaults": "Apply Peer Defaults"
|
|
||||||
},
|
},
|
||||||
"peer-view": {
|
"peer-view": {
|
||||||
"headline-peer": "Peer:",
|
"headline-peer": "Peer:",
|
||||||
"headline-endpoint": "Endpoint:",
|
"headline-endpoint": "Endpunkt:",
|
||||||
"section-info": "Peer Information",
|
"section-info": "Peer-Informationen",
|
||||||
"section-status": "Current Status",
|
"section-status": "Aktueller Status",
|
||||||
"section-config": "Configuration",
|
"section-config": "Konfiguration",
|
||||||
"identifier": "Identifier",
|
"identifier": "Kennung",
|
||||||
"ip": "IP Addresses",
|
"ip": "IP-Adressen",
|
||||||
"user": "Associated User",
|
"user": "Zugeordneter Benutzer",
|
||||||
"notes": "Notes",
|
"notes": "Notizen",
|
||||||
"expiry-status": "Expires At",
|
"expiry-status": "Läuft ab am",
|
||||||
"disabled-status": "Disabled At",
|
"disabled-status": "Deaktiviert am",
|
||||||
"traffic": "Traffic",
|
"traffic": "Datenverkehr",
|
||||||
"connection-status": "Connection Stats",
|
"connection-status": "Verbindungsstatistiken",
|
||||||
"upload": "Uploaded Bytes (from Server to Peer)",
|
"upload": "Hochgeladene Bytes (vom Server zum Peer)",
|
||||||
"download": "Downloaded Bytes (from Peer to Server)",
|
"download": "Heruntergeladene Bytes (vom Peer zum Server)",
|
||||||
"pingable": "Is Pingable",
|
"pingable": "Pingbar",
|
||||||
"handshake": "Last Handshake",
|
"handshake": "Letzter Handshake",
|
||||||
"connected-since": "Connected since",
|
"connected-since": "Verbunden seit",
|
||||||
"endpoint": "Endpoint",
|
"endpoint": "Endpunkt",
|
||||||
"button-download": "Download configuration",
|
"button-download": "Konfiguration herunterladen",
|
||||||
"button-email": "Send configuration via E-Mail"
|
"button-email": "Konfiguration per E-Mail senden"
|
||||||
},
|
},
|
||||||
"peer-edit": {
|
"peer-edit": {
|
||||||
"headline-edit-peer": "Edit peer:",
|
"headline-edit-peer": "Peer bearbeiten:",
|
||||||
"headline-edit-endpoint": "Edit endpoint:",
|
"headline-edit-endpoint": "Endpunkt bearbeiten:",
|
||||||
"headline-new-peer": "Create peer",
|
"headline-new-peer": "Peer erstellen",
|
||||||
"headline-new-endpoint": "Create endpoint",
|
"headline-new-endpoint": "Endpunkt erstellen",
|
||||||
"header-general": "General",
|
"header-general": "Allgemein",
|
||||||
"header-network": "Network",
|
"header-network": "Netzwerk",
|
||||||
"header-crypto": "Cryptography",
|
"header-crypto": "Kryptografie",
|
||||||
"header-hooks": "Hooks (Executed on Peer)",
|
"header-hooks": "Hooks (beim Peer ausgeführt)",
|
||||||
"header-state": "State",
|
"header-state": "Status",
|
||||||
"display-name": {
|
"display-name": {
|
||||||
"label": "Display Name",
|
"label": "Anzeigename",
|
||||||
"placeholder": "The descriptive name for the peer"
|
"placeholder": "Der beschreibende Name für den Peer"
|
||||||
},
|
},
|
||||||
"linked-user": {
|
"linked-user": {
|
||||||
"label": "Linked User",
|
"label": "Verknüpfter Benutzer",
|
||||||
"placeholder": "The user account which owns this peer"
|
"placeholder": "Das Benutzerkonto, dem dieser Peer gehört"
|
||||||
},
|
},
|
||||||
"private-key": {
|
"private-key": {
|
||||||
"label": "Private Key",
|
"label": "Privater Schlüssel",
|
||||||
"placeholder": "The private key",
|
"placeholder": "Der private Schlüssel",
|
||||||
"help": "Der private Schlüssel wird sicher auf dem Server gespeichert. Wenn der Benutzer bereits eine Kopie besitzt, kann dieses Feld entfallen. Der Server funktioniert auch ausschließlich mit dem öffentlichen Schlüssel des Peers."
|
"help": "Der private Schlüssel wird sicher auf dem Server gespeichert. Wenn der Benutzer bereits eine Kopie besitzt, kann dieses Feld entfallen. Der Server funktioniert auch ausschließlich mit dem öffentlichen Schlüssel des Peers."
|
||||||
},
|
},
|
||||||
"public-key": {
|
"public-key": {
|
||||||
"label": "Public Key",
|
"label": "Öffentlicher Schlüssel",
|
||||||
"placeholder": "The public key"
|
"placeholder": "Der öffentliche Schlüssel"
|
||||||
},
|
},
|
||||||
"preshared-key": {
|
"preshared-key": {
|
||||||
"label": "Preshared Key",
|
"label": "Pre-Shared Key",
|
||||||
"placeholder": "Optional pre-shared key"
|
"placeholder": "Optionaler geteilter Schlüssel"
|
||||||
},
|
},
|
||||||
"endpoint-public-key": {
|
"endpoint-public-key": {
|
||||||
"label": "Endpoint public Key",
|
"label": "Öffentlicher Endpunktschlüssel",
|
||||||
"placeholder": "The public key of the remote endpoint"
|
"placeholder": "Der öffentliche Schlüssel des entfernten Endpunkts"
|
||||||
},
|
},
|
||||||
"endpoint": {
|
"endpoint": {
|
||||||
"label": "Endpoint Address",
|
"label": "Endpunktadresse",
|
||||||
"placeholder": "The address of the remote endpoint"
|
"placeholder": "Die Adresse des entfernten Endpunkts"
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
"label": "IP Addresses",
|
"label": "IP-Adressen",
|
||||||
"placeholder": "IP Addresses (CIDR format)"
|
"placeholder": "IP-Adressen (CIDR-Format)"
|
||||||
},
|
},
|
||||||
"allowed-ip": {
|
"allowed-ip": {
|
||||||
"label": "Allowed IP Addresses",
|
"label": "Erlaubte IP-Adressen",
|
||||||
"placeholder": "Allowed IP Addresses (CIDR format)"
|
"placeholder": "Erlaubte IP-Adressen (CIDR-Format)"
|
||||||
},
|
},
|
||||||
"extra-allowed-ip": {
|
"extra-allowed-ip": {
|
||||||
"label": "Extra allowed IP Addresses",
|
"label": "Zusätzliche erlaubte IP-Adressen",
|
||||||
"placeholder": "Extra allowed IP's (Server Sided)",
|
"placeholder": "Zusätzliche erlaubte IP's (Server-seitig)",
|
||||||
"description": "Those IP's will be added on the remote WireGuard interface as allowed IP's."
|
"description": "Diese IPs werden an der entfernten WireGuard-Schnittstelle als erlaubte IPs hinzugefügt."
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"label": "DNS Server",
|
"label": "DNS-Server",
|
||||||
"placeholder": "The DNS servers that should be used"
|
"placeholder": "Die zu verwendenden DNS-Server"
|
||||||
},
|
},
|
||||||
"dns-search": {
|
"dns-search": {
|
||||||
"label": "DNS Search Domains",
|
"label": "DNS-Suchdomänen",
|
||||||
"placeholder": "DNS search prefixes"
|
"placeholder": "DNS-Suchpräfixe"
|
||||||
},
|
},
|
||||||
"keep-alive": {
|
"keep-alive": {
|
||||||
"label": "Keep Alive Interval",
|
"label": "Keepalive-Intervall",
|
||||||
"placeholder": "Persistent Keepalive (0 = default)"
|
"placeholder": "Persistentes Keepalive (0 = Standard)"
|
||||||
},
|
},
|
||||||
"mtu": {
|
"mtu": {
|
||||||
"label": "MTU",
|
"label": "MTU",
|
||||||
"placeholder": "The client MTU (0 = keep default)"
|
"placeholder": "Die Client-MTU (0 = Standard beibehalten)"
|
||||||
},
|
},
|
||||||
"pre-up": {
|
"pre-up": {
|
||||||
"label": "Pre-Up",
|
"label": "Pre-Up",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"post-up": {
|
"post-up": {
|
||||||
"label": "Post-Up",
|
"label": "Post-Up",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"pre-down": {
|
"pre-down": {
|
||||||
"label": "Pre-Down",
|
"label": "Pre-Down",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"post-down": {
|
"post-down": {
|
||||||
"label": "Post-Down",
|
"label": "Post-Down",
|
||||||
"placeholder": "One or multiple bash commands separated by ;"
|
"placeholder": "Ein oder mehrere Bash-Befehle, getrennt durch ;"
|
||||||
},
|
},
|
||||||
"disabled": {
|
"disabled": {
|
||||||
"label": "Peer Disabled"
|
"label": "Peer deaktiviert"
|
||||||
},
|
},
|
||||||
"ignore-global": {
|
"ignore-global": {
|
||||||
"label": "Ignore global settings"
|
"label": "Globale Einstellungen ignorieren"
|
||||||
},
|
},
|
||||||
"expires-at": {
|
"expires-at": {
|
||||||
"label": "Expiry date"
|
"label": "Ablaufdatum"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"peer-multi-create": {
|
"peer-multi-create": {
|
||||||
"headline-peer": "Create multiple peers",
|
"headline-peer": "Mehrere Peers erstellen",
|
||||||
"headline-endpoint": "Create multiple endpoints",
|
"headline-endpoint": "Mehrere Endpunkte erstellen",
|
||||||
"identifiers": {
|
"identifiers": {
|
||||||
"label": "User Identifiers",
|
"label": "Benutzerkennungen",
|
||||||
"placeholder": "User Identifiers",
|
"placeholder": "Benutzerkennungen",
|
||||||
"description": "A user identifier (the username) for which a peer should be created."
|
"description": "Eine Benutzerkennung (der Benutzername), für die ein Peer erstellt werden soll."
|
||||||
},
|
},
|
||||||
"prefix": {
|
"prefix": {
|
||||||
"headline-peer": "Peer:",
|
"headline-peer": "Peer:",
|
||||||
"headline-endpoint": "Endpoint:",
|
"headline-endpoint": "Endpunkt:",
|
||||||
"label": "Display Name Prefix",
|
"label": "Anzeigename-Präfix",
|
||||||
"placeholder": "The prefix",
|
"placeholder": "Das Präfix",
|
||||||
"description": "A prefix that is added to the peers display name."
|
"description": "Ein Präfix, das dem Anzeigenamen des Peers hinzugefügt wird."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ onMounted(async () => {
|
|||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-6 col-form-label text-end" for="paginationSelector">{{ $t('general.pagination.size') }}:</label>
|
<label class="col-sm-6 col-form-label text-end" for="paginationSelector">{{ $t('general.pagination.size') }}:</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<select v-model.number="audit.pageSize" class="form-select" @click="audit.afterPageSizeChange()">
|
<select id="paginationSelector" v-model.number="audit.pageSize" class="form-select" @click="audit.afterPageSizeChange()">
|
||||||
<option value="10">10</option>
|
<option value="10">10</option>
|
||||||
<option value="25">25</option>
|
<option value="25">25</option>
|
||||||
<option value="50">50</option>
|
<option value="50">50</option>
|
||||||
|
@ -416,7 +416,7 @@ onMounted(async () => {
|
|||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-6 col-form-label text-end" for="paginationSelector">{{ $t('general.pagination.size') }}:</label>
|
<label class="col-sm-6 col-form-label text-end" for="paginationSelector">{{ $t('general.pagination.size') }}:</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<select v-model.number="peers.pageSize" class="form-select" @click="peers.afterPageSizeChange()">
|
<select id="paginationSelector" v-model.number="peers.pageSize" class="form-select" @click="peers.afterPageSizeChange()">
|
||||||
<option value="10">10</option>
|
<option value="10">10</option>
|
||||||
<option value="25">25</option>
|
<option value="25">25</option>
|
||||||
<option value="50">50</option>
|
<option value="50">50</option>
|
||||||
|
@ -178,7 +178,7 @@ onMounted(async () => {
|
|||||||
{{ $t('general.pagination.size')}}:
|
{{ $t('general.pagination.size')}}:
|
||||||
</label>
|
</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<select v-model.number="profile.pageSize" class="form-select" @click="profile.afterPageSizeChange()">
|
<select id="paginationSelector" v-model.number="profile.pageSize" class="form-select" @click="profile.afterPageSizeChange()">
|
||||||
<option value="10">10</option>
|
<option value="10">10</option>
|
||||||
<option value="25">25</option>
|
<option value="25">25</option>
|
||||||
<option value="50">50</option>
|
<option value="50">50</option>
|
||||||
|
@ -116,7 +116,7 @@ onMounted(() => {
|
|||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-6 col-form-label text-end" for="paginationSelector">{{ $t('general.pagination.size') }}:</label>
|
<label class="col-sm-6 col-form-label text-end" for="paginationSelector">{{ $t('general.pagination.size') }}:</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<select v-model.number="users.pageSize" class="form-select" @click="users.afterPageSizeChange()">
|
<select id="paginationSelector" v-model.number="users.pageSize" class="form-select" @click="users.afterPageSizeChange()">
|
||||||
<option value="10">10</option>
|
<option value="10">10</option>
|
||||||
<option value="25">25</option>
|
<option value="25">25</option>
|
||||||
<option value="50">50</option>
|
<option value="50">50</option>
|
||||||
|
@ -30,6 +30,15 @@ plugins:
|
|||||||
- minify:
|
- minify:
|
||||||
minify_html: true
|
minify_html: true
|
||||||
- swagger-ui-tag
|
- swagger-ui-tag
|
||||||
|
- mike:
|
||||||
|
# These fields are all optional; the defaults are as below...
|
||||||
|
alias_type: symlink
|
||||||
|
redirect_template: null
|
||||||
|
deploy_prefix: ''
|
||||||
|
canonical_version: null
|
||||||
|
version_selector: true
|
||||||
|
css_dir: css
|
||||||
|
javascript_dir: js
|
||||||
|
|
||||||
extra:
|
extra:
|
||||||
version:
|
version:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user