mirror of
https://github.com/h44z/wg-portal.git
synced 2025-10-05 16:06:17 +00:00
Compare commits
8 Commits
v2.0.0-bet
...
v2.0.0-bet
Author | SHA1 | Date | |
---|---|---|---|
|
e983a7b8f3 | ||
|
c33eaba1c0 | ||
|
3774257abb | ||
|
588f09bdaa | ||
|
7557a6ef5a | ||
|
3478645317 | ||
|
a950dd76ba | ||
|
8c0ecec485 |
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve WG-Portal
|
||||
labels: bug
|
||||
|
||||
---
|
||||
<!-- Tip: you can use code blocks
|
||||
for better better formatting of yaml config or logs
|
||||
|
||||
```yaml
|
||||
# config.yaml
|
||||
```
|
||||
|
||||
```console
|
||||
logs here
|
||||
``` -->
|
||||
|
||||
**Describe the bug**
|
||||
<!-- A clear and concise description of what the bug is. -->
|
||||
|
||||
**Expected behavior**
|
||||
<!-- A clear and concise description of what you expected to happen. -->
|
||||
|
||||
**Steps to reproduce**
|
||||
<!--Steps to reproduce the bug should be clear and easily reproducible to help people
|
||||
gain an understanding of the problem.-->
|
||||
|
||||
**Screenshots**
|
||||
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||
|
||||
**Additional context**
|
||||
<!-- Add any other context about the problem here. -->
|
||||
- Application version: v
|
||||
- Install method: binary/docker/helm/sources
|
||||
<!-- - OS: -->
|
18
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
18
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
labels: 'enhancement'
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
<!-- A clear and concise description of what the problem is. -->
|
||||
|
||||
**Describe the solution you'd like**
|
||||
<!-- A clear and concise description of what you want to happen. -->
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
|
||||
|
||||
**Additional context**
|
||||
<!-- Add any other context or screenshots about the feature request here. -->
|
18
.github/pull_request_template.md
vendored
Normal file
18
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
## Problem Statement
|
||||
|
||||
What is the problem you're trying to solve?
|
||||
|
||||
## Related Issue
|
||||
|
||||
Fixes #...
|
||||
|
||||
## Proposed Changes
|
||||
|
||||
How do you like to solve the issue and why?
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Commits are signed with `git commit --signoff`
|
||||
- [ ] Changes have reasonable test coverage
|
||||
- [ ] Tests pass with `make test`
|
||||
- [ ] Helm docs are up-to-date with `make helm-docs`
|
@@ -27,97 +27,97 @@ The [Values](#values) section lists the parameters that can be configured during
|
||||
|
||||
## Values
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| nameOverride | string | `""` | Partially override resource names (adds suffix) |
|
||||
| fullnameOverride | string | `""` | Fully override resource names |
|
||||
| extraDeploy | list | `[]` | Array of extra objects to deploy with the release |
|
||||
| config.advanced | tpl/object | `{}` | [Advanced configuration](https://wgportal.org/latest/documentation/configuration/overview/#advanced) options. |
|
||||
| config.auth | tpl/object | `{}` | [Auth configuration](https://wgportal.org/latest/documentation/configuration/overview/#auth) options. |
|
||||
| config.core | tpl/object | `{}` | [Core configuration](https://wgportal.org/latest/documentation/configuration/overview/#core) options.<br> If external admins in `auth` are defined and there are no `admin_user` and `admin_password` defined here, the default admin account will be disabled. |
|
||||
| config.database | tpl/object | `{}` | [Database configuration](https://wgportal.org/latest/documentation/configuration/overview/#database) options |
|
||||
| config.mail | tpl/object | `{}` | [Mail configuration](https://wgportal.org/latest/documentation/configuration/overview/#mail) options |
|
||||
| config.statistics | tpl/object | `{}` | [Statistics configuration](https://wgportal.org/latest/documentation/configuration/overview/#statistics) options |
|
||||
| config.web | tpl/object | `{}` | [Web configuration](https://wgportal.org/latest/documentation/configuration/overview/#web) options.<br> `listening_address` will be set automatically from `service.web.port`. `external_url` is required to enable ingress and certificate resources. |
|
||||
| revisionHistoryLimit | string | `10` | The number of old ReplicaSets to retain to allow rollback. |
|
||||
| workloadType | string | `"Deployment"` | Workload type - `Deployment` or `StatefulSet` |
|
||||
| strategy | object | `{"type":"RollingUpdate"}` | Update strategy for the workload Valid values are: `RollingUpdate` or `Recreate` for Deployment, `RollingUpdate` or `OnDelete` for StatefulSet |
|
||||
| image.repository | string | `"ghcr.io/h44z/wg-portal"` | Image repository |
|
||||
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
|
||||
| image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion |
|
||||
| imagePullSecrets | list | `[]` | Image pull secrets |
|
||||
| podAnnotations | tpl/object | `{}` | Extra annotations to add to the pod |
|
||||
| podLabels | object | `{}` | Extra labels to add to the pod |
|
||||
| podSecurityContext | object | `{}` | Pod Security Context |
|
||||
| securityContext.capabilities.add | list | `["NET_ADMIN"]` | Add capabilities to the container |
|
||||
| initContainers | tpl/list | `[]` | Pod init containers |
|
||||
| sidecarContainers | tpl/list | `[]` | Pod sidecar containers |
|
||||
| dnsPolicy | string | `"ClusterFirst"` | Set DNS policy for the pod. Valid values are `ClusterFirstWithHostNet`, `ClusterFirst`, `Default` or `None`. |
|
||||
| restartPolicy | string | `"Always"` | Restart policy for all containers within the pod. Valid values are `Always`, `OnFailure` or `Never`. |
|
||||
| hostNetwork | string | `false`. | Use the host's network namespace. |
|
||||
| resources | object | `{}` | Resources requests and limits |
|
||||
| command | list | `[]` | Overwrite pod command |
|
||||
| args | list | `[]` | Additional pod arguments |
|
||||
| env | tpl/list | `[]` | Additional environment variables |
|
||||
| envFrom | tpl/list | `[]` | Additional environment variables from a secret or configMap |
|
||||
| livenessProbe | object | `{}` | Liveness probe configuration |
|
||||
| readinessProbe | object | `{}` | Readiness probe configuration |
|
||||
| startupProbe | object | `{}` | Startup probe configuration |
|
||||
| volumes | tpl/list | `[]` | Additional volumes |
|
||||
| volumeMounts | tpl/list | `[]` | Additional volumeMounts |
|
||||
| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node Selector configuration |
|
||||
| tolerations | list | `[]` | Tolerations configuration |
|
||||
| affinity | object | `{}` | Affinity configuration |
|
||||
| service.mixed.enabled | bool | `false` | Whether to create a single service for the web and wireguard interfaces |
|
||||
| service.mixed.type | string | `"LoadBalancer"` | Service type |
|
||||
| service.web.annotations | object | `{}` | Annotations for the web service |
|
||||
| service.web.type | string | `"ClusterIP"` | Web service type |
|
||||
| service.web.port | int | `8888` | Web service port Used for the web interface listener |
|
||||
| service.web.appProtocol | string | `"http"` | Web service appProtocol. Will be auto set to `https` if certificate is enabled. |
|
||||
| service.wireguard.annotations | object | `{}` | Annotations for the WireGuard service |
|
||||
| service.wireguard.type | string | `"LoadBalancer"` | Wireguard service type |
|
||||
| service.wireguard.ports | list | `[51820]` | Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface. |
|
||||
| service.metrics.port | int | `8787` | |
|
||||
| ingress.enabled | bool | `false` | Specifies whether an ingress resource should be created |
|
||||
| ingress.className | string | `""` | Ingress class name |
|
||||
| ingress.annotations | object | `{}` | Ingress annotations |
|
||||
| ingress.tls | bool | `false` | Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret |
|
||||
| certificate.enabled | bool | `false` | Specifies whether a certificate resource should be created. If enabled, certificate will be used for the web. |
|
||||
| certificate.issuer.name | string | `""` | Certificate issuer name |
|
||||
| certificate.issuer.kind | string | `""` | Certificate issuer kind (ClusterIssuer or Issuer) |
|
||||
| certificate.issuer.group | string | `"cert-manager.io"` | Certificate issuer group |
|
||||
| certificate.duration | string | `""` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.renewBefore | string | `""` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.commonName | string | `""` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.emailAddresses | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.ipAddresses | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.keystores | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.privateKey | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.secretTemplate | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.subject | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.uris | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.usages | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| persistence.enabled | bool | `false` | Specifies whether an persistent volume should be created |
|
||||
| persistence.annotations | object | `{}` | Persistent Volume Claim annotations |
|
||||
| persistence.storageClass | string | `""` | Persistent Volume storage class. If undefined (the default) cluster's default provisioner will be used. |
|
||||
| persistence.accessMode | string | `"ReadWriteOnce"` | Persistent Volume Access Mode |
|
||||
| persistence.size | string | `"1Gi"` | Persistent Volume size |
|
||||
| serviceAccount.create | bool | `true` | Specifies whether a service account should be created |
|
||||
| serviceAccount.annotations | object | `{}` | Service account annotations |
|
||||
| serviceAccount.automount | bool | `false` | Automatically mount a ServiceAccount's API credentials |
|
||||
| serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |
|
||||
| monitoring.enabled | bool | `false` | Enable Prometheus monitoring. |
|
||||
| monitoring.apiVersion | string | `"monitoring.coreos.com/v1"` | API version of the Prometheus resource. Use `azmonitoring.coreos.com/v1` for Azure Managed Prometheus. |
|
||||
| monitoring.kind | string | `"PodMonitor"` | Kind of the Prometheus resource. Could be `PodMonitor` or `ServiceMonitor`. |
|
||||
| monitoring.labels | object | `{}` | Resource labels. |
|
||||
| monitoring.annotations | object | `{}` | Resource annotations. |
|
||||
| monitoring.interval | string | `1m` | Interval at which metrics should be scraped. If not specified `config.statistics.data_collection_interval` interval is used. |
|
||||
| monitoring.metricRelabelings | list | `[]` | Relabelings to samples before ingestion. |
|
||||
| monitoring.relabelings | list | `[]` | Relabelings to samples before scraping. |
|
||||
| monitoring.scrapeTimeout | string | `""` | Timeout after which the scrape is ended If not specified, the Prometheus global scrape interval is used. |
|
||||
| monitoring.jobLabel | string | `""` | The label to use to retrieve the job name from. |
|
||||
| monitoring.podTargetLabels | object | `{}` | Transfers labels on the Kubernetes Pod onto the target. |
|
||||
| monitoring.dashboard.enabled | bool | `false` | Enable Grafana dashboard. |
|
||||
| monitoring.dashboard.annotations | object | `{}` | Annotations for the dashboard ConfigMap. |
|
||||
| monitoring.dashboard.labels | object | `{}` | Additional labels for the dashboard ConfigMap. |
|
||||
| monitoring.dashboard.namespace | string | `""` | Dashboard ConfigMap namespace Overrides the namespace for the dashboard ConfigMap. |
|
||||
| Key | Type | Default | Description |
|
||||
|----------------------------------|------------|--------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| nameOverride | string | `""` | Partially override resource names (adds suffix) |
|
||||
| fullnameOverride | string | `""` | Fully override resource names |
|
||||
| extraDeploy | list | `[]` | Array of extra objects to deploy with the release |
|
||||
| config.advanced | tpl/object | `{}` | [Advanced configuration](https://wgportal.org/latest/documentation/configuration/overview/#advanced) options. |
|
||||
| config.auth | tpl/object | `{}` | [Auth configuration](https://wgportal.org/latest/documentation/configuration/overview/#auth) options. |
|
||||
| config.core | tpl/object | `{}` | [Core configuration](https://wgportal.org/latest/documentation/configuration/overview/#core) options.<br> If external admins in `auth` are defined and there are no `admin_user` and `admin_password` defined here, the default admin account will be disabled. |
|
||||
| config.database | tpl/object | `{}` | [Database configuration](https://wgportal.org/latest/documentation/configuration/overview/#database) options |
|
||||
| config.mail | tpl/object | `{}` | [Mail configuration](https://wgportal.org/latest/documentation/configuration/overview/#mail) options |
|
||||
| config.statistics | tpl/object | `{}` | [Statistics configuration](https://wgportal.org/latest/documentation/configuration/overview/#statistics) options |
|
||||
| config.web | tpl/object | `{}` | [Web configuration](https://wgportal.org/latest/documentation/configuration/overview/#web) options.<br> `listening_address` will be set automatically from `service.web.port`. `external_url` is required to enable ingress and certificate resources. |
|
||||
| revisionHistoryLimit | string | `10` | The number of old ReplicaSets to retain to allow rollback. |
|
||||
| workloadType | string | `"Deployment"` | Workload type - `Deployment` or `StatefulSet` |
|
||||
| strategy | object | `{"type":"RollingUpdate"}` | Update strategy for the workload Valid values are: `RollingUpdate` or `Recreate` for Deployment, `RollingUpdate` or `OnDelete` for StatefulSet |
|
||||
| image.repository | string | `"ghcr.io/h44z/wg-portal"` | Image repository |
|
||||
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
|
||||
| image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion |
|
||||
| imagePullSecrets | list | `[]` | Image pull secrets |
|
||||
| podAnnotations | tpl/object | `{}` | Extra annotations to add to the pod |
|
||||
| podLabels | object | `{}` | Extra labels to add to the pod |
|
||||
| podSecurityContext | object | `{}` | Pod Security Context |
|
||||
| securityContext.capabilities.add | list | `["NET_ADMIN"]` | Add capabilities to the container |
|
||||
| initContainers | tpl/list | `[]` | Pod init containers |
|
||||
| sidecarContainers | tpl/list | `[]` | Pod sidecar containers |
|
||||
| dnsPolicy | string | `"ClusterFirst"` | Set DNS policy for the pod. Valid values are `ClusterFirstWithHostNet`, `ClusterFirst`, `Default` or `None`. |
|
||||
| restartPolicy | string | `"Always"` | Restart policy for all containers within the pod. Valid values are `Always`, `OnFailure` or `Never`. |
|
||||
| hostNetwork | string | `false`. | Use the host's network namespace. |
|
||||
| resources | object | `{}` | Resources requests and limits |
|
||||
| command | list | `[]` | Overwrite pod command |
|
||||
| args | list | `[]` | Additional pod arguments |
|
||||
| env | tpl/list | `[]` | Additional environment variables |
|
||||
| envFrom | tpl/list | `[]` | Additional environment variables from a secret or configMap |
|
||||
| livenessProbe | object | `{}` | Liveness probe configuration |
|
||||
| readinessProbe | object | `{}` | Readiness probe configuration |
|
||||
| startupProbe | object | `{}` | Startup probe configuration |
|
||||
| volumes | tpl/list | `[]` | Additional volumes |
|
||||
| volumeMounts | tpl/list | `[]` | Additional volumeMounts |
|
||||
| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node Selector configuration |
|
||||
| tolerations | list | `[]` | Tolerations configuration |
|
||||
| affinity | object | `{}` | Affinity configuration |
|
||||
| service.mixed.enabled | bool | `false` | Whether to create a single service for the web and wireguard interfaces |
|
||||
| service.mixed.type | string | `"LoadBalancer"` | Service type |
|
||||
| service.web.annotations | object | `{}` | Annotations for the web service |
|
||||
| service.web.type | string | `"ClusterIP"` | Web service type |
|
||||
| service.web.port | int | `8888` | Web service port Used for the web interface listener |
|
||||
| service.web.appProtocol | string | `"http"` | Web service appProtocol. Will be auto set to `https` if certificate is enabled. |
|
||||
| service.wireguard.annotations | object | `{}` | Annotations for the WireGuard service |
|
||||
| service.wireguard.type | string | `"LoadBalancer"` | Wireguard service type |
|
||||
| service.wireguard.ports | list | `[51820]` | Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface. |
|
||||
| service.metrics.port | int | `8787` | |
|
||||
| ingress.enabled | bool | `false` | Specifies whether an ingress resource should be created |
|
||||
| ingress.className | string | `""` | Ingress class name |
|
||||
| ingress.annotations | object | `{}` | Ingress annotations |
|
||||
| ingress.tls | bool | `false` | Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret |
|
||||
| certificate.enabled | bool | `false` | Specifies whether a certificate resource should be created. If enabled, certificate will be used for the web. |
|
||||
| certificate.issuer.name | string | `""` | Certificate issuer name |
|
||||
| certificate.issuer.kind | string | `""` | Certificate issuer kind (ClusterIssuer or Issuer) |
|
||||
| certificate.issuer.group | string | `"cert-manager.io"` | Certificate issuer group |
|
||||
| certificate.duration | string | `""` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.renewBefore | string | `""` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.commonName | string | `""` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.emailAddresses | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.ipAddresses | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.keystores | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.privateKey | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.secretTemplate | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.subject | object | `{}` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.uris | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| certificate.usages | list | `[]` | Optional. [Documentation](https://cert-manager.io/docs/usage/certificate/#creating-certificate-resources) |
|
||||
| persistence.enabled | bool | `false` | Specifies whether an persistent volume should be created |
|
||||
| persistence.annotations | object | `{}` | Persistent Volume Claim annotations |
|
||||
| persistence.storageClass | string | `""` | Persistent Volume storage class. If undefined (the default) cluster's default provisioner will be used. |
|
||||
| persistence.accessMode | string | `"ReadWriteOnce"` | Persistent Volume Access Mode |
|
||||
| persistence.size | string | `"1Gi"` | Persistent Volume size |
|
||||
| serviceAccount.create | bool | `true` | Specifies whether a service account should be created |
|
||||
| serviceAccount.annotations | object | `{}` | Service account annotations |
|
||||
| serviceAccount.automount | bool | `false` | Automatically mount a ServiceAccount's API credentials |
|
||||
| serviceAccount.name | string | `""` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template |
|
||||
| monitoring.enabled | bool | `false` | Enable Prometheus monitoring. |
|
||||
| monitoring.apiVersion | string | `"monitoring.coreos.com/v1"` | API version of the Prometheus resource. Use `azmonitoring.coreos.com/v1` for Azure Managed Prometheus. |
|
||||
| monitoring.kind | string | `"PodMonitor"` | Kind of the Prometheus resource. Could be `PodMonitor` or `ServiceMonitor`. |
|
||||
| monitoring.labels | object | `{}` | Resource labels. |
|
||||
| monitoring.annotations | object | `{}` | Resource annotations. |
|
||||
| monitoring.interval | string | `1m` | Interval at which metrics should be scraped. If not specified `config.statistics.data_collection_interval` interval is used. |
|
||||
| monitoring.metricRelabelings | list | `[]` | Relabelings to samples before ingestion. |
|
||||
| monitoring.relabelings | list | `[]` | Relabelings to samples before scraping. |
|
||||
| monitoring.scrapeTimeout | string | `""` | Timeout after which the scrape is ended If not specified, the Prometheus global scrape interval is used. |
|
||||
| monitoring.jobLabel | string | `""` | The label to use to retrieve the job name from. |
|
||||
| monitoring.podTargetLabels | object | `{}` | Transfers labels on the Kubernetes Pod onto the target. |
|
||||
| monitoring.dashboard.enabled | bool | `false` | Enable Grafana dashboard. |
|
||||
| monitoring.dashboard.annotations | object | `{}` | Annotations for the dashboard ConfigMap. |
|
||||
| monitoring.dashboard.labels | object | `{}` | Additional labels for the dashboard ConfigMap. |
|
||||
| monitoring.dashboard.namespace | string | `""` | Dashboard ConfigMap namespace Overrides the namespace for the dashboard ConfigMap. |
|
||||
|
@@ -6,6 +6,7 @@ Below are some sample YAML configurations demonstrating how to override some def
|
||||
core:
|
||||
admin_user: test@example.com
|
||||
admin_password: password
|
||||
admin_api_token: super-s3cr3t-api-token-or-a-UUID
|
||||
import_existing: false
|
||||
create_default_peer: true
|
||||
self_provisioning_allowed: true
|
||||
@@ -102,7 +103,7 @@ auth:
|
||||
department: department
|
||||
is_admin: wg_admin
|
||||
admin_mapping:
|
||||
- admin_value_regex: ^true$
|
||||
admin_value_regex: ^true$
|
||||
registration_enabled: true
|
||||
log_user_info: true
|
||||
|
||||
@@ -125,7 +126,7 @@ auth:
|
||||
department: department
|
||||
user_groups: groups
|
||||
admin_mapping:
|
||||
- admin_group_regex: ^the-admin-group$
|
||||
admin_group_regex: ^the-admin-group$
|
||||
registration_enabled: true
|
||||
log_user_info: true
|
||||
```
|
||||
@@ -157,7 +158,7 @@ auth:
|
||||
firstname: name
|
||||
is_admin: this-attribute-must-be-true
|
||||
admin_mapping:
|
||||
- admin_value_regex: ^(True|true)$
|
||||
admin_value_regex: ^(True|true)$
|
||||
registration_enabled: true
|
||||
|
||||
# a sample provider where either users with the attribute `this-attribute-must-be-true` set to `true` or
|
||||
|
@@ -111,6 +111,10 @@ More advanced options are found in the subsequent `Advanced` section.
|
||||
- **Default:** `wgportal`
|
||||
- **Description:** The administrator password. The default password of `wgportal` should be changed immediately.
|
||||
|
||||
### `admin_api_token`
|
||||
- **Default:** *(empty)*
|
||||
- **Description:** An API token for the admin user. If a token is provided, the REST API can be accessed using this token. If empty, the API is initially disabled for the admin user.
|
||||
|
||||
### `editable_keys`
|
||||
- **Default:** `true`
|
||||
- **Description:** Allow editing of WireGuard key-pairs directly in the UI.
|
||||
|
@@ -45,13 +45,12 @@ const languageFlag = computed(() => {
|
||||
if (!appGlobal.$i18n.availableLocales.includes(lang)) {
|
||||
lang = appGlobal.$i18n.fallbackLocale;
|
||||
}
|
||||
if (lang === "en") {
|
||||
lang = "us";
|
||||
}
|
||||
if (lang === "zh") {
|
||||
lang = "cn";
|
||||
}
|
||||
return "fi-" + lang;
|
||||
const langMap = {
|
||||
en: "us",
|
||||
uk: "ua",
|
||||
zh: "cn",
|
||||
};
|
||||
return "fi-" + (langMap[lang] || lang);
|
||||
})
|
||||
|
||||
const companyName = ref(WGPORTAL_SITE_COMPANY_NAME);
|
||||
@@ -117,9 +116,11 @@ const currentYear = ref(new Date().getFullYear())
|
||||
<button aria-expanded="false" aria-haspopup="true" class="btn btn btn-secondary pe-0"
|
||||
data-bs-toggle="dropdown" type="button"><span :class="languageFlag" class="fi"></span></button>
|
||||
<div aria-labelledby="btnGroupDrop3" class="dropdown-menu" style="">
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('en')"><span class="fi fi-us"></span> English</a>
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('de')"><span class="fi fi-de"></span> Deutsch</a>
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('en')"><span class="fi fi-us"></span> English</a>
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('fr')"><span class="fi fi-fr"></span> Français</a>
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('ru')"><span class="fi fi-ru"></span> Русский</a>
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('uk')"><span class="fi fi-ua"></span> Українська</a>
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('vi')"><span class="fi fi-vi"></span> Tiếng Việt</a>
|
||||
<a class="dropdown-item" href="#" @click.prevent="switchLanguage('zh')"><span class="fi fi-cn"></span> 中文</a>
|
||||
</div>
|
||||
|
@@ -1,7 +1,9 @@
|
||||
// src/lang/index.js
|
||||
import de from './translations/de.json';
|
||||
import ru from './translations/ru.json';
|
||||
import en from './translations/en.json';
|
||||
import fr from './translations/fr.json';
|
||||
import ru from './translations/ru.json';
|
||||
import uk from './translations/uk.json';
|
||||
import vi from './translations/vi.json';
|
||||
import zh from './translations/zh.json';
|
||||
import {createI18n} from "vue-i18n";
|
||||
@@ -19,10 +21,12 @@ const i18n = createI18n({
|
||||
fallbackLocale: "en", // set fallback locale
|
||||
messages: {
|
||||
"de": de,
|
||||
"ru": ru,
|
||||
"en": en,
|
||||
"fr": fr,
|
||||
"ru": ru,
|
||||
"uk": uk,
|
||||
"vi": vi,
|
||||
"zh": zh
|
||||
"zh": zh,
|
||||
}
|
||||
});
|
||||
|
||||
|
515
frontend/src/lang/translations/fr.json
Normal file
515
frontend/src/lang/translations/fr.json
Normal file
@@ -0,0 +1,515 @@
|
||||
{
|
||||
"languages": {
|
||||
"fr": "Français"
|
||||
},
|
||||
"general": {
|
||||
"pagination": {
|
||||
"size": "Nombre d'éléments",
|
||||
"all": "Tous (lent)"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Rechercher...",
|
||||
"button": "Rechercher"
|
||||
},
|
||||
"select-all": "Tout sélectionner",
|
||||
"yes": "Oui",
|
||||
"no": "Non",
|
||||
"cancel": "Annuler",
|
||||
"close": "Fermer",
|
||||
"save": "Enregistrer",
|
||||
"delete": "Supprimer"
|
||||
},
|
||||
"login": {
|
||||
"headline": "Veuillez vous connecter",
|
||||
"username": {
|
||||
"label": "Nom d'utilisateur",
|
||||
"placeholder": "Veuillez entrer votre nom d'utilisateur"
|
||||
},
|
||||
"password": {
|
||||
"label": "Mot de passe",
|
||||
"placeholder": "Veuillez entrer votre mot de passe"
|
||||
},
|
||||
"button": "Se connecter"
|
||||
},
|
||||
"menu": {
|
||||
"home": "Accueil",
|
||||
"interfaces": "Interfaces",
|
||||
"users": "Utilisateurs",
|
||||
"lang": "Changer de langue",
|
||||
"profile": "Mon profil",
|
||||
"settings": "Paramètres",
|
||||
"login": "Se connecter",
|
||||
"logout": "Se déconnecter"
|
||||
},
|
||||
"home": {
|
||||
"headline": "Portail VPN WireGuard®",
|
||||
"info-headline": "Plus d'informations",
|
||||
"abstract": "WireGuard® est un VPN extrêmement simple mais rapide et moderne qui utilise une cryptographie de pointe. Il vise à être plus rapide, plus simple, plus léger et plus utile qu'IPsec, tout en évitant le casse-tête massif. Il se veut considérablement plus performant qu'OpenVPN.",
|
||||
"installation": {
|
||||
"box-header": "Installation de WireGuard",
|
||||
"headline": "Installation",
|
||||
"content": "Les instructions d'installation du logiciel client sont disponibles sur le site Web officiel de WireGuard.",
|
||||
"button": "Ouvrir les instructions"
|
||||
},
|
||||
"about-wg": {
|
||||
"box-header": "À propos de WireGuard",
|
||||
"headline": "À propos",
|
||||
"content": "WireGuard® est un VPN extrêmement simple mais rapide et moderne qui utilise une cryptographie de pointe.",
|
||||
"button": "Plus d'informations"
|
||||
},
|
||||
"about-portal": {
|
||||
"box-header": "À propos du Portail WireGuard",
|
||||
"headline": "Portail WireGuard",
|
||||
"content": "Le Portail WireGuard est un portail de configuration simple basé sur le Web pour WireGuard.",
|
||||
"button": "Plus d'informations"
|
||||
},
|
||||
"profiles": {
|
||||
"headline": "Profils VPN",
|
||||
"abstract": "Vous pouvez accéder et télécharger vos configurations VPN personnelles via votre profil utilisateur.",
|
||||
"content": "Pour trouver tous vos profils configurés, cliquez sur le bouton ci-dessous.",
|
||||
"button": "Ouvrir mon profil"
|
||||
},
|
||||
"admin": {
|
||||
"headline": "Zone d'administration",
|
||||
"abstract": "Dans la zone d'administration, vous pouvez gérer les pairs WireGuard et l'interface du serveur, ainsi que les utilisateurs autorisés à se connecter au Portail WireGuard.",
|
||||
"content": "",
|
||||
"button-admin": "Ouvrir l'administration du serveur",
|
||||
"button-user": "Ouvrir l'administration des utilisateurs"
|
||||
}
|
||||
},
|
||||
"interfaces": {
|
||||
"headline": "Administration des interfaces",
|
||||
"headline-peers": "Pairs VPN actuels",
|
||||
"headline-endpoints": "Points de terminaison actuels",
|
||||
"no-interface": {
|
||||
"default-selection": "Aucune interface disponible",
|
||||
"headline": "Aucune interface trouvée...",
|
||||
"abstract": "Cliquez sur le bouton plus ci-dessus pour créer une nouvelle interface WireGuard."
|
||||
},
|
||||
"no-peer": {
|
||||
"headline": "Aucun pair disponible",
|
||||
"abstract": "Actuellement, aucun pair n'est disponible pour l'interface WireGuard sélectionnée."
|
||||
},
|
||||
"table-heading": {
|
||||
"name": "Nom",
|
||||
"user": "Utilisateur",
|
||||
"ip": "IP",
|
||||
"endpoint": "Point de terminaison",
|
||||
"status": "Statut"
|
||||
},
|
||||
"interface": {
|
||||
"headline": "État de l'interface pour",
|
||||
"mode": "mode",
|
||||
"key": "Clé publique",
|
||||
"endpoint": "Point de terminaison public",
|
||||
"port": "Port d'écoute",
|
||||
"peers": "Pairs activés",
|
||||
"total-peers": "Total des pairs",
|
||||
"endpoints": "Points de terminaison activés",
|
||||
"total-endpoints": "Total des points de terminaison",
|
||||
"ip": "Adresse IP",
|
||||
"default-allowed-ip": "IP autorisées par défaut",
|
||||
"dns": "Serveurs DNS",
|
||||
"mtu": "MTU",
|
||||
"default-keep-alive": "Intervalle Keepalive par défaut",
|
||||
"button-show-config": "Afficher la configuration",
|
||||
"button-download-config": "Télécharger la configuration",
|
||||
"button-store-config": "Enregistrer la configuration pour wg-quick",
|
||||
"button-edit": "Modifier l'interface"
|
||||
},
|
||||
"button-add-interface": "Ajouter une interface",
|
||||
"button-add-peer": "Ajouter un pair",
|
||||
"button-add-peers": "Ajouter plusieurs pairs",
|
||||
"button-show-peer": "Afficher le pair",
|
||||
"button-edit-peer": "Modifier le pair",
|
||||
"peer-disabled": "Le pair est désactivé, raison :",
|
||||
"peer-expiring": "Le pair expire le",
|
||||
"peer-connected": "Connecté",
|
||||
"peer-not-connected": "Non connecté",
|
||||
"peer-handshake": "Dernière négociation :",
|
||||
"button-show-peer": "Afficher le pair",
|
||||
"button-edit-peer": "Modifier le pair"
|
||||
},
|
||||
"users": {
|
||||
"headline": "Administration des utilisateurs",
|
||||
"table-heading": {
|
||||
"id": "ID",
|
||||
"email": "E-mail",
|
||||
"firstname": "Prénom",
|
||||
"lastname": "Nom",
|
||||
"source": "Source",
|
||||
"peers": "Pairs",
|
||||
"admin": "Admin"
|
||||
},
|
||||
"no-user": {
|
||||
"headline": "Aucun utilisateur disponible",
|
||||
"abstract": "Actuellement, aucun utilisateur n'est enregistré auprès du Portail WireGuard."
|
||||
},
|
||||
"button-add-user": "Ajouter un utilisateur",
|
||||
"button-show-user": "Afficher l'utilisateur",
|
||||
"button-edit-user": "Modifier l'utilisateur",
|
||||
"user-disabled": "L'utilisateur est désactivé, raison :",
|
||||
"user-locked": "Le compte est verrouillé, raison :",
|
||||
"admin": "L'utilisateur a des privilèges d'administrateur",
|
||||
"no-admin": "L'utilisateur n'a pas de privilèges d'administrateur"
|
||||
},
|
||||
"profile": {
|
||||
"headline": "Mes pairs VPN",
|
||||
"table-heading": {
|
||||
"name": "Nom",
|
||||
"ip": "IP",
|
||||
"stats": "Statut",
|
||||
"interface": "Interface serveur"
|
||||
},
|
||||
"no-peer": {
|
||||
"headline": "Aucun pair disponible",
|
||||
"abstract": "Actuellement, aucun pair n'est associé à votre profil utilisateur."
|
||||
},
|
||||
"peer-connected": "Connecté",
|
||||
"button-add-peer": "Ajouter un pair",
|
||||
"button-show-peer": "Afficher le pair",
|
||||
"button-edit-peer": "Modifier le pair"
|
||||
},
|
||||
"settings": {
|
||||
"headline": "Paramètres",
|
||||
"abstract": "Ici, vous pouvez modifier vos paramètres personnels.",
|
||||
"api": {
|
||||
"headline": "Paramètres de l'API",
|
||||
"abstract": "Ici, vous pouvez configurer les paramètres de l'API RESTful.",
|
||||
"active-description": "L'API est actuellement active pour votre compte utilisateur. Toutes les requêtes API sont authentifiées avec l'authentification de base. Utilisez les informations d'identification suivantes pour l'authentification.",
|
||||
"inactive-description": "L'API est actuellement inactive. Appuyez sur le bouton ci-dessous pour l'activer.",
|
||||
"user-label": "Nom d'utilisateur de l'API :",
|
||||
"user-placeholder": "L'utilisateur de l'API",
|
||||
"token-label": "Mot de passe de l'API :",
|
||||
"token-placeholder": "Le jeton de l'API",
|
||||
"token-created-label": "Accès API accordé le :",
|
||||
"button-disable-title": "Désactiver l'API, cela invalidera le jeton actuel.",
|
||||
"button-disable-text": "Désactiver l'API",
|
||||
"button-enable-title": "Activer l'API, cela générera un nouveau jeton.",
|
||||
"button-enable-text": "Activer l'API",
|
||||
"api-link": "Documentation de l'API"
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"user-view": {
|
||||
"headline": "Compte utilisateur :",
|
||||
"tab-user": "Informations",
|
||||
"tab-peers": "Pairs",
|
||||
"headline-info": "Informations sur l'utilisateur :",
|
||||
"headline-notes": "Notes :",
|
||||
"email": "E-mail",
|
||||
"firstname": "Prénom",
|
||||
"lastname": "Nom",
|
||||
"phone": "Numéro de téléphone",
|
||||
"department": "Département",
|
||||
"api-enabled": "Accès API",
|
||||
"disabled": "Compte désactivé",
|
||||
"locked": "Compte verrouillé",
|
||||
"no-peers": "L'utilisateur n'a pas de pairs associés.",
|
||||
"peers": {
|
||||
"name": "Nom",
|
||||
"interface": "Interface",
|
||||
"ip": "IP"
|
||||
}
|
||||
},
|
||||
"user-edit": {
|
||||
"headline-edit": "Modifier l'utilisateur :",
|
||||
"headline-new": "Nouvel utilisateur",
|
||||
"header-general": "Général",
|
||||
"header-personal": "Informations sur l'utilisateur",
|
||||
"header-notes": "Notes",
|
||||
"header-state": "État",
|
||||
"identifier": {
|
||||
"label": "Identifiant",
|
||||
"placeholder": "L'identifiant unique de l'utilisateur"
|
||||
},
|
||||
"source": {
|
||||
"label": "Source",
|
||||
"placeholder": "La source de l'utilisateur"
|
||||
},
|
||||
"password": {
|
||||
"label": "Mot de passe",
|
||||
"placeholder": "Un mot de passe super secret",
|
||||
"description": "Laissez ce champ vide pour conserver le mot de passe actuel."
|
||||
},
|
||||
"email": {
|
||||
"label": "E-mail",
|
||||
"placeholder": "L'adresse e-mail"
|
||||
},
|
||||
"phone": {
|
||||
"label": "Téléphone",
|
||||
"placeholder": "Le numéro de téléphone"
|
||||
},
|
||||
"department": {
|
||||
"label": "Département",
|
||||
"placeholder": "Le département"
|
||||
},
|
||||
"firstname": {
|
||||
"label": "Prénom",
|
||||
"placeholder": "Prénom"
|
||||
},
|
||||
"lastname": {
|
||||
"label": "Nom",
|
||||
"placeholder": "Nom"
|
||||
},
|
||||
"notes": {
|
||||
"label": "Notes",
|
||||
"placeholder": ""
|
||||
},
|
||||
"disabled": {
|
||||
"label": "Désactivé (aucune connexion WireGuard et aucune connexion possible)"
|
||||
},
|
||||
"locked": {
|
||||
"label": "Verrouillé (aucune connexion possible, les connexions WireGuard fonctionnent toujours)"
|
||||
},
|
||||
"admin": {
|
||||
"label": "Est Admin"
|
||||
}
|
||||
},
|
||||
"interface-view": {
|
||||
"headline": "Configuration pour l'interface :"
|
||||
},
|
||||
"interface-edit": {
|
||||
"headline-edit": "Modifier l'interface :",
|
||||
"headline-new": "Nouvelle interface",
|
||||
"tab-interface": "Interface",
|
||||
"tab-peerdef": "Valeurs par défaut des pairs",
|
||||
"header-general": "Général",
|
||||
"header-network": "Réseau",
|
||||
"header-crypto": "Cryptographie",
|
||||
"header-hooks": "Hooks d'interface",
|
||||
"header-peer-hooks": "Hooks",
|
||||
"header-state": "État",
|
||||
"identifier": {
|
||||
"label": "Identifiant",
|
||||
"placeholder": "L'identifiant unique de l'interface"
|
||||
},
|
||||
"mode": {
|
||||
"label": "Mode de l'interface",
|
||||
"server": "Mode serveur",
|
||||
"client": "Mode client",
|
||||
"any": "Mode inconnu"
|
||||
},
|
||||
"display-name": {
|
||||
"label": "Nom d'affichage",
|
||||
"placeholder": "Le nom descriptif de l'interface"
|
||||
},
|
||||
"private-key": {
|
||||
"label": "Clé privée",
|
||||
"placeholder": "La clé privée"
|
||||
},
|
||||
"public-key": {
|
||||
"label": "Clé publique",
|
||||
"placeholder": "La clé publique"
|
||||
},
|
||||
"ip": {
|
||||
"label": "Adresses IP",
|
||||
"placeholder": "Adresses IP (format CIDR)"
|
||||
},
|
||||
"listen-port": {
|
||||
"label": "Port d'écoute",
|
||||
"placeholder": "Le port d'écoute"
|
||||
},
|
||||
"dns": {
|
||||
"label": "Serveur DNS",
|
||||
"placeholder": "Les serveurs DNS qui doivent être utilisés"
|
||||
},
|
||||
"dns-search": {
|
||||
"label": "Domaines de recherche DNS",
|
||||
"placeholder": "Préfixes de recherche DNS"
|
||||
},
|
||||
"mtu": {
|
||||
"label": "MTU",
|
||||
"placeholder": "Le MTU de l'interface (0 = conserver la valeur par défaut)"
|
||||
},
|
||||
"firewall-mark": {
|
||||
"label": "Marque de pare-feu",
|
||||
"placeholder": "Marque de pare-feu appliquée au trafic sortant. (0 = automatique)"
|
||||
},
|
||||
"routing-table": {
|
||||
"label": "Table de routage",
|
||||
"placeholder": "L'ID de la table de routage",
|
||||
"description": "Cas particuliers : off = ne pas gérer les routes, 0 = automatique"
|
||||
},
|
||||
"pre-up": {
|
||||
"label": "Pré-Up",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"post-up": {
|
||||
"label": "Post-Up",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"pre-down": {
|
||||
"label": "Pré-Down",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"post-down": {
|
||||
"label": "Post-Down",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"disabled": {
|
||||
"label": "Interface désactivée"
|
||||
},
|
||||
"save-config": {
|
||||
"label": "Enregistrer automatiquement la configuration wg-quick"
|
||||
},
|
||||
"defaults": {
|
||||
"endpoint": {
|
||||
"label": "Adresse du point de terminaison",
|
||||
"placeholder": "Adresse du point de terminaison",
|
||||
"description": "L'adresse du point de terminaison auquel les pairs se connecteront. (par exemple, wg.example.com ou wg.example.com:51820)"
|
||||
},
|
||||
"networks": {
|
||||
"label": "Réseaux IP",
|
||||
"placeholder": "Adresses de réseau",
|
||||
"description": "Les pairs recevront des adresses IP de ces sous-réseaux."
|
||||
},
|
||||
"allowed-ip": {
|
||||
"label": "Adresses IP autorisées",
|
||||
"placeholder": "Adresses IP autorisées par défaut"
|
||||
},
|
||||
"mtu": {
|
||||
"label": "MTU",
|
||||
"placeholder": "Le MTU du client (0 = conserver la valeur par défaut)"
|
||||
},
|
||||
"keep-alive": {
|
||||
"label": "Intervalle Keep Alive",
|
||||
"placeholder": "Persistent Keepalive (0 = par défaut)"
|
||||
}
|
||||
},
|
||||
"button-apply-defaults": "Appliquer les valeurs par défaut des pairs"
|
||||
},
|
||||
"peer-view": {
|
||||
"headline-peer": "Pair :",
|
||||
"headline-endpoint": "Point de terminaison :",
|
||||
"section-info": "Informations sur le pair",
|
||||
"section-status": "État actuel",
|
||||
"section-config": "Configuration",
|
||||
"identifier": "Identifiant",
|
||||
"ip": "Adresses IP",
|
||||
"user": "Utilisateur associé",
|
||||
"notes": "Notes",
|
||||
"expiry-status": "Expire le",
|
||||
"disabled-status": "Désactivé le",
|
||||
"traffic": "Trafic",
|
||||
"connection-status": "Statistiques de connexion",
|
||||
"upload": "Octets envoyés (du serveur au pair)",
|
||||
"download": "Octets téléchargés (du pair au serveur)",
|
||||
"pingable": "Peut être pingé",
|
||||
"handshake": "Dernière négociation",
|
||||
"connected-since": "Connecté depuis",
|
||||
"endpoint": "Point de terminaison",
|
||||
"button-download": "Télécharger la configuration",
|
||||
"button-email": "Envoyer la configuration par e-mail"
|
||||
},
|
||||
"peer-edit": {
|
||||
"headline-edit-peer": "Modifier le pair :",
|
||||
"headline-edit-endpoint": "Modifier le point de terminaison :",
|
||||
"headline-new-peer": "Créer un pair",
|
||||
"headline-new-endpoint": "Créer un point de terminaison",
|
||||
"header-general": "Général",
|
||||
"header-network": "Réseau",
|
||||
"header-crypto": "Cryptographie",
|
||||
"header-hooks": "Hooks (exécutés sur le pair)",
|
||||
"header-state": "État",
|
||||
"display-name": {
|
||||
"label": "Nom d'affichage",
|
||||
"placeholder": "Le nom descriptif du pair"
|
||||
},
|
||||
"linked-user": {
|
||||
"label": "Utilisateur lié",
|
||||
"placeholder": "Le compte utilisateur qui possède ce pair"
|
||||
},
|
||||
"private-key": {
|
||||
"label": "Clé privée",
|
||||
"placeholder": "La clé privée"
|
||||
},
|
||||
"public-key": {
|
||||
"label": "Clé publique",
|
||||
"placeholder": "La clé publique"
|
||||
},
|
||||
"preshared-key": {
|
||||
"label": "Clé pré-partagée",
|
||||
"placeholder": "Clé pré-partagée facultative"
|
||||
},
|
||||
"endpoint-public-key": {
|
||||
"label": "Clé publique du point de terminaison",
|
||||
"placeholder": "La clé publique du point de terminaison distant"
|
||||
},
|
||||
"endpoint": {
|
||||
"label": "Adresse du point de terminaison",
|
||||
"placeholder": "L'adresse du point de terminaison distant"
|
||||
},
|
||||
"ip": {
|
||||
"label": "Adresses IP",
|
||||
"placeholder": "Adresses IP (format CIDR)"
|
||||
},
|
||||
"allowed-ip": {
|
||||
"label": "Adresses IP autorisées",
|
||||
"placeholder": "Adresses IP autorisées (format CIDR)"
|
||||
},
|
||||
"extra-allowed-ip": {
|
||||
"label": "Adresses IP autorisées supplémentaires",
|
||||
"placeholder": "IP autorisées supplémentaires (côté serveur)",
|
||||
"description": "Ces IP seront ajoutées à l'interface WireGuard distante comme IP autorisées."
|
||||
},
|
||||
"dns": {
|
||||
"label": "Serveur DNS",
|
||||
"placeholder": "Les serveurs DNS qui doivent être utilisés"
|
||||
},
|
||||
"dns-search": {
|
||||
"label": "Domaines de recherche DNS",
|
||||
"placeholder": "Préfixes de recherche DNS"
|
||||
},
|
||||
"keep-alive": {
|
||||
"label": "Intervalle Keep Alive",
|
||||
"placeholder": "Persistent Keepalive (0 = par défaut)"
|
||||
},
|
||||
"mtu": {
|
||||
"label": "MTU",
|
||||
"placeholder": "Le MTU du client (0 = conserver la valeur par défaut)"
|
||||
},
|
||||
"pre-up": {
|
||||
"label": "Pré-Up",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"post-up": {
|
||||
"label": "Post-Up",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"pre-down": {
|
||||
"label": "Pré-Down",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"post-down": {
|
||||
"label": "Post-Down",
|
||||
"placeholder": "Une ou plusieurs commandes bash séparées par ;"
|
||||
},
|
||||
"disabled": {
|
||||
"label": "Pair désactivé"
|
||||
},
|
||||
"ignore-global": {
|
||||
"label": "Ignorer les paramètres globaux"
|
||||
},
|
||||
"expires-at": {
|
||||
"label": "Date d'expiration"
|
||||
}
|
||||
},
|
||||
"peer-multi-create": {
|
||||
"headline-peer": "Créer plusieurs pairs",
|
||||
"headline-endpoint": "Créer plusieurs points de terminaison",
|
||||
"identifiers": {
|
||||
"label": "Identifiants d'utilisateur",
|
||||
"placeholder": "Identifiants d'utilisateur",
|
||||
"description": "Un identifiant d'utilisateur (le nom d'utilisateur) pour lequel un pair doit être créé."
|
||||
},
|
||||
"prefix": {
|
||||
"headline-peer": "Pair :",
|
||||
"headline-endpoint": "Point de terminaison :",
|
||||
"label": "Préfixe du nom d'affichage",
|
||||
"placeholder": "Le préfixe",
|
||||
"description": "Un préfixe qui est ajouté au nom d'affichage des pairs."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
515
frontend/src/lang/translations/uk.json
Normal file
515
frontend/src/lang/translations/uk.json
Normal file
@@ -0,0 +1,515 @@
|
||||
{
|
||||
"languages": {
|
||||
"uk": "Українська"
|
||||
},
|
||||
"general": {
|
||||
"pagination": {
|
||||
"size": "Кількість елементів",
|
||||
"all": "Всі (повільно)"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Пошук...",
|
||||
"button": "Пошук"
|
||||
},
|
||||
"select-all": "Вибрати все",
|
||||
"yes": "Так",
|
||||
"no": "Ні",
|
||||
"cancel": "Скасувати",
|
||||
"close": "Закрити",
|
||||
"save": "Зберегти",
|
||||
"delete": "Видалити"
|
||||
},
|
||||
"login": {
|
||||
"headline": "Будь ласка, увійдіть",
|
||||
"username": {
|
||||
"label": "Ім'я користувача",
|
||||
"placeholder": "Введіть ім'я користувача"
|
||||
},
|
||||
"password": {
|
||||
"label": "Пароль",
|
||||
"placeholder": "Введіть пароль"
|
||||
},
|
||||
"button": "Увійти"
|
||||
},
|
||||
"menu": {
|
||||
"home": "Головна",
|
||||
"interfaces": "Інтерфейси",
|
||||
"users": "Користувачі",
|
||||
"lang": "Змінити мову",
|
||||
"profile": "Мій профіль",
|
||||
"settings": "Налаштування",
|
||||
"login": "Вхід",
|
||||
"logout": "Вийти"
|
||||
},
|
||||
"home": {
|
||||
"headline": "WireGuard® VPN Портал",
|
||||
"info-headline": "Додаткова інформація",
|
||||
"abstract": "WireGuard® — це високоефективний, сучасний і легкий VPN, який використовує передову криптографію. Розроблений для простоти та швидкості, він перевершує IPsec, усуваючи зайву складність. Крім того, він прагне забезпечити значно кращу продуктивність, ніж OpenVPN.",
|
||||
"installation": {
|
||||
"box-header": "Встановлення WireGuard",
|
||||
"headline": "Встановлення",
|
||||
"content": "Інструкції щодо встановлення клієнтського програмного забезпечення можна знайти на офіційному сайті WireGuard.",
|
||||
"button": "Відкрити інструкції"
|
||||
},
|
||||
"about-wg": {
|
||||
"box-header": "Про WireGuard",
|
||||
"headline": "Про програму",
|
||||
"content": "WireGuard® — це надзвичайно простий, швидкий і сучасний VPN, що використовує передову криптографію.",
|
||||
"button": "Докладніше"
|
||||
},
|
||||
"about-portal": {
|
||||
"box-header": "Про портал WireGuard",
|
||||
"headline": "Портал WireGuard",
|
||||
"content": "Портал WireGuard — це простий веб-інтерфейс для налаштування WireGuard.",
|
||||
"button": "Докладніше"
|
||||
},
|
||||
"profiles": {
|
||||
"headline": "VPN профілі",
|
||||
"abstract": "Ви можете отримати доступ та завантажити свої особисті VPN-конфігурації через свій профіль користувача.",
|
||||
"content": "Щоб переглянути всі налаштовані профілі, натисніть кнопку нижче.",
|
||||
"button": "Відкрити мій профіль"
|
||||
},
|
||||
"admin": {
|
||||
"headline": "Адміністративна панель",
|
||||
"abstract": "У адміністративній панелі ви можете керувати клієнтами WireGuard, серверним інтерфейсом і користувачами, які мають доступ до порталу WireGuard.",
|
||||
"content": "",
|
||||
"button-admin": "Відкрити адміністрування сервера",
|
||||
"button-user": "Відкрити адміністрування користувачів"
|
||||
}
|
||||
},
|
||||
"interfaces": {
|
||||
"headline": "Адміністрування інтерфейсів",
|
||||
"headline-peers": "Поточні VPN-піри",
|
||||
"headline-endpoints": "Поточні кінцеві точки",
|
||||
"no-interface": {
|
||||
"default-selection": "Немає доступного інтерфейсу",
|
||||
"headline": "Інтерфейси не знайдено...",
|
||||
"abstract": "Натисніть кнопку з плюсом вище, щоб створити новий інтерфейс WireGuard."
|
||||
},
|
||||
"no-peer": {
|
||||
"headline": "Немає доступних пірів",
|
||||
"abstract": "Наразі немає доступних пірів для вибраного інтерфейсу WireGuard."
|
||||
},
|
||||
"table-heading": {
|
||||
"name": "Ім'я",
|
||||
"user": "Користувач",
|
||||
"ip": "IP-адреси",
|
||||
"endpoint": "Кінцева точка",
|
||||
"status": "Статус"
|
||||
},
|
||||
"interface": {
|
||||
"headline": "Статус інтерфейсу для",
|
||||
"mode": "режим",
|
||||
"key": "Публічний ключ",
|
||||
"endpoint": "Публічна кінцева точка",
|
||||
"port": "Порт прослуховування",
|
||||
"peers": "Увімкнені піри",
|
||||
"total-peers": "Загальна кількість пірів",
|
||||
"endpoints": "Увімкнені кінцеві точки",
|
||||
"total-endpoints": "Загальна кількість кінцевих точок",
|
||||
"ip": "IP-адреса",
|
||||
"default-allowed-ip": "Типові дозволені IP-адреси",
|
||||
"dns": "DNS-сервери",
|
||||
"mtu": "MTU",
|
||||
"default-keep-alive": "Типовий інтервал Keepalive",
|
||||
"button-show-config": "Показати конфігурацію",
|
||||
"button-download-config": "Завантажити конфігурацію",
|
||||
"button-store-config": "Зберегти конфігурацію для wg-quick",
|
||||
"button-edit": "Редагувати інтерфейс"
|
||||
},
|
||||
"button-add-interface": "Додати інтерфейс",
|
||||
"button-add-peer": "Додати пір",
|
||||
"button-add-peers": "Додати декілька пірів",
|
||||
"button-show-peer": "Показати пір",
|
||||
"button-edit-peer": "Редагувати пір",
|
||||
"peer-disabled": "Пір вимкнено, причина:",
|
||||
"peer-expiring": "Пір припиняє дію о",
|
||||
"peer-connected": "Підключено",
|
||||
"peer-not-connected": "Не підключено",
|
||||
"peer-handshake": "Останнє рукостискання:"
|
||||
},
|
||||
"users": {
|
||||
"headline": "Адміністрування користувачів",
|
||||
"table-heading": {
|
||||
"id": "ID",
|
||||
"email": "E-Mail",
|
||||
"firstname": "Ім'я",
|
||||
"lastname": "Прізвище",
|
||||
"source": "Джерело",
|
||||
"peers": "Піри",
|
||||
"admin": "Адміністратор"
|
||||
},
|
||||
"no-user": {
|
||||
"headline": "Немає доступних користувачів",
|
||||
"abstract": "Наразі немає зареєстрованих користувачів у WireGuard Portal."
|
||||
},
|
||||
"button-add-user": "Додати користувача",
|
||||
"button-show-user": "Показати користувача",
|
||||
"button-edit-user": "Редагувати користувача",
|
||||
"user-disabled": "Користувача вимкнено, причина:",
|
||||
"user-locked": "Обліковий запис заблоковано, причина:",
|
||||
"admin": "Користувач має адміністративні привілеї",
|
||||
"no-admin": "Користувач не має адміністративних привілеїв"
|
||||
},
|
||||
|
||||
"profile": {
|
||||
"headline": "Мої VPN-піри",
|
||||
"table-heading": {
|
||||
"name": "Ім'я",
|
||||
"ip": "IP-адреси",
|
||||
"stats": "Статус",
|
||||
"interface": "Серверний інтерфейс"
|
||||
},
|
||||
"no-peer": {
|
||||
"headline": "Немає доступних пірів",
|
||||
"abstract": "Наразі немає пірів, пов'язаних із вашим профілем користувача."
|
||||
},
|
||||
"peer-connected": "Підключено",
|
||||
"button-add-peer": "Додати пір",
|
||||
"button-show-peer": "Показати пір",
|
||||
"button-edit-peer": "Редагувати пір"
|
||||
},
|
||||
"settings": {
|
||||
"headline": "Налаштування",
|
||||
"abstract": "Тут ви можете змінити особисті налаштування.",
|
||||
"api": {
|
||||
"headline": "Налаштування API",
|
||||
"abstract": "Тут ви можете налаштувати RESTful API.",
|
||||
"active-description": "API наразі активний для вашого облікового запису. Усі API-запити автентифікуються за допомогою Basic Auth. Використовуйте такі облікові дані для автентифікації.",
|
||||
"inactive-description": "API наразі неактивний. Натисніть кнопку нижче, щоб активувати його.",
|
||||
"user-label": "Ім'я користувача API:",
|
||||
"user-placeholder": "Користувач API",
|
||||
"token-label": "Пароль API:",
|
||||
"token-placeholder": "Токен API",
|
||||
"token-created-label": "Доступ до API надано:",
|
||||
"button-disable-title": "Вимкнути API, це зробить поточний токен недійсним.",
|
||||
"button-disable-text": "Вимкнути API",
|
||||
"button-enable-title": "Увімкнути API, це згенерує новий токен.",
|
||||
"button-enable-text": "Увімкнути API",
|
||||
"api-link": "Документація API"
|
||||
}
|
||||
},
|
||||
|
||||
"modals": {
|
||||
"user-view": {
|
||||
"headline": "Обліковий запис користувача:",
|
||||
"tab-user": "Інформація",
|
||||
"tab-peers": "Піри",
|
||||
"headline-info": "Інформація про користувача:",
|
||||
"headline-notes": "Примітки:",
|
||||
"email": "E-Mail",
|
||||
"firstname": "Ім'я",
|
||||
"lastname": "Прізвище",
|
||||
"phone": "Номер телефону",
|
||||
"department": "Відділ",
|
||||
"api-enabled": "Доступ до API",
|
||||
"disabled": "Обліковий запис вимкнено",
|
||||
"locked": "Обліковий запис заблоковано",
|
||||
"no-peers": "У користувача немає пов'язаних пірів.",
|
||||
"peers": {
|
||||
"name": "Ім'я",
|
||||
"interface": "Інтерфейс",
|
||||
"ip": "IP-адреси"
|
||||
}
|
||||
},
|
||||
"user-edit": {
|
||||
"headline-edit": "Редагування користувача:",
|
||||
"headline-new": "Новий користувач",
|
||||
"header-general": "Загальні",
|
||||
"header-personal": "Інформація про користувача",
|
||||
"header-notes": "Примітки",
|
||||
"header-state": "Стан",
|
||||
"identifier": {
|
||||
"label": "Ідентифікатор",
|
||||
"placeholder": "Унікальний ідентифікатор користувача"
|
||||
},
|
||||
"source": {
|
||||
"label": "Джерело",
|
||||
"placeholder": "Джерело користувача"
|
||||
},
|
||||
"password": {
|
||||
"label": "Пароль",
|
||||
"placeholder": "Суперсекретний пароль",
|
||||
"description": "Залиште це поле порожнім, щоб зберегти поточний пароль."
|
||||
},
|
||||
"email": {
|
||||
"label": "Електронна адреса",
|
||||
"placeholder": "Електронна адреса"
|
||||
},
|
||||
"phone": {
|
||||
"label": "Телефон",
|
||||
"placeholder": "Номер телефону"
|
||||
},
|
||||
"department": {
|
||||
"label": "Відділ",
|
||||
"placeholder": "Відділ"
|
||||
},
|
||||
"firstname": {
|
||||
"label": "Ім'я",
|
||||
"placeholder": "Ім'я"
|
||||
},
|
||||
"lastname": {
|
||||
"label": "Прізвище",
|
||||
"placeholder": "Прізвище"
|
||||
},
|
||||
"notes": {
|
||||
"label": "Примітки",
|
||||
"placeholder": ""
|
||||
},
|
||||
"disabled": {
|
||||
"label": "Вимкнено (неможливо підключитися до WireGuard і увійти в систему)"
|
||||
},
|
||||
"locked": {
|
||||
"label": "Заблоковано (неможливо увійти, але підключення WireGuard працює)"
|
||||
},
|
||||
"admin": {
|
||||
"label": "Адміністратор"
|
||||
}
|
||||
},
|
||||
"interface-view": {
|
||||
"headline": "Конфігурація для інтерфейсу:"
|
||||
},
|
||||
"interface-edit": {
|
||||
"headline-edit": "Редагувати інтерфейс:",
|
||||
"headline-new": "Новий інтерфейс",
|
||||
"tab-interface": "Інтерфейс",
|
||||
"tab-peerdef": "За замовчуванням для пірів",
|
||||
"header-general": "Загальне",
|
||||
"header-network": "Мережа",
|
||||
"header-crypto": "Криптографія",
|
||||
"header-hooks": "Хуки інтерфейсу",
|
||||
"header-peer-hooks": "Хуки",
|
||||
"header-state": "Стан",
|
||||
"identifier": {
|
||||
"label": "Ідентифікатор",
|
||||
"placeholder": "Унікальний ідентифікатор інтерфейсу"
|
||||
},
|
||||
"mode": {
|
||||
"label": "Режим інтерфейсу",
|
||||
"server": "Серверний режим",
|
||||
"client": "Клієнтський режим",
|
||||
"any": "Невідомий режим"
|
||||
},
|
||||
"display-name": {
|
||||
"label": "Відображуване ім'я",
|
||||
"placeholder": "Описове ім'я для інтерфейсу"
|
||||
},
|
||||
"private-key": {
|
||||
"label": "Приватний ключ",
|
||||
"placeholder": "Приватний ключ"
|
||||
},
|
||||
"public-key": {
|
||||
"label": "Публічний ключ",
|
||||
"placeholder": "Публічний ключ"
|
||||
},
|
||||
"ip": {
|
||||
"label": "IP-адреси",
|
||||
"placeholder": "IP-адреси (у CIDR форматі)"
|
||||
},
|
||||
"listen-port": {
|
||||
"label": "Порт прослуховування",
|
||||
"placeholder": "Порт прослуховування"
|
||||
},
|
||||
"dns": {
|
||||
"label": "DNS сервер",
|
||||
"placeholder": "DNS сервери, які слід використовувати"
|
||||
},
|
||||
"dns-search": {
|
||||
"label": "DNS пошукові домени",
|
||||
"placeholder": "DNS пошукові префікси"
|
||||
},
|
||||
"mtu": {
|
||||
"label": "MTU",
|
||||
"placeholder": "MTU інтерфейсу (0 = залишити за замовчуванням)"
|
||||
},
|
||||
"firewall-mark": {
|
||||
"label": "Маркування Firewall",
|
||||
"placeholder": "Маркування firewall, що застосовується до вихідного трафіку. (0 = автоматично)"
|
||||
},
|
||||
"routing-table": {
|
||||
"label": "Маршрутна таблиця",
|
||||
"placeholder": "ID маршрутної таблиці",
|
||||
"description": "Особливі випадки: off = не керувати маршрутами, 0 = автоматично"
|
||||
},
|
||||
"pre-up": {
|
||||
"label": "Pre-Up",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"post-up": {
|
||||
"label": "Post-Up",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"pre-down": {
|
||||
"label": "Pre-Down",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"post-down": {
|
||||
"label": "Post-Down",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"disabled": {
|
||||
"label": "Інтерфейс відключено"
|
||||
},
|
||||
"save-config": {
|
||||
"label": "Автоматично зберігати конфігурацію wg-quick"
|
||||
},
|
||||
"defaults": {
|
||||
"endpoint": {
|
||||
"label": "Адреса кінцевої точки",
|
||||
"placeholder": "Адреса кінцевої точки",
|
||||
"description": "Адреса кінцевої точки, до якої підключатимуться піри. (наприклад, wg.example.com або wg.example.com:51820)"
|
||||
},
|
||||
"networks": {
|
||||
"label": "IP мережі",
|
||||
"placeholder": "Адреси мереж",
|
||||
"description": "Піри отримають IP-адреси з цих підмереж."
|
||||
},
|
||||
"allowed-ip": {
|
||||
"label": "Дозволені IP-адреси",
|
||||
"placeholder": "За замовчуванням дозволені IP-адреси"
|
||||
},
|
||||
"mtu": {
|
||||
"label": "MTU",
|
||||
"placeholder": "MTU клієнта (0 = залишити за замовчуванням)"
|
||||
},
|
||||
"keep-alive": {
|
||||
"label": "Інтервал Keep Alive",
|
||||
"placeholder": "Постійний Keepalive (0 = за замовчуванням)"
|
||||
}
|
||||
},
|
||||
"button-apply-defaults": "Застосувати значення за замовчуванням для пірів"
|
||||
},
|
||||
"peer-view": {
|
||||
"headline-peer": "Пір:",
|
||||
"headline-endpoint": "Кінцева точка:",
|
||||
"section-info": "Інформація про пір",
|
||||
"section-status": "Поточний стан",
|
||||
"section-config": "Налаштування",
|
||||
"identifier": "Ідентифікатор",
|
||||
"ip": "IP-адреси",
|
||||
"user": "Пов'язаний користувач",
|
||||
"notes": "Примітки",
|
||||
"expiry-status": "Закінчується",
|
||||
"disabled-status": "Відключено",
|
||||
"traffic": "Трафік",
|
||||
"connection-status": "Статистика з'єднання",
|
||||
"upload": "Передано байтів (з серверу до пір)",
|
||||
"download": "Завантажено байтів (з пір до серверу)",
|
||||
"pingable": "Відповідає на ping",
|
||||
"handshake": "Останній handshake",
|
||||
"connected-since": "Підключено з",
|
||||
"endpoint": "Кінцева точка",
|
||||
"button-download": "Завантажити конфігурацію",
|
||||
"button-email": "Надіслати конфігурацію електронною поштою"
|
||||
},
|
||||
"peer-edit": {
|
||||
"headline-edit-peer": "Редагувати пір:",
|
||||
"headline-edit-endpoint": "Редагувати кінцеву точку:",
|
||||
"headline-new-peer": "Створити пір",
|
||||
"headline-new-endpoint": "Створити кінцеву точку",
|
||||
"header-general": "Загальне",
|
||||
"header-network": "Мережа",
|
||||
"header-crypto": "Криптографія",
|
||||
"header-hooks": "Хуки (виконуються на пірі)",
|
||||
"header-state": "Стан",
|
||||
"display-name": {
|
||||
"label": "Відображуване ім'я",
|
||||
"placeholder": "Описове ім'я для пір"
|
||||
},
|
||||
"linked-user": {
|
||||
"label": "Пов'язаний користувач",
|
||||
"placeholder": "Обліковий запис користувача, що володіє цим піром"
|
||||
},
|
||||
"private-key": {
|
||||
"label": "Приватний ключ",
|
||||
"placeholder": "Приватний ключ"
|
||||
},
|
||||
"public-key": {
|
||||
"label": "Публічний ключ",
|
||||
"placeholder": "Публічний ключ"
|
||||
},
|
||||
"preshared-key": {
|
||||
"label": "Попередньо спільний ключ",
|
||||
"placeholder": "Опціональний попередньо спільний ключ"
|
||||
},
|
||||
"endpoint-public-key": {
|
||||
"label": "Публічний ключ кінцевої точки",
|
||||
"placeholder": "Публічний ключ віддаленої кінцевої точки"
|
||||
},
|
||||
"endpoint": {
|
||||
"label": "Адреса кінцевої точки",
|
||||
"placeholder": "Адреса віддаленої кінцевої точки"
|
||||
},
|
||||
"ip": {
|
||||
"label": "IP-адреси",
|
||||
"placeholder": "IP-адреси (у CIDR форматі)"
|
||||
},
|
||||
"allowed-ip": {
|
||||
"label": "Дозволені IP-адреси",
|
||||
"placeholder": "Дозволені IP-адреси (у CIDR форматі)"
|
||||
},
|
||||
"extra-allowed-ip": {
|
||||
"label": "Додаткові дозволені IP-адреси",
|
||||
"placeholder": "Додаткові дозволені IP (на стороні сервера)",
|
||||
"description": "Ці IP будуть додані на віддаленому інтерфейсі WireGuard як дозволені IP."
|
||||
},
|
||||
"dns": {
|
||||
"label": "DNS сервер",
|
||||
"placeholder": "DNS сервери, які слід використовувати"
|
||||
},
|
||||
"dns-search": {
|
||||
"label": "DNS пошукові домени",
|
||||
"placeholder": "DNS пошукові префікси"
|
||||
},
|
||||
"keep-alive": {
|
||||
"label": "Інтервал збереження зв'язку",
|
||||
"placeholder": "Постійний Keepalive (0 = за замовчуванням)"
|
||||
},
|
||||
"mtu": {
|
||||
"label": "MTU",
|
||||
"placeholder": "MTU клієнта (0 = залишити за замовчуванням)"
|
||||
},
|
||||
"pre-up": {
|
||||
"label": "Pre-Up",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"post-up": {
|
||||
"label": "Post-Up",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"pre-down": {
|
||||
"label": "Pre-Down",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"post-down": {
|
||||
"label": "Post-Down",
|
||||
"placeholder": "Одна або декілька команд bash, розділених ;"
|
||||
},
|
||||
"disabled": {
|
||||
"label": "Пір відключено"
|
||||
},
|
||||
"ignore-global": {
|
||||
"label": "Ігнорувати глобальні налаштування"
|
||||
},
|
||||
"expires-at": {
|
||||
"label": "Дата закінчення терміну дії"
|
||||
}
|
||||
},
|
||||
"peer-multi-create": {
|
||||
"headline-peer": "Створити декілька пір",
|
||||
"headline-endpoint": "Створити декілька кінцевих точок",
|
||||
"identifiers": {
|
||||
"label": "Ідентифікатори користувача",
|
||||
"placeholder": "Ідентифікатори користувача",
|
||||
"description": "Ідентифікатор користувача (ім'я користувача), для якого слід створити пір."
|
||||
},
|
||||
"prefix": {
|
||||
"headline-peer": "Пір:",
|
||||
"headline-endpoint": "Кінцева точка:",
|
||||
"label": "Префікс відображуваного імені",
|
||||
"placeholder": "Префікс",
|
||||
"description": "Префікс, що додається до відображуваного імені пірів."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
2
go.mod
2
go.mod
@@ -11,7 +11,7 @@ require (
|
||||
github.com/glebarez/sqlite v1.11.0
|
||||
github.com/go-ldap/ldap/v3 v3.4.10
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/prometheus-community/pro-bing v0.5.0
|
||||
github.com/prometheus-community/pro-bing v0.6.1
|
||||
github.com/prometheus/client_golang v1.20.5
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/stretchr/testify v1.10.0
|
||||
|
4
go.sum
4
go.sum
@@ -225,8 +225,8 @@ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmd
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus-community/pro-bing v0.5.0 h1:Fq+4BUXKIvsPtXUY8K+04ud9dkAuFozqGmRAyNUpffY=
|
||||
github.com/prometheus-community/pro-bing v0.5.0/go.mod h1:1joR9oXdMEAcAJJvhs+8vNDvTg5thfAZcRFhcUozG2g=
|
||||
github.com/prometheus-community/pro-bing v0.6.1 h1:EQukUOma9YFZRPe4DGSscxUf9LH07rpqwisNWjSZrgU=
|
||||
github.com/prometheus-community/pro-bing v0.6.1/go.mod h1:jNCOI3D7pmTCeaoF41cNS6uaxeFY/Gmc3ffwbuJVzAQ=
|
||||
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
|
||||
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
|
||||
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
||||
|
@@ -69,7 +69,7 @@ type Peer struct {
|
||||
// PresharedKey is the optional pre-shared Key of the peer.
|
||||
PresharedKey string `json:"PresharedKey" example:"yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=" binding:"omitempty,len=44"`
|
||||
// PersistentKeepalive is the optional persistent keep-alive interval in seconds.
|
||||
PersistentKeepalive ConfigOption[int] `json:"PersistentKeepalive" binding:"omitempty,gte=0"`
|
||||
PersistentKeepalive ConfigOption[int] `json:"PersistentKeepalive"`
|
||||
|
||||
// PrivateKey is the private Key of the peer.
|
||||
PrivateKey string `json:"PrivateKey" example:"yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=" binding:"required,len=44"`
|
||||
|
@@ -127,7 +127,7 @@ func (a *App) createDefaultUser(ctx context.Context) error {
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
admin, err := a.CreateUser(ctx, &domain.User{
|
||||
defaultAdmin := &domain.User{
|
||||
BaseModel: domain.BaseModel{
|
||||
CreatedBy: domain.CtxSystemAdminId,
|
||||
UpdatedBy: domain.CtxSystemAdminId,
|
||||
@@ -150,7 +150,16 @@ func (a *App) createDefaultUser(ctx context.Context) error {
|
||||
Locked: nil,
|
||||
LockedReason: "",
|
||||
LinkedPeerCount: 0,
|
||||
})
|
||||
}
|
||||
if a.Config.Core.AdminApiToken != "" {
|
||||
if len(a.Config.Core.AdminApiToken) < 18 {
|
||||
logrus.Warnf("[SECURITY WARNING] admin API token is too short, should be at least 18 characters long")
|
||||
}
|
||||
defaultAdmin.ApiToken = a.Config.Core.AdminApiToken
|
||||
defaultAdmin.ApiTokenCreated = &now
|
||||
}
|
||||
|
||||
admin, err := a.CreateUser(ctx, defaultAdmin)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -16,6 +16,7 @@ type Config struct {
|
||||
// AdminUser defines the default administrator account that will be created
|
||||
AdminUser string `yaml:"admin_user"`
|
||||
AdminPassword string `yaml:"admin_password"`
|
||||
AdminApiToken string `yaml:"admin_api_token"` // if set, the API access is enabled automatically
|
||||
|
||||
EditableKeys bool `yaml:"editable_keys"`
|
||||
CreateDefaultPeer bool `yaml:"create_default_peer"`
|
||||
@@ -94,6 +95,7 @@ func defaultConfig() *Config {
|
||||
|
||||
cfg.Core.AdminUser = "admin@wgportal.local"
|
||||
cfg.Core.AdminPassword = "wgportal"
|
||||
cfg.Core.AdminApiToken = "" // by default, the API access is disabled
|
||||
cfg.Core.ImportExisting = true
|
||||
cfg.Core.RestoreState = true
|
||||
cfg.Core.CreateDefaultPeer = false
|
||||
|
Reference in New Issue
Block a user