Merge branch 'main' into dev

This commit is contained in:
Owen
2025-11-08 14:20:40 -08:00
5 changed files with 1044 additions and 961 deletions

View File

@@ -89,3 +89,7 @@ Pangolin is dual licensed under the AGPL-3 and the [Fossorial Commercial License
## Contributions ## Contributions
Please see [CONTRIBUTING](./CONTRIBUTING.md) in the repository for guidelines and best practices. Please see [CONTRIBUTING](./CONTRIBUTING.md) in the repository for guidelines and best practices.
---
WireGuard® is a registered trademark of Jason A. Donenfeld.

View File

@@ -1021,7 +1021,7 @@
"actionDeleteSite": "Standort löschen", "actionDeleteSite": "Standort löschen",
"actionGetSite": "Standort abrufen", "actionGetSite": "Standort abrufen",
"actionListSites": "Standorte auflisten", "actionListSites": "Standorte auflisten",
"actionApplyBlueprint": "Blaupause anwenden", "actionApplyBlueprint": "Blueprint anwenden",
"setupToken": "Setup-Token", "setupToken": "Setup-Token",
"setupTokenDescription": "Geben Sie das Setup-Token von der Serverkonsole ein.", "setupTokenDescription": "Geben Sie das Setup-Token von der Serverkonsole ein.",
"setupTokenRequired": "Setup-Token ist erforderlich", "setupTokenRequired": "Setup-Token ist erforderlich",
@@ -1080,11 +1080,11 @@
"actionDeleteIdpOrg": "IDP-Organisationsrichtlinie löschen", "actionDeleteIdpOrg": "IDP-Organisationsrichtlinie löschen",
"actionListIdpOrgs": "IDP-Organisationen auflisten", "actionListIdpOrgs": "IDP-Organisationen auflisten",
"actionUpdateIdpOrg": "IDP-Organisation aktualisieren", "actionUpdateIdpOrg": "IDP-Organisation aktualisieren",
"actionCreateClient": "Kunde erstellen", "actionCreateClient": "Client erstellen",
"actionDeleteClient": "Kunde löschen", "actionDeleteClient": "Client löschen",
"actionUpdateClient": "Kunde aktualisieren", "actionUpdateClient": "Client aktualisieren",
"actionListClients": "Kunden auflisten", "actionListClients": "Clientsn auflisten",
"actionGetClient": "Kunde holen", "actionGetClient": "Client abrufen",
"actionCreateSiteResource": "Site-Ressource erstellen", "actionCreateSiteResource": "Site-Ressource erstellen",
"actionDeleteSiteResource": "Site-Ressource löschen", "actionDeleteSiteResource": "Site-Ressource löschen",
"actionGetSiteResource": "Site-Ressource abrufen", "actionGetSiteResource": "Site-Ressource abrufen",
@@ -1161,29 +1161,29 @@
"sidebarAllUsers": "Alle Benutzer", "sidebarAllUsers": "Alle Benutzer",
"sidebarIdentityProviders": "Identitätsanbieter", "sidebarIdentityProviders": "Identitätsanbieter",
"sidebarLicense": "Lizenz", "sidebarLicense": "Lizenz",
"sidebarClients": "Kunden", "sidebarClients": "Clients",
"sidebarDomains": "Domänen", "sidebarDomains": "Domänen",
"sidebarBluePrints": "Baupläne", "sidebarBluePrints": "Blueprints",
"blueprints": "Baupläne", "blueprints": "Blueprints",
"blueprintsDescription": "Blaupausen sind deklarative YAML-Konfigurationen, die deine Ressourcen und deren Einstellungen definieren", "blueprintsDescription": "Blueprints sind deklarative YAML-Konfigurationen, die deine Ressourcen und deren Einstellungen definieren",
"blueprintAdd": "Blaupause hinzufügen", "blueprintAdd": "Blueprint hinzufügen",
"blueprintGoBack": "Alle Blaupausen ansehen", "blueprintGoBack": "Alle Blueprints ansehen",
"blueprintCreate": "Blaupause erstellen", "blueprintCreate": "Blueprint erstellen",
"blueprintCreateDescription2": "Folge den Schritten unten, um eine neue Blaupause zu erstellen und anzuwenden", "blueprintCreateDescription2": "Folge den Schritten unten, um einen neuen Blueprint zu erstellen und anzuwenden",
"blueprintDetails": "Blaupausendetails", "blueprintDetails": "Blueprintdetails",
"blueprintDetailsDescription": "Siehe die Blaupausenlauf-Details", "blueprintDetailsDescription": "Siehe die Blueprint Details",
"blueprintInfo": "Blaupauseninformation", "blueprintInfo": "Blueprint Information",
"message": "Nachricht", "message": "Nachricht",
"blueprintContentsDescription": "Definieren Sie den YAML-Inhalt, der Ihre Infrastruktur beschreibt", "blueprintContentsDescription": "Definieren Sie den YAML-Inhalt, der Ihre Infrastruktur beschreibt",
"blueprintErrorCreateDescription": "Fehler beim Anwenden der Blaupause", "blueprintErrorCreateDescription": "Fehler beim Anwenden des Blueprints",
"blueprintErrorCreate": "Fehler beim Erstellen der Blaupause", "blueprintErrorCreate": "Fehler beim Erstellen des Blueprints",
"searchBlueprintProgress": "Blaupausen suchen...", "searchBlueprintProgress": "Blueprints suchen...",
"appliedAt": "Angewandt am", "appliedAt": "Angewandt am",
"source": "Quelle", "source": "Quelle",
"contents": "Inhalt", "contents": "Inhalt",
"parsedContents": "Analysierte Inhalte", "parsedContents": "Analysierte Inhalte",
"enableDockerSocket": "Docker Blaupause aktivieren", "enableDockerSocket": "Docker Blueprints aktivieren",
"enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blaupausenbeschriftungen. Der Socket-Pfad muss neu angegeben werden.", "enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blueprintbeschriftungen. Der Socket-Pfad muss neu angegeben werden.",
"enableDockerSocketLink": "Mehr erfahren", "enableDockerSocketLink": "Mehr erfahren",
"viewDockerContainers": "Docker Container anzeigen", "viewDockerContainers": "Docker Container anzeigen",
"containersIn": "Container in {siteName}", "containersIn": "Container in {siteName}",
@@ -1423,14 +1423,14 @@
}, },
"siteRequired": "Standort ist erforderlich.", "siteRequired": "Standort ist erforderlich.",
"olmTunnel": "Olm-Tunnel", "olmTunnel": "Olm-Tunnel",
"olmTunnelDescription": "Nutzen Sie Olm für die Kundenverbindung", "olmTunnelDescription": "Nutzen Sie Olm für die Clientverbindung",
"errorCreatingClient": "Fehler beim Erstellen des Clients", "errorCreatingClient": "Fehler beim Erstellen des Clients",
"clientDefaultsNotFound": "Standardeinstellungen des Clients nicht gefunden", "clientDefaultsNotFound": "Standardeinstellungen des Clients nicht gefunden",
"createClient": "Client erstellen", "createClient": "Client erstellen",
"createClientDescription": "Erstellen Sie einen neuen Client für die Verbindung zu Ihren Standorten.", "createClientDescription": "Erstellen Sie einen neuen Client für die Verbindung zu Ihren Standorten.",
"seeAllClients": "Alle Clients anzeigen", "seeAllClients": "Alle Clients anzeigen",
"clientInformation": "Kundeninformationen", "clientInformation": "Clientninformationen",
"clientNamePlaceholder": "Kundenname", "clientNamePlaceholder": "Clientname",
"address": "Adresse", "address": "Adresse",
"subnetPlaceholder": "Subnetz", "subnetPlaceholder": "Subnetz",
"addressDescription": "Die Adresse, die dieser Client für die Verbindung verwenden wird.", "addressDescription": "Die Adresse, die dieser Client für die Verbindung verwenden wird.",
@@ -2049,7 +2049,7 @@
"orgOrDomainIdMissing": "Organisation oder Domänen-ID fehlt", "orgOrDomainIdMissing": "Organisation oder Domänen-ID fehlt",
"loadingDNSRecords": "Lade DNS-Einträge...", "loadingDNSRecords": "Lade DNS-Einträge...",
"olmUpdateAvailableInfo": "Eine aktualisierte Version von Olm ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für die beste Erfahrung.", "olmUpdateAvailableInfo": "Eine aktualisierte Version von Olm ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für die beste Erfahrung.",
"client": "Kunde", "client": "Client",
"proxyProtocol": "Proxy-Protokoll-Einstellungen", "proxyProtocol": "Proxy-Protokoll-Einstellungen",
"proxyProtocolDescription": "Konfigurieren Sie das Proxy-Protokoll, um die IP-Adressen des Clients für TCP/UDP-Dienste zu erhalten.", "proxyProtocolDescription": "Konfigurieren Sie das Proxy-Protokoll, um die IP-Adressen des Clients für TCP/UDP-Dienste zu erhalten.",
"enableProxyProtocol": "Proxy-Protokoll aktivieren", "enableProxyProtocol": "Proxy-Protokoll aktivieren",

