chore: merge development into main (#1398)
CodeQL / Analyze (javascript) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
Docker Build and Push / docker_build (push) Canceled after 0s
Docker Build and Push / docker_scan (push) Canceled after 0s

* build(deps): bump golang in /docker

Bumps golang from 1.26-alpine3.24 to 1.27-alpine3.24.

---
updated-dependencies:
- dependency-name: golang
  dependency-version: 1.27-alpine3.24
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump python in /docker

Bumps python from 3.14-alpine3.24 to 3.15-alpine3.24.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.15-alpine3.23
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump sqlalchemy-utils from 0.42.1 to 0.43.0 in /src

Bumps [sqlalchemy-utils](https://github.com/kvesteri/sqlalchemy-utils) from 0.42.1 to 0.43.0.
- [Release notes](https://github.com/kvesteri/sqlalchemy-utils/releases)
- [Changelog](https://github.com/kvesteri/sqlalchemy-utils/blob/master/CHANGES.rst)
- [Commits](https://github.com/kvesteri/sqlalchemy-utils/compare/0.42.1...0.43.0)

---
updated-dependencies:
- dependency-name: sqlalchemy-utils
  dependency-version: 0.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump bootstrap-icons in /src/static/client

Bumps [bootstrap-icons](https://github.com/twbs/icons) from 1.13.1 to 1.13.2.
- [Release notes](https://github.com/twbs/icons/releases)
- [Commits](https://github.com/twbs/icons/compare/v1.13.1...v1.13.2)

---
updated-dependencies:
- dependency-name: bootstrap-icons
  dependency-version: 1.13.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump pinia from 3.0.4 to 4.1.0 in /src/static/client

Bumps [pinia](https://github.com/vuejs/pinia) from 3.0.4 to 4.1.0.
- [Release notes](https://github.com/vuejs/pinia/releases)
- [Commits](https://github.com/vuejs/pinia/compare/v3.0.4...v4.1.0)

---
updated-dependencies:
- dependency-name: pinia
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @vueuse/shared in /src/static/app

Bumps [@vueuse/shared](https://github.com/vueuse/vueuse/tree/HEAD/packages/shared) from 14.4.0 to 15.0.0.
- [Release notes](https://github.com/vueuse/vueuse/releases)
- [Commits](https://github.com/vueuse/vueuse/commits/v15.0.0/packages/shared)

---
updated-dependencies:
- dependency-name: "@vueuse/shared"
  dependency-version: 15.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump dayjs from 1.11.19 to 1.11.23 in /src/static/app

Bumps [dayjs](https://github.com/iamkun/dayjs) from 1.11.19 to 1.11.23.
- [Release notes](https://github.com/iamkun/dayjs/releases)
- [Changelog](https://github.com/iamkun/dayjs/blob/v1.11.23/CHANGELOG.md)
- [Commits](https://github.com/iamkun/dayjs/compare/v1.11.19...v1.11.23)

---
updated-dependencies:
- dependency-name: dayjs
  dependency-version: 1.11.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump cidr-tools from 12.0.2 to 13.0.4 in /src/static/app

Bumps [cidr-tools](https://github.com/silverwind/cidr-tools) from 12.0.2 to 13.0.4.
- [Release notes](https://github.com/silverwind/cidr-tools/releases)
- [Commits](https://github.com/silverwind/cidr-tools/compare/12.0.2...13.0.4)

---
updated-dependencies:
- dependency-name: cidr-tools
  dependency-version: 13.0.4
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump pymysql from 1.2.0 to 1.2.3 in /src

Bumps [pymysql](https://github.com/PyMySQL/PyMySQL) from 1.2.0 to 1.2.3.
- [Release notes](https://github.com/PyMySQL/PyMySQL/releases)
- [Changelog](https://github.com/PyMySQL/PyMySQL/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PyMySQL/PyMySQL/compare/v1.2.0...v1.2.3)

---
updated-dependencies:
- dependency-name: pymysql
  dependency-version: 1.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @vue/language-server in /src/static/app

Bumps [@vue/language-server](https://github.com/vuejs/language-tools/tree/HEAD/packages/language-server) from 3.2.7 to 3.3.13.
- [Release notes](https://github.com/vuejs/language-tools/releases)
- [Changelog](https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/language-tools/commits/v3.3.13/packages/language-server)

---
updated-dependencies:
- dependency-name: "@vue/language-server"
  dependency-version: 3.3.13
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump dayjs from 1.11.21 to 1.11.23 in /src/static/client

Bumps [dayjs](https://github.com/iamkun/dayjs) from 1.11.21 to 1.11.23.
- [Release notes](https://github.com/iamkun/dayjs/releases)
- [Changelog](https://github.com/iamkun/dayjs/blob/v1.11.23/CHANGELOG.md)
- [Commits](https://github.com/iamkun/dayjs/compare/v1.11.21...v1.11.23)

---
updated-dependencies:
- dependency-name: dayjs
  dependency-version: 1.11.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @volar/language-server in /src/static/app

Bumps [@volar/language-server](https://github.com/volarjs/volar.js/tree/HEAD/packages/language-server) from 2.4.28 to 2.4.30.
- [Release notes](https://github.com/volarjs/volar.js/releases)
- [Changelog](https://github.com/volarjs/volar.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/volarjs/volar.js/commits/v2.4.30/packages/language-server)

---
updated-dependencies:
- dependency-name: "@volar/language-server"
  dependency-version: 2.4.30
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vue-router from 5.1.0 to 5.4.0 in /src/static/client

Bumps [vue-router](https://github.com/vuejs/router) from 5.1.0 to 5.4.0.
- [Release notes](https://github.com/vuejs/router/releases)
- [Commits](https://github.com/vuejs/router/compare/v5.1.0...v5.4.0)

---
updated-dependencies:
- dependency-name: vue-router
  dependency-version: 5.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump axios from 1.18.0 to 1.20.0 in /src/static/client

Bumps [axios](https://github.com/axios/axios) from 1.18.0 to 1.20.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.18.0...v1.20.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump ol from 10.9.0 to 10.11.0 in /src/static/app

Bumps [ol](https://github.com/openlayers/openlayers) from 10.9.0 to 10.11.0.
- [Release notes](https://github.com/openlayers/openlayers/releases)
- [Commits](https://github.com/openlayers/openlayers/compare/v10.9.0...v10.11.0)

---
updated-dependencies:
- dependency-name: ol
  dependency-version: 10.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump vite from 8.0.16 to 8.3.5 in /src/static/app

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.16 to 8.3.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.3.5
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump uuid from 14.0.0 to 14.0.3 in /src/static/app

Bumps [uuid](https://github.com/uuidjs/uuid) from 14.0.0 to 14.0.3.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v14.0.0...v14.0.3)

---
updated-dependencies:
- dependency-name: uuid
  dependency-version: 14.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump pinia from 3.0.4 to 4.1.0 in /src/static/app

Bumps [pinia](https://github.com/vuejs/pinia) from 3.0.4 to 4.1.0.
- [Release notes](https://github.com/vuejs/pinia/releases)
- [Commits](https://github.com/vuejs/pinia/compare/v3.0.4...v4.1.0)

---
updated-dependencies:
- dependency-name: pinia
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vue-chartjs from 5.3.3 to 5.3.4 in /src/static/app

Bumps [vue-chartjs](https://github.com/apertureless/vue-chartjs) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/apertureless/vue-chartjs/releases)
- [Changelog](https://github.com/apertureless/vue-chartjs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apertureless/vue-chartjs/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: vue-chartjs
  dependency-version: 5.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump bootstrap-icons in /src/static/app

Bumps [bootstrap-icons](https://github.com/twbs/icons) from 1.13.1 to 1.13.2.
- [Release notes](https://github.com/twbs/icons/releases)
- [Commits](https://github.com/twbs/icons/compare/v1.13.1...v1.13.2)

---
updated-dependencies:
- dependency-name: bootstrap-icons
  dependency-version: 1.13.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump npm from 11.13.0 to 12.2.1 in /src/static/app

Bumps [npm](https://github.com/npm/cli) from 11.13.0 to 12.2.1.
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v11.13.0...v12.2.1)

---
updated-dependencies:
- dependency-name: npm
  dependency-version: 12.2.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump electron-builder in /src/static/app

Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 26.7.0 to 26.18.0.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/electron-builder@26.18.0/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/electron-builder@26.18.0/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-version: 26.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: remove arm/v7 due to deprecation

* chore: bump some frontend dependencies

* chore: attempt to mitigate jose vuln

* refactor: rework wgd.sh functions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
DaanSelen
2026-10-26 15:59:07 +01:00
committed by GitHub
co-authored by dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
parent dded6a86df
commit 0018a9b1e2
5 changed files with 543 additions and 437 deletions
+5 -5
View File
@@ -4,7 +4,7 @@
# #
# Pull the current golang-alpine image. # Pull the current golang-alpine image.
FROM golang:1.27-alpine3.24 AS awg-go FROM golang:1.27-alpine3.24 AS awg-go-builder
# Install build-dependencies. # Install build-dependencies.
RUN apk add --no-cache \ RUN apk add --no-cache \
@@ -30,7 +30,7 @@ RUN go version && \
# AWG TOOLS BUILDING STAGE # AWG TOOLS BUILDING STAGE
# Base: Alpine # Base: Alpine
# #
FROM alpine:3.24 AS awg-tools FROM alpine:3.24 AS awg-tools-builder
# Install needed dependencies. # Install needed dependencies.
RUN apk add --no-cache \ RUN apk add --no-cache \
@@ -121,9 +121,9 @@ RUN apk add --no-cache \
SHELL ["/bin/bash", "-o", "pipefail", "-c"] SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# Copy only the final binaries from the AWG builder stages # Copy only the final binaries from the AWG builder stages
COPY --from=awg-go /usr/bin/amneziawg-go /usr/bin/amneziawg-go COPY --from=awg-go-builder /usr/bin/amneziawg-go /usr/bin/amneziawg-go
COPY --from=awg-tools /workspace/awg-tools/src/wg /usr/bin/awg COPY --from=awg-tools-builder /workspace/awg-tools/src/wg /usr/bin/awg
COPY --from=awg-tools /workspace/awg-tools/src/wg-quick/linux.bash /usr/bin/awg-quick COPY --from=awg-tools-builder /workspace/awg-tools/src/wg-quick/linux.bash /usr/bin/awg-quick
# Environment variables # Environment variables
ARG wg_net="10.0.0.1" ARG wg_net="10.0.0.1"
+1 -1
View File
@@ -13,5 +13,5 @@ sqlalchemy_utils==0.43.0
psycopg[binary]==3.3.6 psycopg[binary]==3.3.6
PyMySQL==1.2.3 PyMySQL==1.2.3
tzlocal==5.4.5 tzlocal==5.4.5
python-jose==3.5.0 python-jose[cryptography]==3.5.0
pydantic==2.14.1 pydantic==2.14.1
+6 -6
View File
@@ -2555,9 +2555,9 @@
} }
}, },
"node_modules/defu": { "node_modules/defu": {
"version": "6.1.4", "version": "6.1.7",
"resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz", "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
"integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/delayed-stream": { "node_modules/delayed-stream": {
@@ -3013,9 +3013,9 @@
} }
}, },
"node_modules/fflate": { "node_modules/fflate": {
"version": "0.8.2", "version": "0.8.3",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
"integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/filelist": { "node_modules/filelist": {
+26 -26
View File
@@ -1242,9 +1242,9 @@
} }
}, },
"node_modules/baseline-browser-mapping": { "node_modules/baseline-browser-mapping": {
"version": "2.10.34", "version": "2.11.33",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.33.tgz",
"integrity": "sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==", "integrity": "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"bin": { "bin": {
@@ -1299,9 +1299,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/browserslist": { "node_modules/browserslist": {
"version": "4.28.2", "version": "4.29.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz",
"integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -1319,11 +1319,11 @@
], ],
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"baseline-browser-mapping": "^2.10.12", "baseline-browser-mapping": "^2.11.29",
"caniuse-lite": "^1.0.30001782", "caniuse-lite": "^1.0.30001816",
"electron-to-chromium": "^1.5.328", "electron-to-chromium": "^1.5.459",
"node-releases": "^2.0.36", "node-releases": "^2.0.59",
"update-browserslist-db": "^1.2.3" "update-browserslist-db": "^1.3.4"
}, },
"bin": { "bin": {
"browserslist": "cli.js" "browserslist": "cli.js"
@@ -1371,9 +1371,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001793", "version": "1.0.30001819",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz",
"integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -1581,9 +1581,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.5.368", "version": "1.5.464",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.368.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.464.tgz",
"integrity": "sha512-7RckJJK4uESJF9PxvfMWd3TGqIiieUTG4HxnKaKuIpGbcr+r2ZEB3g2gAhCP3Fqm42vJSzLfgab9eva/C4/XVw==", "integrity": "sha512-nRa65aFge40viPAKxMKULIY8tcXKwKboJWNn4RoKwyWXJ6SP7BnrDGKUTzc64818jIciH0PK7LSF8QzZes19GA==",
"dev": true, "dev": true,
"license": "ISC" "license": "ISC"
}, },
@@ -1713,9 +1713,9 @@
} }
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.16.0", "version": "1.16.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.2.tgz",
"integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "integrity": "sha512-/kVP2U8z596Ia0gwFrwyIeo74ta5aVmSeU1FfAUMAmcEP5EP7zydmag3SLiN64NaRKef3lxsq7i/g7ltJQDGow==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@@ -2431,9 +2431,9 @@
} }
}, },
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.47", "version": "2.0.60",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.60.tgz",
"integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", "integrity": "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -2928,9 +2928,9 @@
} }
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.2.3", "version": "1.3.4",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz",
"integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
+208 -102
View File
@@ -5,12 +5,17 @@
#trap "kill $TOP_PID" #trap "kill $TOP_PID"
export TOP_PID=$$ export TOP_PID=$$
#------------------------------------------------------------------------------
# Configuration
#------------------------------------------------------------------------------
app_name="dashboard.py" app_name="dashboard.py"
app_official_name="WGDashboard" app_official_name="WGDashboard"
venv_python="./venv/bin/python3" venv_python="./venv/bin/python3"
venv_gunicorn="./venv/bin/gunicorn" venv_gunicorn="./venv/bin/gunicorn"
pythonExecutable="python3" pythonExecutable="python3"
frontend_dirs=("./static/app" "./static/client")
heavy_checkmark=$(printf "\xE2\x9C\x85") heavy_checkmark=$(printf "\xE2\x9C\x85")
heavy_crossmark=$(printf "\xE2\x9D\x8C") heavy_crossmark=$(printf "\xE2\x9D\x8C")
install=$(printf "\xF0\x9F\x92\xBF") install=$(printf "\xF0\x9F\x92\xBF")
@@ -30,6 +35,10 @@ fi
dashes='---------------------------------------------------------------------------------' dashes='---------------------------------------------------------------------------------'
equals='============================================================' equals='============================================================'
helpMsg="[WGDashboard] Please check ./log/install.txt for more details. For further assistance, please open a ticket on https://github.com/WGDashboard/WGDashboard/issues/new/choose, I'm more than happy to help :)" helpMsg="[WGDashboard] Please check ./log/install.txt for more details. For further assistance, please open a ticket on https://github.com/WGDashboard/WGDashboard/issues/new/choose, I'm more than happy to help :)"
#------------------------------------------------------------------------------
# Output helpers
#------------------------------------------------------------------------------
print_header(){ print_header(){
printf "=================================================================================\n" printf "=================================================================================\n"
printf "+ <WGDashboard> by Donald Zou - https://github.com/donaldzou +\n" printf "+ <WGDashboard> by Donald Zou - https://github.com/donaldzou +\n"
@@ -49,6 +58,19 @@ help () {
printf "=================================================================================\n" printf "=================================================================================\n"
} }
_logSection(){
{ printf "\n\n [%s] [%s] \n\n" "$1" "$(date)"; } >> ./log/install.txt
}
_unsupportedOS(){
printf "[WGDashboard] %s Sorry, your OS is not supported. Currently the install script only support Debian-based, Red Hat-based OS. With experimental support for Alpine Linux.\n" "$heavy_crossmark"
printf "%s\n" "$helpMsg"
kill $TOP_PID
}
#------------------------------------------------------------------------------
# Environment detection
#------------------------------------------------------------------------------
_check_and_set_venv(){ _check_and_set_venv(){
VIRTUAL_ENV="./venv" VIRTUAL_ENV="./venv"
if [ ! -d $VIRTUAL_ENV ]; then if [ ! -d $VIRTUAL_ENV ]; then
@@ -72,15 +94,16 @@ _determineOS(){
elif [ -f /etc/redhat-release ]; then elif [ -f /etc/redhat-release ]; then
OS="redhat" OS="redhat"
else else
printf "[WGDashboard] %s Sorry, your OS is not supported. Currently the install script only support Debian-based, Red Hat-based OS. With experimental support for Alpine Linux.\n" "$heavy_crossmark" _unsupportedOS
printf "%s\n" "$helpMsg"
kill $TOP_PID
fi fi
printf "[WGDashboard] OS: %s\n" "$OS" printf "[WGDashboard] OS: %s\n" "$OS"
} }
#------------------------------------------------------------------------------
# Python
#------------------------------------------------------------------------------
_installPython(){ _installPython(){
{ printf "\n\n [Installing Python] [%s] \n\n""$(date)"; } >> ./log/install.txt _logSection "Installing Python"
printf "[WGDashboard] %s Installing Python\n" "$install" printf "[WGDashboard] %s Installing Python\n" "$install"
case "$OS" in case "$OS" in
ubuntu|debian|raspbian) ubuntu|debian|raspbian)
@@ -112,7 +135,7 @@ _installPython(){
} }
_installPythonVenv(){ _installPythonVenv(){
{ printf "\n\n [Installing Python Venv] [%s] \n\n""$(date)"; } >> ./log/install.txt _logSection "Installing Python Venv"
printf "[WGDashboard] %s Installing Python Virtual Environment\n" "$install" printf "[WGDashboard] %s Installing Python Virtual Environment\n" "$install"
if [ "$pythonExecutable" = "python3" ]; then if [ "$pythonExecutable" = "python3" ]; then
case "$OS" in case "$OS" in
@@ -133,9 +156,7 @@ _installPythonVenv(){
{ echo "Python Virtual Environment is installed by default from version Python3.3"; printf "\n\n"; } &>> ./log/install.txt # https://wiki.archlinux.org/title/Python/Virtual_environment { echo "Python Virtual Environment is installed by default from version Python3.3"; printf "\n\n"; } &>> ./log/install.txt # https://wiki.archlinux.org/title/Python/Virtual_environment
;; ;;
*) *)
printf "[WGDashboard] %s Sorry, your OS is not supported. Currently the install script only support Debian-based, Red Hat-based OS. With experimental support for Alpine Linux.\n" "$heavy_crossmark" _unsupportedOS
printf "%s\n" "$helpMsg"
kill $TOP_PID
;; ;;
esac esac
else else
@@ -156,7 +177,7 @@ _installPythonVenv(){
} }
_installPythonPip(){ _installPythonPip(){
{ printf "\n\n [Installing Python Pip] [%s] \n\n""$(date)"; } >> ./log/install.txt _logSection "Installing Python Pip"
if ! $pythonExecutable -m pip -h > /dev/null 2>&1 if ! $pythonExecutable -m pip -h > /dev/null 2>&1
then then
@@ -183,9 +204,7 @@ _installPythonPip(){
{ sudo pacman -Syu python-pip; printf "\n\n"; } &>> ./log/install.txt { sudo pacman -Syu python-pip; printf "\n\n"; } &>> ./log/install.txt
;; ;;
*) *)
printf "[WGDashboard] %s Sorry, your OS is not supported. Currently the install script only support Debian-based, Red Hat-based OS. With experimental support for Alpine Linux.\n" "$heavy_crossmark" _unsupportedOS
printf "%s\n" "$helpMsg"
kill $TOP_PID
;; ;;
esac esac
fi fi
@@ -200,6 +219,82 @@ _installPythonPip(){
fi fi
} }
_checkPythonVersion(){
version_pass=$($pythonExecutable -c 'import sys; print("1") if (sys.version_info.major == 3 and sys.version_info.minor >= 12) else print("0");')
version=$($pythonExecutable --version)
if [ $version_pass == "1" ]
then
printf "[WGDashboard] %s Found compatible version of Python. Will be using %s to install WGDashboard.\n" "$heavy_checkmark" "$($pythonExecutable --version)"
return;
elif python3.12 --version > /dev/null 2>&1
then
printf "[WGDashboard] %s Found Python 3.12. Will be using [python3.12] to install WGDashboard.\n" "$heavy_checkmark"
pythonExecutable="python3.12"
else
printf "[WGDashboard] %s Could not find a compatible version of Python. Current Python is %s.\n" "$heavy_crossmark" "$version"
printf "[WGDashboard] WGDashboard required Python 3.12 or above. Halting install now.\n"
kill $TOP_PID
fi
}
_determinePypiMirror(){
printf "[WGDashboard] %s Pinging list of recommended Python Package Index mirror\n" "$install"
urls=(
"https://pypi.org/simple/"
"https://pypi.tuna.tsinghua.edu.cn/simple/"
"https://pypi.mirrors.ustc.edu.cn/simple/"
"https://mirrors.aliyun.com/pypi/simple/"
"https://pypi.douban.com/simple/"
)
# Ping each mirror's hostname once and extract the RTT
index=1
printf " ---------------------------------------------------------\n"
for url in "${urls[@]}"; do
hostname=$(echo "$url" | awk -F/ '{print $3}')
rtt=$(ping -c 1 -W 1 "$hostname" 2>/dev/null | grep 'time=' | awk -F'time=' '{print $2}' | awk '{print $1}')
# Handle cases where the hostname is not reachable
if [ -z "$rtt" ]; then
rtt="9999"
printf " [%i] [FAILED] %s\n" "$index" "$url"
else
rtt=${rtt//.*/}
printf " [%i] %sms %s\n" "$index" "$rtt" "$url"
fi
rtthost[$index]=$rtt
index=$((index+1))
done
printf " ---------------------------------------------------------\n"
for i in "${!rtthost[@]}"; do
[[ -z ${rtthost[i]} ]] && continue # Skip unset or empty values
if [[ -z $min_val || ${rtthost[i]} -lt $min_val ]]; then
min_val=${rtthost[i]}
min_idx=$i
fi
done
min_idx=$((min_idx - 1))
printf " Which mirror you would like to use (Hit enter to use default)\n"
printf " Default is %s :" "${urls[$min_idx]}"
read -t ${msleep} -r choice
printf "\n"
if [[ -z "$choice" ]]; then
choice=$((min_idx + 1))
fi
if [[ "$choice" =~ ^[0-9]+$ ]] && (( choice >= 1 && choice <= ${#urls[@]} )); then
selected_url="${urls[choice-1]}"
printf "[WGDashboard] %s Will download Python packages from %s\n" "$heavy_checkmark" "$selected_url"
else
selected_url="${urls[0]}"
printf "[WGDashboard] %s Will download Python packages from %s\n" "$heavy_checkmark" "${urls[0]}"
fi
}
#------------------------------------------------------------------------------
# WireGuard
#------------------------------------------------------------------------------
_checkWireguard(){ _checkWireguard(){
if ! command -v wg > /dev/null 2>&1 || ! command -v wg-quick > /dev/null 2>&1 if ! command -v wg > /dev/null 2>&1 || ! command -v wg-quick > /dev/null 2>&1
then then
@@ -243,81 +338,100 @@ _checkWireguard(){
fi fi
} }
#------------------------------------------------------------------------------
# Frontend (Node.js) - Docker builds the frontend itself, so this is only for
# bare-metal installs.
_checkPythonVersion(){ #------------------------------------------------------------------------------
version_pass=$($pythonExecutable -c 'import sys; print("1") if (sys.version_info.major == 3 and sys.version_info.minor >= 12) else print("0");') _installNode(){
version=$($pythonExecutable --version) _logSection "Installing Node.js"
if [ $version_pass == "1" ] printf "[WGDashboard] %s Installing Node.js and npm\n" "$install"
then case "$OS" in
printf "[WGDashboard] %s Found compatible version of Python. Will be using %s to install WGDashboard.\n" "$heavy_checkmark" "$($pythonExecutable --version)" ubuntu|debian|raspbian)
return; { sudo apt update ; sudo apt-get install -y nodejs npm; printf "\n\n"; } &>> ./log/install.txt
elif python3.12 --version > /dev/null 2>&1 ;;
then centos|fedora|redhat|rhel|almalinux|rocky)
printf "[WGDashboard] %s Found Python 3.12. Will be using [python3.12] to install WGDashboard.\n" "$heavy_checkmark" if command -v dnf &> /dev/null; then
pythonExecutable="python3.12" { sudo dnf install -y nodejs npm; printf "\n\n"; } &>> ./log/install.txt
else else
printf "[WGDashboard] %s Could not find a compatible version of Python. Current Python is %s.\n" "$heavy_crossmark" "$version" { sudo yum install -y nodejs npm; printf "\n\n"; } &>> ./log/install.txt
printf "[WGDashboard] WGDashboard required Python 3.12 or above. Halting install now.\n" fi
;;
alpine)
{ sudo apk update; sudo apk add nodejs npm --no-cache; printf "\n\n"; } &>> ./log/install.txt
;;
arch)
{ sudo pacman -Syu nodejs npm; printf "\n\n"; } &>> ./log/install.txt
;;
*)
_unsupportedOS
;;
esac
}
# Vite requires Node.js ^20.19.0 || >=22.12.0
_isNodeVersionSupported(){
local node_version major minor
node_version=$(node --version 2>/dev/null | sed 's/^v//')
major=${node_version%%.*}
minor=${node_version#*.}
minor=${minor%%.*}
[[ "$major" =~ ^[0-9]+$ && "$minor" =~ ^[0-9]+$ ]] || return 1
if (( major > 22 )); then return 0; fi
if (( major == 22 && minor >= 12 )); then return 0; fi
if (( major == 20 && minor >= 19 )); then return 0; fi
return 1
}
_checkNode(){
if ! command -v node > /dev/null 2>&1 || ! command -v npm > /dev/null 2>&1
then
_installNode
fi
if ! command -v node > /dev/null 2>&1 || ! command -v npm > /dev/null 2>&1
then
printf "[WGDashboard] %s Node.js and npm are still not installed, halting script now.\n" "$heavy_crossmark"
printf "%s\n" "$helpMsg"
kill $TOP_PID kill $TOP_PID
elif ! _isNodeVersionSupported
then
printf "[WGDashboard] %s Found Node.js %s, but the frontend requires Node.js 20.19+ or 22.12+. Halting install now.\n" "$heavy_crossmark" "$(node --version)"
printf "%s\n" "$helpMsg"
kill $TOP_PID
else
printf "[WGDashboard] %s Node.js %s and npm %s are installed\n" "$heavy_checkmark" "$(node --version)" "$(npm --version)"
fi fi
} }
_determinePypiMirror(){ _compileFrontend(){
printf "[WGDashboard] %s Pinging list of recommended Python Package Index mirror\n" "$install" _logSection "Compiling Frontend"
urls=( _checkNode
"https://pypi.org/simple/"
"https://pypi.tuna.tsinghua.edu.cn/simple/"
"https://pypi.mirrors.ustc.edu.cn/simple/"
"https://mirrors.aliyun.com/pypi/simple/"
"https://pypi.douban.com/simple/"
)
# Function to extract hostname and ping it local dir
index=1 for dir in "${frontend_dirs[@]}"; do
printf " ---------------------------------------------------------\n" printf "[WGDashboard] %s Compiling frontend in %s\n" "$install" "$dir"
for url in "${urls[@]}"; do if ! ( cd "$dir" && npm ci && npm run build ) &>> ./log/install.txt
# Extract the hostname from the URL then
hostname=$(echo "$url" | awk -F/ '{print $3}') printf "[WGDashboard] %s Failed to compile frontend in %s, halting script now.\n" "$heavy_crossmark" "$dir"
# Ping the hostname once and extract the RTT printf "%s\n" "$helpMsg"
rtt=$(ping -c 1 -W 1 "$hostname" 2>/dev/null | grep 'time=' | awk -F'time=' '{print $2}' | awk '{print $1}') kill $TOP_PID
# Handle cases where the hostname is not reachable return 1
if [ -z "$rtt" ]; then
rtt="9999"
printf " [%i] [FAILED] %s\n" "$index" "$url"
else
rtt=${rtt//.*/}
printf " [%i] %sms %s\n" "$index" "$rtt" "$url"
fi
rtthost[$index]=$rtt
index=$((index+1))
done
printf " ---------------------------------------------------------\n"
for i in "${!rtthost[@]}"; do
[[ -z ${rtthost[i]} ]] && continue # Skip unset or empty values
if [[ -z $min_val || ${rtthost[i]} -lt $min_val ]]; then
min_val=${rtthost[i]}
min_idx=$i
fi fi
done done
min_idx=$((min_idx - 1)) printf "[WGDashboard] %s Frontend is compiled\n" "$heavy_checkmark"
}
printf " Which mirror you would like to use (Hit enter to use default)\n" #------------------------------------------------------------------------------
printf " Default is %s :" "${urls[$min_idx]}" # Install
read -t ${msleep} -r choice #------------------------------------------------------------------------------
printf "\n" _ensureFolder(){
if [ ! -d "$1" ]
if [[ -z "$choice" ]]; then then
choice=$((min_idx + 1)) mkdir "$1"
fi printf "[WGDashboard] %s Created ./%s folder\n" "$heavy_checkmark" "$1"
if [[ "$choice" =~ ^[0-9]+$ ]] && (( choice >= 1 && choice <= ${#urls[@]} )); then
selected_url="${urls[choice-1]}"
printf "[WGDashboard] %s Will download Python packages from %s\n" "$heavy_checkmark" "$selected_url"
else else
selected_url="${urls[0]}" printf "[WGDashboard] %s Found existing ./%s folder\n" "$heavy_checkmark" "$1"
printf "[WGDashboard] %s Will download Python packages from %s\n" "$heavy_checkmark" "${urls[0]}"
fi fi
} }
@@ -325,29 +439,9 @@ install_wgd(){
printf "[WGDashboard] Starting to install WGDashboard\n" printf "[WGDashboard] Starting to install WGDashboard\n"
_determineOS _determineOS
if [ ! -d "log" ] _ensureFolder "log"
then _ensureFolder "download"
mkdir "log" _ensureFolder "db"
printf "[WGDashboard] %s Created ./log folder\n" "$heavy_checkmark"
else
printf "[WGDashboard] %s Found existing ./log folder\n" "$heavy_checkmark"
fi
if [ ! -d "download" ]
then
mkdir "download"
printf "[WGDashboard] %s Created ./download folder\n" "$heavy_checkmark"
else
printf "[WGDashboard] %s Found existing ./download folder\n" "$heavy_checkmark"
fi
if [ ! -d "db" ]
then
mkdir "db"
printf "[WGDashboard] %s Created ./db folder\n" "$heavy_checkmark"
else
printf "[WGDashboard] %s Found existing ./db folder\n" "$heavy_checkmark"
fi
if ! python3 --version > /dev/null 2>&1 if ! python3 --version > /dev/null 2>&1
then then
@@ -362,6 +456,7 @@ install_wgd(){
_installPythonVenv _installPythonVenv
_installPythonPip _installPythonPip
_checkWireguard _checkWireguard
_compileFrontend
sudo chmod -R 755 /etc/wireguard/ sudo chmod -R 755 /etc/wireguard/
_check_and_set_venv _check_and_set_venv
@@ -371,7 +466,6 @@ install_wgd(){
printf "[WGDashboard] %s Installing latest Python dependencies\n" "$install" printf "[WGDashboard] %s Installing latest Python dependencies\n" "$install"
{ date; python3 -m pip install -r requirements.txt -i "$selected_url"; printf "\n\n"; } >> ./log/install.txt #This all works on the default installation. { date; python3 -m pip install -r requirements.txt -i "$selected_url"; printf "\n\n"; } >> ./log/install.txt #This all works on the default installation.
if [ ! -f "ssl-tls.ini" ] if [ ! -f "ssl-tls.ini" ]
then then
printf "[SSL/TLS]\ncertificate_path = \nprivate_key_path = \n" >> ssl-tls.ini printf "[SSL/TLS]\ncertificate_path = \nprivate_key_path = \n" >> ssl-tls.ini
@@ -379,10 +473,14 @@ install_wgd(){
else else
printf "[WGDashboard] %s Found existing ssl-tls.ini\n" "$heavy_checkmark" printf "[WGDashboard] %s Found existing ssl-tls.ini\n" "$heavy_checkmark"
fi fi
printf "[WGDashboard] %s WGDashboard installed successfully!\n" "$heavy_checkmark" printf "[WGDashboard] %s WGDashboard installed successfully!\n" "$heavy_checkmark"
printf "[WGDashboard] Enter ./wgd.sh start to start the dashboard\n" printf "[WGDashboard] Enter ./wgd.sh start to start the dashboard\n"
} }
#------------------------------------------------------------------------------
# Status / SSL
#------------------------------------------------------------------------------
check_wgd_status(){ check_wgd_status(){
if test -f "$PID_FILE"; then if test -f "$PID_FILE"; then
if ps aux | grep -v grep | grep $(cat ./gunicorn.pid) > /dev/null; then if ps aux | grep -v grep | grep $(cat ./gunicorn.pid) > /dev/null; then
@@ -407,6 +505,9 @@ certbot_renew_ssl () {
certbot renew --work-dir $cb_work_dir --config-dir $cb_config_dir certbot renew --work-dir $cb_work_dir --config-dir $cb_config_dir
} }
#------------------------------------------------------------------------------
# Start / Stop
#------------------------------------------------------------------------------
gunicorn_start () { gunicorn_start () {
printf "[WGDashboard] Starting WGDashboard with Gunicorn in the background.\n" printf "[WGDashboard] Starting WGDashboard with Gunicorn in the background.\n"
d=$(date '+%Y%m%d%H%M%S') d=$(date '+%Y%m%d%H%M%S')
@@ -462,6 +563,9 @@ start_wgd_debug() {
sudo "$venv_python" "$app_name" sudo "$venv_python" "$app_name"
} }
#------------------------------------------------------------------------------
# Update
#------------------------------------------------------------------------------
update_wgd() { update_wgd() {
_determineOS _determineOS
if ! python3 --version > /dev/null 2>&1 if ! python3 --version > /dev/null 2>&1
@@ -505,7 +609,9 @@ update_wgd() {
fi fi
} }
#------------------------------------------------------------------------------
# Entry point
#------------------------------------------------------------------------------
print_header print_header
if [ "$#" -lt 1 ]; then if [ "$#" -lt 1 ]; then
help help