View File

@@ -131,7 +131,7 @@
"expireIn": "Expire In", "expireIn": "Expire In",
"neverExpire": "Never expire", "neverExpire": "Never expire",
"shareExpireDescription": "Expiration time is how long the link will be usable and provide access to the resource. After this time, the link will no longer work, and users who used this link will lose access to the resource.", "shareExpireDescription": "Expiration time is how long the link will be usable and provide access to the resource. After this time, the link will no longer work, and users who used this link will lose access to the resource.",
"shareSeeOnce": "You will only be able to see this linkonce. Make sure to copy it.", "shareSeeOnce": "You will only be able to see this link once. Make sure to copy it.",
"shareAccessHint": "Anyone with this link can access the resource. Share it with care.", "shareAccessHint": "Anyone with this link can access the resource. Share it with care.",
"shareTokenUsage": "See Access Token Usage", "shareTokenUsage": "See Access Token Usage",
"createLink": "Create Link", "createLink": "Create Link",
@@ -179,7 +179,7 @@
"baseDomain": "Base Domain", "baseDomain": "Base Domain",
"subdomnainDescription": "The subdomain where your resource will be accessible.", "subdomnainDescription": "The subdomain where your resource will be accessible.",
"resourceRawSettings": "TCP/UDP Settings", "resourceRawSettings": "TCP/UDP Settings",
"resourceRawSettingsDescription": "Configure how your resource will be accessed over TCP/UDP", "resourceRawSettingsDescription": "Configure how your resource will be accessed over TCP/UDP. You map the resource to a port on the host Pangolin server, so you can access the resource from <server-public-ip>:<mapped-port>. (https://docs.pangolin.net/manage/resources/tcp-udp-resources)",
"protocol": "Protocol", "protocol": "Protocol",
"protocolSelect": "Select a protocol", "protocolSelect": "Select a protocol",
"resourcePortNumber": "Port Number", "resourcePortNumber": "Port Number",

1917
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -33,7 +33,7 @@
}, },
"dependencies": { "dependencies": {
"@asteasolutions/zod-to-openapi": "^7.3.4", "@asteasolutions/zod-to-openapi": "^7.3.4",
"@aws-sdk/client-s3": "3.908.0", "@aws-sdk/client-s3": "3.922.0",
"@hookform/resolvers": "5.2.2", "@hookform/resolvers": "5.2.2",
"@monaco-editor/react": "^4.7.0", "@monaco-editor/react": "^4.7.0",
"@node-rs/argon2": "^2.0.2", "@node-rs/argon2": "^2.0.2",
@@ -65,7 +65,7 @@
"@tailwindcss/forms": "^0.5.10", "@tailwindcss/forms": "^0.5.10",
"@tanstack/react-table": "8.21.3", "@tanstack/react-table": "8.21.3",
"arctic": "^3.7.0", "arctic": "^3.7.0",
"axios": "^1.12.2", "axios": "^1.13.1",
"better-sqlite3": "11.7.0", "better-sqlite3": "11.7.0",
"canvas-confetti": "1.9.4", "canvas-confetti": "1.9.4",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
@@ -78,10 +78,10 @@
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"date-fns": "4.1.0", "date-fns": "4.1.0",
"drizzle-orm": "0.44.7", "drizzle-orm": "0.44.7",
"eslint": "9.37.0", "eslint": "9.39.0",
"eslint-config-next": "15.5.6", "eslint-config-next": "16.0.1",
"express": "5.1.0", "express": "5.1.0",
"express-rate-limit": "8.1.0", "express-rate-limit": "8.2.1",
"glob": "11.0.3", "glob": "11.0.3",
"helmet": "8.1.0", "helmet": "8.1.0",
"http-errors": "2.0.0", "http-errors": "2.0.0",
@@ -91,11 +91,11 @@
"jmespath": "^0.16.0", "jmespath": "^0.16.0",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"lucide-react": "^0.545.0", "lucide-react": "^0.552.0",
"maxmind": "5.0.0", "maxmind": "5.0.0",
"moment": "2.30.1", "moment": "2.30.1",
"next": "15.5.6", "next": "15.5.6",
"next-intl": "^4.3.12", "next-intl": "^4.4.0",
"next-themes": "0.4.6", "next-themes": "0.4.6",
"nextjs-toploader": "^3.9.17", "nextjs-toploader": "^3.9.17",
"node-cache": "5.1.2", "node-cache": "5.1.2",
@@ -105,17 +105,17 @@
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"oslo": "1.2.1", "oslo": "1.2.1",
"pg": "^8.16.2", "pg": "^8.16.2",
"posthog-node": "^5.10.4", "posthog-node": "^5.11.0",
"qrcode.react": "4.2.0", "qrcode.react": "4.2.0",
"react": "19.2.0", "react": "19.2.0",
"react-day-picker": "9.11.1", "react-day-picker": "9.11.1",
"react-dom": "19.2.0", "react-dom": "19.2.0",
"react-easy-sort": "^1.8.0", "react-easy-sort": "^1.8.0",
"react-hook-form": "7.65.0", "react-hook-form": "7.66.0",
"react-icons": "^5.5.0", "react-icons": "^5.5.0",
"rebuild": "0.1.2", "rebuild": "0.1.2",
"reodotdev": "^1.0.0", "reodotdev": "^1.0.0",
"resend": "^6.1.2", "resend": "^6.4.0",
"semver": "^7.7.3", "semver": "^7.7.3",
"stripe": "18.2.1", "stripe": "18.2.1",
"swagger-ui-express": "^5.0.1", "swagger-ui-express": "^5.0.1",
@@ -133,10 +133,10 @@
"@faker-js/faker": "^10.1.0" "@faker-js/faker": "^10.1.0"
}, },
"devDependencies": { "devDependencies": {
"@dotenvx/dotenvx": "1.51.0", "@dotenvx/dotenvx": "1.51.1",
"@esbuild-plugins/tsconfig-paths": "0.1.2", "@esbuild-plugins/tsconfig-paths": "0.1.2",
"@react-email/preview-server": "4.3.2", "@react-email/preview-server": "4.3.2",
"@tailwindcss/postcss": "^4.1.16", "@tailwindcss/postcss": "^4.1.17",
"@types/better-sqlite3": "7.6.12", "@types/better-sqlite3": "7.6.12",
"@types/cookie-parser": "1.4.10", "@types/cookie-parser": "1.4.10",
"@types/cors": "2.8.19", "@types/cors": "2.8.19",
@@ -157,7 +157,7 @@
"@types/ws": "8.18.1", "@types/ws": "8.18.1",
"@types/yargs": "17.0.34", "@types/yargs": "17.0.34",
"drizzle-kit": "0.31.6", "drizzle-kit": "0.31.6",
"esbuild": "0.25.11", "esbuild": "0.25.12",
"esbuild-node-externals": "1.18.0", "esbuild-node-externals": "1.18.0",
"postcss": "^8", "postcss": "^8",
"react-email": "4.3.2", "react-email": "4.3.2",
@@ -165,7 +165,7 @@
"tsc-alias": "1.8.16", "tsc-alias": "1.8.16",
"tsx": "4.20.6", "tsx": "4.20.6",
"typescript": "^5", "typescript": "^5",
"typescript-eslint": "^8.46.2" "typescript-eslint": "^8.46.3"
}, },
"overrides": { "overrides": {
"emblor": { "emblor": {