mirror of
https://github.com/fosrl/pangolin.git
synced 2026-05-16 13:34:20 +00:00
Compare commits
9 Commits
1.18.4-s.4
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd1f7ba544 | ||
|
|
b414f04cce | ||
|
|
6e4a28f227 | ||
|
|
0a5780a3b3 | ||
|
|
d58b96f4b1 | ||
|
|
f778f5c941 | ||
|
|
6422208f69 | ||
|
|
c3ebc423b5 | ||
|
|
02ba2393b9 |
3
.github/FUNDING.yml
vendored
3
.github/FUNDING.yml
vendored
@@ -1,3 +0,0 @@
|
|||||||
# These are supported funding model platforms
|
|
||||||
|
|
||||||
github: [fosrl]
|
|
||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"embed"
|
"embed"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
@@ -68,6 +69,9 @@ const (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
crowdsecFlag := flag.Bool("crowdsec", false, "Enable the CrowdSec installation prompt")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
// print a banner about prerequisites - opening port 80, 443, 51820, and 21820 on the VPS and firewall and pointing your domain to the VPS IP with a records. Docs are at http://localhost:3000/Getting%20Started/dns-networking
|
// print a banner about prerequisites - opening port 80, 443, 51820, and 21820 on the VPS and firewall and pointing your domain to the VPS IP with a records. Docs are at http://localhost:3000/Getting%20Started/dns-networking
|
||||||
|
|
||||||
fmt.Println("Welcome to the Pangolin installer!")
|
fmt.Println("Welcome to the Pangolin installer!")
|
||||||
@@ -206,7 +210,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !checkIsCrowdsecInstalledInCompose() {
|
if *crowdsecFlag && !checkIsCrowdsecInstalledInCompose() {
|
||||||
fmt.Println("\n=== CrowdSec Install ===")
|
fmt.Println("\n=== CrowdSec Install ===")
|
||||||
// check if crowdsec is installed
|
// check if crowdsec is installed
|
||||||
if readBool("Would you like to install CrowdSec?", false) {
|
if readBool("Would you like to install CrowdSec?", false) {
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Създаден на",
|
"createdAt": "Създаден на",
|
||||||
"proxyErrorInvalidHeader": "Невалидна стойност за заглавие на хоста. Използвайте формат на име на домейн, или оставете празно поле за да премахнете персонализирано заглавие на хост.",
|
"proxyErrorInvalidHeader": "Невалидна стойност за заглавие на хоста. Използвайте формат на име на домейн, или оставете празно поле за да премахнете персонализирано заглавие на хост.",
|
||||||
"proxyErrorTls": "Невалидно име на TLS сървър. Използвайте формат на име на домейн, или оставете празно за да премахнете името на TLS сървъра.",
|
"proxyErrorTls": "Невалидно име на TLS сървър. Използвайте формат на име на домейн, или оставете празно за да премахнете името на TLS сървъра.",
|
||||||
"proxyEnableSSL": "Активиране на TLS",
|
"proxyEnableSSL": "Активиране на SSL",
|
||||||
"proxyEnableSSLDescription": "Активирайте SSL/TLS криптиране за сигурни HTTPS връзки към целите.",
|
"proxyEnableSSLDescription": "Активирайте SSL/TLS криптиране за сигурни HTTPS връзки към целите.",
|
||||||
"target": "Цел",
|
"target": "Цел",
|
||||||
"configureTarget": "Конфигуриране на цели",
|
"configureTarget": "Конфигуриране на цели",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Метод",
|
"editInternalResourceDialogScheme": "Метод",
|
||||||
"editInternalResourceDialogEnableSsl": "Активирайте TLS",
|
"editInternalResourceDialogEnableSsl": "Активирайте SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Активирайте SSL/TLS криптиране за сигурни HTTPS връзки към целта.",
|
"editInternalResourceDialogEnableSslDescription": "Активирайте SSL/TLS криптиране за сигурни HTTPS връзки към целта.",
|
||||||
"editInternalResourceDialogDestination": "Дестинация",
|
"editInternalResourceDialogDestination": "Дестинация",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.",
|
"editInternalResourceDialogDestinationHostDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Метод",
|
"scheme": "Метод",
|
||||||
"createInternalResourceDialogScheme": "Метод",
|
"createInternalResourceDialogScheme": "Метод",
|
||||||
"createInternalResourceDialogEnableSsl": "Активирайте TLS",
|
"createInternalResourceDialogEnableSsl": "Активирайте SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Активирайте SSL/TLS криптиране за сигурни HTTPS връзки към целта.",
|
"createInternalResourceDialogEnableSslDescription": "Активирайте SSL/TLS криптиране за сигурни HTTPS връзки към целта.",
|
||||||
"createInternalResourceDialogDestination": "Дестинация",
|
"createInternalResourceDialogDestination": "Дестинация",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.",
|
"createInternalResourceDialogDestinationHostDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "По-надежден и по-нисък поддръжка на Самостоятелно-хостван Панголиин сървър с допълнителни екстри",
|
"description": "По-надежден и по-нисък поддръжка на Самостоятелно-хостван Панголиин сървър с допълнителни екстри",
|
||||||
"introTitle": "Управлявано Самостоятелно-хостван Панголиин",
|
"introTitle": "Управлявано Самостоятелно-хостван Панголиин",
|
||||||
"introDescription": "е опция за внедряване, предназначена за хора, които искат простота и допълнителна надеждност, като същевременно запазят данните си частни и самостоятелно-хоствани.",
|
"introDescription": "е опция за внедряване, предназначена за хора, които искат простота и допълнителна надеждност, като същевременно запазят данните си частни и самостоятелно-хоствани.",
|
||||||
"introDetail": "С тази опция все още управлявате свой собствен Панголиин възел - вашите тунели, TLS терминатора и трафик остават на вашия сървър. Разликата е, че управлението и мониторингът се обработват чрез нашия облачен панел за контрол, който отключва редица предимства:",
|
"introDetail": "С тази опция все още управлявате свой собствен Панголиин възел - вашите тунели, SSL терминатора и трафик остават на вашия сървър. Разликата е, че управлението и мониторингът се обработват чрез нашия облачен панел за контрол, който отключва редица предимства:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "По-прости операции",
|
"title": "По-прости операции",
|
||||||
"description": "Няма нужда да управлявате свой собствен имейл сървър или да настройвате сложни аларми. Ще получите проверки и предупреждения при прекъсване от самото начало."
|
"description": "Няма нужда да управлявате свой собствен имейл сървър или да настройвате сложни аларми. Ще получите проверки и предупреждения при прекъсване от самото начало."
|
||||||
@@ -3136,7 +3136,7 @@
|
|||||||
"httpDestNamePlaceholder": "Моята HTTP дестинация",
|
"httpDestNamePlaceholder": "Моята HTTP дестинация",
|
||||||
"httpDestUrlLabel": "Дестинация URL",
|
"httpDestUrlLabel": "Дестинация URL",
|
||||||
"httpDestUrlErrorHttpRequired": "URL адресът трябва да използва http или https",
|
"httpDestUrlErrorHttpRequired": "URL адресът трябва да използва http или https",
|
||||||
"httpDestUrlErrorHttpsRequired": "HTTPS е необходимо за облачни инсталации",
|
"httpDestUrlErrorHttpsRequired": "SSL е необходимо за облачни инсталации",
|
||||||
"httpDestUrlErrorInvalid": "Въведете валиден URL (напр. https://example.com/webhook)",
|
"httpDestUrlErrorInvalid": "Въведете валиден URL (напр. https://example.com/webhook)",
|
||||||
"httpDestAuthTitle": "Удостоверяване",
|
"httpDestAuthTitle": "Удостоверяване",
|
||||||
"httpDestAuthDescription": "Изберете как заявленията ви се удостоверяват.",
|
"httpDestAuthDescription": "Изберете как заявленията ви се удостоверяват.",
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Vytvořeno v",
|
"createdAt": "Vytvořeno v",
|
||||||
"proxyErrorInvalidHeader": "Neplatná hodnota hlavičky hostitele. Použijte formát názvu domény, nebo uložte prázdné pro zrušení vlastního hlavičky hostitele.",
|
"proxyErrorInvalidHeader": "Neplatná hodnota hlavičky hostitele. Použijte formát názvu domény, nebo uložte prázdné pro zrušení vlastního hlavičky hostitele.",
|
||||||
"proxyErrorTls": "Neplatné jméno TLS serveru. Použijte formát doménového jména nebo uložte prázdné pro odstranění názvu TLS serveru.",
|
"proxyErrorTls": "Neplatné jméno TLS serveru. Použijte formát doménového jména nebo uložte prázdné pro odstranění názvu TLS serveru.",
|
||||||
"proxyEnableSSL": "Povolit TLS",
|
"proxyEnableSSL": "Povolit SSL",
|
||||||
"proxyEnableSSLDescription": "Povolit šifrování SSL/TLS pro zabezpečená připojení HTTPS k cílům.",
|
"proxyEnableSSLDescription": "Povolit šifrování SSL/TLS pro zabezpečená připojení HTTPS k cílům.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Konfigurace cílů",
|
"configureTarget": "Konfigurace cílů",
|
||||||
|
|||||||
@@ -22,11 +22,11 @@
|
|||||||
"componentsMember": "Du bist Mitglied von {count, plural, =0 {keiner Organisation} one {einer Organisation} other {# Organisationen}}.",
|
"componentsMember": "Du bist Mitglied von {count, plural, =0 {keiner Organisation} one {einer Organisation} other {# Organisationen}}.",
|
||||||
"componentsInvalidKey": "Ungültige oder abgelaufene Lizenzschlüssel erkannt. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
|
"componentsInvalidKey": "Ungültige oder abgelaufene Lizenzschlüssel erkannt. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
|
||||||
"dismiss": "Verwerfen",
|
"dismiss": "Verwerfen",
|
||||||
"subscriptionViolationMessage": "Sie überschreiten Ihre Grenzen für Ihr aktuelles Paket. Korrigieren Sie das Problem, indem Sie Webseiten, Benutzer oder andere Ressourcen entfernen, um in Ihrem Paket zu bleiben.",
|
"subscriptionViolationMessage": "Sie überschreiten Ihre Grenzen für Ihr aktuelles Paket. Korrigieren Sie das Problem, indem Sie Standorte, Benutzer oder andere Ressourcen entfernen, um in Ihrem Paket zu bleiben.",
|
||||||
"trialBannerMessage": "Ihre Testversion läuft in {countdown} ab. Upgraden, um den Zugriff zu behalten.",
|
"trialBannerMessage": "Ihre Testversion läuft in {countdown} ab. Upgraden, um den Zugriff zu behalten.",
|
||||||
"trialBannerExpired": "Ihre Testversion ist abgelaufen. Jetzt upgraden, um den Zugriff wiederherzustellen.",
|
"trialBannerExpired": "Ihre Testversion ist abgelaufen. Jetzt upgraden, um den Zugriff wiederherzustellen.",
|
||||||
"billingTrialBannerTitle": "Kostenlose Testversion aktiv",
|
"billingTrialBannerTitle": "Kostenlose Testversion aktiv",
|
||||||
"billingTrialBannerDescription": "Sie nutzen derzeit eine kostenlose Testversion auf der Geschäftsstufe. Wenn die Testversion endet, wird Ihr Konto automatisch auf die Funktionen und Beschränkungen der Basisstufe zurückgesetzt. Upgraden Sie jederzeit, um weiterhin Zugriff auf die Funktionen Ihres aktuellen Plans zu behalten.",
|
"billingTrialBannerDescription": "Sie nutzen derzeit eine kostenlose Testversion auf der Business-Tarif. Wenn die Testversion endet, wird Ihr Konto automatisch auf die Funktionen und Beschränkungen der Basis-Tarif zurückgesetzt. Upgraden Sie jederzeit, um weiterhin Zugriff auf die Funktionen Ihres aktuellen Plans zu behalten.",
|
||||||
"billingTrialBannerUpgrade": "Jetzt upgraden",
|
"billingTrialBannerUpgrade": "Jetzt upgraden",
|
||||||
"billingTrialBadge": "Kostenlose Testversion",
|
"billingTrialBadge": "Kostenlose Testversion",
|
||||||
"trialActive": "Kostenlose Testversion aktiv",
|
"trialActive": "Kostenlose Testversion aktiv",
|
||||||
@@ -34,8 +34,8 @@
|
|||||||
"trialHasEnded": "Ihre Testversion ist beendet.",
|
"trialHasEnded": "Ihre Testversion ist beendet.",
|
||||||
"trialDaysRemaining": "{count, plural, one {# Tag übrig} other {# Tage übrig}}",
|
"trialDaysRemaining": "{count, plural, one {# Tag übrig} other {# Tage übrig}}",
|
||||||
"trialDaysLeftShort": "Noch {days}d in der Testversion",
|
"trialDaysLeftShort": "Noch {days}d in der Testversion",
|
||||||
"trialGoToBilling": "Zur Rechnungsseite gehen",
|
"trialGoToBilling": "Zur Abrechnung gehen",
|
||||||
"subscriptionViolationViewBilling": "Rechnung anzeigen",
|
"subscriptionViolationViewBilling": "Abrechnung anzeigen",
|
||||||
"componentsLicenseViolation": "Lizenzverstoß: Dieser Server benutzt {usedSites} Standorte, was das Lizenzlimit von {maxSites} Standorten überschreitet. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
|
"componentsLicenseViolation": "Lizenzverstoß: Dieser Server benutzt {usedSites} Standorte, was das Lizenzlimit von {maxSites} Standorten überschreitet. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
|
||||||
"componentsSupporterMessage": "Vielen Dank für die Unterstützung von Pangolin als {tier}!",
|
"componentsSupporterMessage": "Vielen Dank für die Unterstützung von Pangolin als {tier}!",
|
||||||
"inviteErrorNotValid": "Es tut uns leid, aber es sieht so aus, als wäre die Einladung, auf die du zugreifen möchtest, entweder nicht angenommen worden oder nicht mehr gültig.",
|
"inviteErrorNotValid": "Es tut uns leid, aber es sieht so aus, als wäre die Einladung, auf die du zugreifen möchtest, entweder nicht angenommen worden oder nicht mehr gültig.",
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
"edit": "Bearbeiten",
|
"edit": "Bearbeiten",
|
||||||
"siteConfirmDelete": "Löschen des Standorts bestätigen",
|
"siteConfirmDelete": "Löschen des Standorts bestätigen",
|
||||||
"siteDelete": "Standort löschen",
|
"siteDelete": "Standort löschen",
|
||||||
"siteMessageRemove": "Sobald der Standort entfernt ist, wird sie nicht mehr zugänglich sein. Alle mit dem Standort verbundenen Ziele werden ebenfalls entfernt.",
|
"siteMessageRemove": "Sobald der Standort entfernt ist, wird er nicht mehr zugänglich sein. Alle mit dem Standort verbundenen Ziele werden ebenfalls entfernt.",
|
||||||
"siteQuestionRemove": "Sind Sie sicher, dass Sie den Standort aus der Organisation entfernen möchten?",
|
"siteQuestionRemove": "Sind Sie sicher, dass Sie den Standort aus der Organisation entfernen möchten?",
|
||||||
"siteManageSites": "Standorte verwalten",
|
"siteManageSites": "Standorte verwalten",
|
||||||
"siteDescription": "Erstellen und Verwalten von Standorten, um die Verbindung zu privaten Netzwerken zu ermöglichen",
|
"siteDescription": "Erstellen und Verwalten von Standorten, um die Verbindung zu privaten Netzwerken zu ermöglichen",
|
||||||
@@ -117,20 +117,20 @@
|
|||||||
"siteGeneralDescription": "Allgemeine Einstellungen für diesen Standort konfigurieren",
|
"siteGeneralDescription": "Allgemeine Einstellungen für diesen Standort konfigurieren",
|
||||||
"siteSettingDescription": "Standorteinstellungen konfigurieren",
|
"siteSettingDescription": "Standorteinstellungen konfigurieren",
|
||||||
"siteResourcesTab": "Ressourcen",
|
"siteResourcesTab": "Ressourcen",
|
||||||
"siteResourcesNoneOnSite": "Diese Seite hat noch keine öffentlichen oder privaten Ressourcen.",
|
"siteResourcesNoneOnSite": "Dieser Standort hat noch keine öffentlichen oder privaten Ressourcen",
|
||||||
"siteResourcesSectionPublic": "Öffentliche Ressourcen",
|
"siteResourcesSectionPublic": "Öffentliche Ressourcen",
|
||||||
"siteResourcesSectionPrivate": "Private Ressourcen",
|
"siteResourcesSectionPrivate": "Private Ressourcen",
|
||||||
"siteResourcesSectionPublicDescription": "Ressourcen, die extern über Domains oder Ports bereitgestellt werden.",
|
"siteResourcesSectionPublicDescription": "Ressourcen, die extern über Domains oder Ports bereitgestellt werden.",
|
||||||
"siteResourcesSectionPrivateDescription": "Ressourcen, die in Ihrem privaten Netzwerk über die Seite verfügbar sind.",
|
"siteResourcesSectionPrivateDescription": "Ressourcen, die in Ihrem privaten Netzwerk über den Standort verfügbar sind.",
|
||||||
"siteResourcesViewAllPublic": "Alle Ressourcen anzeigen",
|
"siteResourcesViewAllPublic": "Alle Ressourcen anzeigen",
|
||||||
"siteResourcesViewAllPrivate": "Alle Ressourcen anzeigen",
|
"siteResourcesViewAllPrivate": "Alle Ressourcen anzeigen",
|
||||||
"siteResourcesDialogDescription": "Überblick über öffentliche und private Ressourcen, die mit dieser Seite verbunden sind.",
|
"siteResourcesDialogDescription": "Überblick über öffentliche und private Ressourcen, die mit diesem Standort verbunden sind.",
|
||||||
"siteResourcesShowMore": "Mehr anzeigen",
|
"siteResourcesShowMore": "Mehr anzeigen",
|
||||||
"siteResourcesPermissionDenied": "Sie haben keine Berechtigung, diese Ressourcen aufzulisten.",
|
"siteResourcesPermissionDenied": "Sie haben keine Berechtigung, diese Ressourcen aufzulisten.",
|
||||||
"siteResourcesEmptyPublic": "Noch sind keine öffentlichen Ressourcen für diese Seite vorhanden.",
|
"siteResourcesEmptyPublic": "Noch sind keine öffentlichen Ressourcen für diesen Standort vorhanden.",
|
||||||
"siteResourcesEmptyPrivate": "Noch sind keine privaten Ressourcen mit dieser Seite verbunden.",
|
"siteResourcesEmptyPrivate": "Noch sind keine privaten Ressourcen mit diesem Standort verbunden.",
|
||||||
"siteResourcesHowToAccess": "Zugriffsmöglichkeiten",
|
"siteResourcesHowToAccess": "Zugriffsmöglichkeiten",
|
||||||
"siteResourcesTargetsOnSite": "Ziele auf dieser Seite",
|
"siteResourcesTargetsOnSite": "Ziele an diesem Standort",
|
||||||
"siteSetting": "{siteName} Einstellungen",
|
"siteSetting": "{siteName} Einstellungen",
|
||||||
"siteNewtTunnel": "Newt Standort (empfohlen)",
|
"siteNewtTunnel": "Newt Standort (empfohlen)",
|
||||||
"siteNewtTunnelDescription": "Einfachster Weg, einen Einstiegspunkt in jedes Netzwerk zu erstellen. Keine zusätzliche Einrichtung.",
|
"siteNewtTunnelDescription": "Einfachster Weg, einen Einstiegspunkt in jedes Netzwerk zu erstellen. Keine zusätzliche Einrichtung.",
|
||||||
@@ -148,10 +148,10 @@
|
|||||||
"siteCredentialsSaveDescription": "Du kannst das nur einmal sehen. Stelle sicher, dass du es an einen sicheren Ort kopierst.",
|
"siteCredentialsSaveDescription": "Du kannst das nur einmal sehen. Stelle sicher, dass du es an einen sicheren Ort kopierst.",
|
||||||
"siteInfo": "Standortinformationen",
|
"siteInfo": "Standortinformationen",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"shareTitle": "Links zum Teilen verwalten",
|
"shareTitle": "Freigabelinks verwalten",
|
||||||
"shareDescription": "Erstelle teilbare Links, um temporären oder permanenten Zugriff auf Proxy-Ressourcen zu gewähren",
|
"shareDescription": "Erstelle teilbare Links, um temporären oder permanenten Zugriff auf Proxy-Ressourcen zu gewähren",
|
||||||
"shareSearch": "Freigabe-Links suchen...",
|
"shareSearch": "Freigabelinks suchen...",
|
||||||
"shareCreate": "Link erstellen",
|
"shareCreate": "Freigabelink erstellen",
|
||||||
"shareErrorDelete": "Link konnte nicht gelöscht werden",
|
"shareErrorDelete": "Link konnte nicht gelöscht werden",
|
||||||
"shareErrorDeleteMessage": "Fehler beim Löschen des Links",
|
"shareErrorDeleteMessage": "Fehler beim Löschen des Links",
|
||||||
"shareDeleted": "Link gelöscht",
|
"shareDeleted": "Link gelöscht",
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
"shareQuestionRemove": "Sind Sie sicher, dass Sie diesen Freigabelink löschen möchten?",
|
"shareQuestionRemove": "Sind Sie sicher, dass Sie diesen Freigabelink löschen möchten?",
|
||||||
"shareMessageRemove": "Nach dem Löschen funktioniert der Link nicht mehr, und jeder, der ihn nutzt, verliert den Zugriff auf die Ressource.",
|
"shareMessageRemove": "Nach dem Löschen funktioniert der Link nicht mehr, und jeder, der ihn nutzt, verliert den Zugriff auf die Ressource.",
|
||||||
"shareTokenDescription": "Das Zugriffstoken kann auf zwei Arten übergeben werden: als Abfrageparameter oder in den Request-Headern. Diese müssen vom Client auf jeder Anfrage für authentifizierten Zugriff weitergegeben werden.",
|
"shareTokenDescription": "Das Zugriffstoken kann auf zwei Arten übergeben werden: als Abfrageparameter oder in den Request-Headern. Diese müssen vom Client auf jeder Anfrage für authentifizierten Zugriff weitergegeben werden.",
|
||||||
"accessToken": "Zugangs-Token",
|
"accessToken": "Zugriffstoken",
|
||||||
"usageExamples": "Nutzungsbeispiele",
|
"usageExamples": "Nutzungsbeispiele",
|
||||||
"tokenId": "Token-ID",
|
"tokenId": "Token-ID",
|
||||||
"requestHeades": "Anfrage-Header",
|
"requestHeades": "Anfrage-Header",
|
||||||
@@ -172,12 +172,12 @@
|
|||||||
"shareTokenSecurety": "Bewahren Sie das Zugriffstoken sicher. Teilen Sie es nicht in öffentlich zugänglichen Bereichen oder Client-seitigem Code.",
|
"shareTokenSecurety": "Bewahren Sie das Zugriffstoken sicher. Teilen Sie es nicht in öffentlich zugänglichen Bereichen oder Client-seitigem Code.",
|
||||||
"shareErrorFetchResource": "Fehler beim Abrufen der Ressourcen",
|
"shareErrorFetchResource": "Fehler beim Abrufen der Ressourcen",
|
||||||
"shareErrorFetchResourceDescription": "Beim Abrufen der Ressourcen ist ein Fehler aufgetreten",
|
"shareErrorFetchResourceDescription": "Beim Abrufen der Ressourcen ist ein Fehler aufgetreten",
|
||||||
"shareErrorCreate": "Fehler beim Erstellen des Teilen-Links",
|
"shareErrorCreate": "Fehler beim Erstellen des Freigabelinks",
|
||||||
"shareErrorCreateDescription": "Beim Erstellen des Teilen-Links ist ein Fehler aufgetreten",
|
"shareErrorCreateDescription": "Beim Erstellen des Freigabelinks ist ein Fehler aufgetreten",
|
||||||
"shareCreateDescription": "Jeder mit diesem Link kann auf die Ressource zugreifen",
|
"shareCreateDescription": "Jeder mit diesem Link kann auf die Ressource zugreifen",
|
||||||
"shareTitleOptional": "Titel (optional)",
|
"shareTitleOptional": "Titel (optional)",
|
||||||
"expireIn": "Verfällt in",
|
"expireIn": "Läuft ab in",
|
||||||
"neverExpire": "Nie ablaufen",
|
"neverExpire": "Läuft nie ab",
|
||||||
"shareExpireDescription": "Ablaufzeit ist, wie lange der Link verwendet werden kann und bietet Zugriff auf die Ressource. Nach dieser Zeit wird der Link nicht mehr funktionieren und Benutzer, die diesen Link benutzt haben, verlieren den Zugriff auf die Ressource.",
|
"shareExpireDescription": "Ablaufzeit ist, wie lange der Link verwendet werden kann und bietet Zugriff auf die Ressource. Nach dieser Zeit wird der Link nicht mehr funktionieren und Benutzer, die diesen Link benutzt haben, verlieren den Zugriff auf die Ressource.",
|
||||||
"shareSeeOnce": "Sie können diesen Link nur einmal sehen. Bitte kopieren Sie ihn.",
|
"shareSeeOnce": "Sie können diesen Link nur einmal sehen. Bitte kopieren Sie ihn.",
|
||||||
"shareAccessHint": "Jeder mit diesem Link kann auf die Ressource zugreifen. Teilen Sie sie mit Vorsicht.",
|
"shareAccessHint": "Jeder mit diesem Link kann auf die Ressource zugreifen. Teilen Sie sie mit Vorsicht.",
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
"resourcesNotFound": "Keine Ressourcen gefunden",
|
"resourcesNotFound": "Keine Ressourcen gefunden",
|
||||||
"resourceSearch": "Suche Ressourcen",
|
"resourceSearch": "Suche Ressourcen",
|
||||||
"machineSearch": "Maschinen suchen",
|
"machineSearch": "Maschinen suchen",
|
||||||
"machinesSearch": "Suche Maschinen-Klienten...",
|
"machinesSearch": "Maschinen-Clients suchen",
|
||||||
"machineNotFound": "Keine Maschinen gefunden",
|
"machineNotFound": "Keine Maschinen gefunden",
|
||||||
"userDeviceSearch": "Benutzergeräte durchsuchen",
|
"userDeviceSearch": "Benutzergeräte durchsuchen",
|
||||||
"userDevicesSearch": "Benutzergeräte durchsuchen...",
|
"userDevicesSearch": "Benutzergeräte durchsuchen...",
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
"proxyResourcesBannerDescription": "Öffentliche Ressourcen sind HTTPS oder TCP/UDP-Proxys, die über einen Webbrowser für jeden zugänglich sind. Im Gegensatz zu privaten Ressourcen benötigen sie keine Client-seitige Software und können Identitäts- und kontextbezogene Zugriffsrichtlinien beinhalten.",
|
"proxyResourcesBannerDescription": "Öffentliche Ressourcen sind HTTPS oder TCP/UDP-Proxys, die über einen Webbrowser für jeden zugänglich sind. Im Gegensatz zu privaten Ressourcen benötigen sie keine Client-seitige Software und können Identitäts- und kontextbezogene Zugriffsrichtlinien beinhalten.",
|
||||||
"clientResourceTitle": "Private Ressourcen verwalten",
|
"clientResourceTitle": "Private Ressourcen verwalten",
|
||||||
"clientResourceDescription": "Erstelle und verwalte Ressourcen, die nur über einen verbundenen Client zugänglich sind",
|
"clientResourceDescription": "Erstelle und verwalte Ressourcen, die nur über einen verbundenen Client zugänglich sind",
|
||||||
"privateResourcesBannerTitle": "Zero-Trust Privater Zugang",
|
"privateResourcesBannerTitle": "Zero-Trust-Zugriff auf private Ressourcen",
|
||||||
"privateResourcesBannerDescription": "Private Ressourcen nutzen Zero-Trust und stellen sicher, dass Benutzer und Maschinen nur auf Ressourcen zugreifen können, die Sie explizit gewähren. Verbinden Sie Benutzergeräte oder Maschinen-Clients, um auf diese Ressourcen über ein sicheres virtuelles privates Netzwerk zuzugreifen.",
|
"privateResourcesBannerDescription": "Private Ressourcen nutzen Zero-Trust und stellen sicher, dass Benutzer und Maschinen nur auf Ressourcen zugreifen können, die Sie explizit gewähren. Verbinden Sie Benutzergeräte oder Maschinen-Clients, um auf diese Ressourcen über ein sicheres virtuelles privates Netzwerk zuzugreifen.",
|
||||||
"resourcesSearch": "Suche Ressourcen...",
|
"resourcesSearch": "Suche Ressourcen...",
|
||||||
"resourceAdd": "Ressource hinzufügen",
|
"resourceAdd": "Ressource hinzufügen",
|
||||||
@@ -265,7 +265,7 @@
|
|||||||
"rules": "Regeln",
|
"rules": "Regeln",
|
||||||
"resourceSettingDescription": "Einstellungen für die Ressource konfigurieren",
|
"resourceSettingDescription": "Einstellungen für die Ressource konfigurieren",
|
||||||
"resourceSetting": "{resourceName} Einstellungen",
|
"resourceSetting": "{resourceName} Einstellungen",
|
||||||
"alwaysAllow": "Auth umgehen",
|
"alwaysAllow": "Authentifizierung umgehen",
|
||||||
"alwaysDeny": "Zugriff blockieren",
|
"alwaysDeny": "Zugriff blockieren",
|
||||||
"passToAuth": "Weiterleiten zur Authentifizierung",
|
"passToAuth": "Weiterleiten zur Authentifizierung",
|
||||||
"orgSettingsDescription": "Organisationseinstellungen konfigurieren",
|
"orgSettingsDescription": "Organisationseinstellungen konfigurieren",
|
||||||
@@ -274,7 +274,7 @@
|
|||||||
"saveGeneralSettings": "Allgemeine Einstellungen speichern",
|
"saveGeneralSettings": "Allgemeine Einstellungen speichern",
|
||||||
"saveSettings": "Einstellungen speichern",
|
"saveSettings": "Einstellungen speichern",
|
||||||
"orgDangerZone": "Gefahrenzone",
|
"orgDangerZone": "Gefahrenzone",
|
||||||
"orgDangerZoneDescription": "Sobald Sie diesen Org löschen, gibt es kein Zurück mehr. Bitte seien Sie vorsichtig.",
|
"orgDangerZoneDescription": "Sobald Sie diese Organisation löschen, gibt es kein Zurück mehr. Bitte seien Sie vorsichtig.",
|
||||||
"orgDelete": "Organisation löschen",
|
"orgDelete": "Organisation löschen",
|
||||||
"orgDeleteConfirm": "Organisation löschen bestätigen",
|
"orgDeleteConfirm": "Organisation löschen bestätigen",
|
||||||
"orgMessageRemove": "Diese Aktion ist unwiderruflich und löscht alle zugehörigen Daten.",
|
"orgMessageRemove": "Diese Aktion ist unwiderruflich und löscht alle zugehörigen Daten.",
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
"accessApprovalsManage": "Genehmigungen verwalten",
|
"accessApprovalsManage": "Genehmigungen verwalten",
|
||||||
"accessApprovalsDescription": "Zeige und verwalte ausstehende Genehmigungen für den Zugriff auf diese Organisation",
|
"accessApprovalsDescription": "Zeige und verwalte ausstehende Genehmigungen für den Zugriff auf diese Organisation",
|
||||||
"description": "Beschreibung",
|
"description": "Beschreibung",
|
||||||
"inviteTitle": "Einladungen öffnen",
|
"inviteTitle": "Offene Einladungen",
|
||||||
"inviteDescription": "Einladungen für andere Benutzer verwalten, der Organisation beizutreten",
|
"inviteDescription": "Einladungen für andere Benutzer verwalten, der Organisation beizutreten",
|
||||||
"inviteSearch": "Einladungen suchen...",
|
"inviteSearch": "Einladungen suchen...",
|
||||||
"minutes": "Minuten",
|
"minutes": "Minuten",
|
||||||
@@ -370,12 +370,12 @@
|
|||||||
"apiKeysDescription": "API-Schlüssel werden zur Authentifizierung mit der Integrations-API verwendet",
|
"apiKeysDescription": "API-Schlüssel werden zur Authentifizierung mit der Integrations-API verwendet",
|
||||||
"provisioningKeysTitle": "Bereitstellungsschlüssel",
|
"provisioningKeysTitle": "Bereitstellungsschlüssel",
|
||||||
"provisioningKeysManage": "Bereitstellungsschlüssel verwalten",
|
"provisioningKeysManage": "Bereitstellungsschlüssel verwalten",
|
||||||
"provisioningKeysDescription": "Bereitstellungsschlüssel werden verwendet, um die automatisierte Bereitstellung von Seiten für Ihr Unternehmen zu authentifizieren.",
|
"provisioningKeysDescription": "Bereitstellungsschlüssel werden verwendet, um die automatisierte Bereitstellung von Standorten für Ihr Unternehmen zu authentifizieren.",
|
||||||
"provisioningManage": "Bereitstellung",
|
"provisioningManage": "Bereitstellung",
|
||||||
"provisioningDescription": "Bereitstellungsschlüssel verwalten und ausstehende Seiten prüfen, die noch auf Genehmigung warten.",
|
"provisioningDescription": "Bereitstellungsschlüssel verwalten und ausstehende Standorte prüfen, die noch auf Genehmigung warten.",
|
||||||
"pendingSites": "Ausstehende Seiten",
|
"pendingSites": "Ausstehende Standorte",
|
||||||
"siteApproveSuccess": "Site erfolgreich freigegeben",
|
"siteApproveSuccess": "Standort erfolgreich freigegeben",
|
||||||
"siteApproveError": "Fehler beim Bestätigen der Seite",
|
"siteApproveError": "Fehler beim Genehmigen des Standorts",
|
||||||
"provisioningKeys": "Bereitstellungsschlüssel",
|
"provisioningKeys": "Bereitstellungsschlüssel",
|
||||||
"searchProvisioningKeys": "Bereitstellungsschlüssel suchen...",
|
"searchProvisioningKeys": "Bereitstellungsschlüssel suchen...",
|
||||||
"provisioningKeysAdd": "Bereitstellungsschlüssel generieren",
|
"provisioningKeysAdd": "Bereitstellungsschlüssel generieren",
|
||||||
@@ -405,7 +405,7 @@
|
|||||||
"provisioningKeysNeverUsed": "Nie",
|
"provisioningKeysNeverUsed": "Nie",
|
||||||
"provisioningKeysEdit": "Bereitstellungsschlüssel bearbeiten",
|
"provisioningKeysEdit": "Bereitstellungsschlüssel bearbeiten",
|
||||||
"provisioningKeysEditDescription": "Aktualisieren Sie die maximale Batch-Größe und Ablaufzeit für diesen Schlüssel.",
|
"provisioningKeysEditDescription": "Aktualisieren Sie die maximale Batch-Größe und Ablaufzeit für diesen Schlüssel.",
|
||||||
"provisioningKeysApproveNewSites": "Neue Seiten genehmigen",
|
"provisioningKeysApproveNewSites": "Neuen Standort genehmigen",
|
||||||
"provisioningKeysApproveNewSitesDescription": "Sites, die sich mit diesem Schlüssel registrieren, automatisch freigeben.",
|
"provisioningKeysApproveNewSitesDescription": "Sites, die sich mit diesem Schlüssel registrieren, automatisch freigeben.",
|
||||||
"provisioningKeysUpdateError": "Fehler beim Aktualisieren des Bereitstellungsschlüssels",
|
"provisioningKeysUpdateError": "Fehler beim Aktualisieren des Bereitstellungsschlüssels",
|
||||||
"provisioningKeysUpdated": "Bereitstellungsschlüssel aktualisiert",
|
"provisioningKeysUpdated": "Bereitstellungsschlüssel aktualisiert",
|
||||||
@@ -413,8 +413,8 @@
|
|||||||
"provisioningKeysBannerTitle": "Website-Bereitstellungsschlüssel",
|
"provisioningKeysBannerTitle": "Website-Bereitstellungsschlüssel",
|
||||||
"provisioningKeysBannerDescription": "Generieren Sie einen Bereitstellungsschlüssel und verwenden Sie ihn mit dem Newt-Connector, um Standorte beim ersten Start automatisch zu erstellen - keine Notwendigkeit, separate Anmeldedaten für jede Seite einzurichten.",
|
"provisioningKeysBannerDescription": "Generieren Sie einen Bereitstellungsschlüssel und verwenden Sie ihn mit dem Newt-Connector, um Standorte beim ersten Start automatisch zu erstellen - keine Notwendigkeit, separate Anmeldedaten für jede Seite einzurichten.",
|
||||||
"provisioningKeysBannerButtonText": "Mehr erfahren",
|
"provisioningKeysBannerButtonText": "Mehr erfahren",
|
||||||
"pendingSitesBannerTitle": "Ausstehende Seiten",
|
"pendingSitesBannerTitle": "Ausstehende Standorte",
|
||||||
"pendingSitesBannerDescription": "Websites, die mit einem Bereitstellungsschlüssel verbunden sind, erscheinen hier zur Überprüfung.",
|
"pendingSitesBannerDescription": "Standorte, die mit einem Bereitstellungsschlüssel verbunden sind, erscheinen hier zur Überprüfung.",
|
||||||
"pendingSitesBannerButtonText": "Mehr erfahren",
|
"pendingSitesBannerButtonText": "Mehr erfahren",
|
||||||
"apiKeysSettings": "{apiKeyName} Einstellungen",
|
"apiKeysSettings": "{apiKeyName} Einstellungen",
|
||||||
"userTitle": "Alle Benutzer verwalten",
|
"userTitle": "Alle Benutzer verwalten",
|
||||||
@@ -461,7 +461,7 @@
|
|||||||
"licenseActivateKeyDescription": "Geben Sie einen Lizenzschlüssel ein, um ihn zu aktivieren.",
|
"licenseActivateKeyDescription": "Geben Sie einen Lizenzschlüssel ein, um ihn zu aktivieren.",
|
||||||
"licenseActivate": "Lizenz aktivieren",
|
"licenseActivate": "Lizenz aktivieren",
|
||||||
"licenseAgreement": "Durch Ankreuzung dieses Kästchens bestätigen Sie, dass Sie die Lizenzbedingungen gelesen und akzeptiert haben, die mit dem Lizenzschlüssel in Verbindung stehen.",
|
"licenseAgreement": "Durch Ankreuzung dieses Kästchens bestätigen Sie, dass Sie die Lizenzbedingungen gelesen und akzeptiert haben, die mit dem Lizenzschlüssel in Verbindung stehen.",
|
||||||
"fossorialLicense": "Fossorial Gewerbelizenz & Abonnementbedingungen anzeigen",
|
"fossorialLicense": "Kommerzielle Fossorial-Lizenz und Abonnementbedingungen anzeigen",
|
||||||
"licenseMessageRemove": "Dadurch werden der Lizenzschlüssel und alle zugehörigen Berechtigungen entfernt.",
|
"licenseMessageRemove": "Dadurch werden der Lizenzschlüssel und alle zugehörigen Berechtigungen entfernt.",
|
||||||
"licenseMessageConfirm": "Um zu bestätigen, geben Sie bitte den Lizenzschlüssel unten ein.",
|
"licenseMessageConfirm": "Um zu bestätigen, geben Sie bitte den Lizenzschlüssel unten ein.",
|
||||||
"licenseQuestionRemove": "Sind Sie sicher, dass Sie den Lizenzschlüssel löschen möchten?",
|
"licenseQuestionRemove": "Sind Sie sicher, dass Sie den Lizenzschlüssel löschen möchten?",
|
||||||
@@ -481,7 +481,7 @@
|
|||||||
"licensePurchaseSites": "Zusätzliche Standorte kaufen\n",
|
"licensePurchaseSites": "Zusätzliche Standorte kaufen\n",
|
||||||
"licenseSitesUsedMax": "{usedSites} von {maxSites} Standorten verwendet",
|
"licenseSitesUsedMax": "{usedSites} von {maxSites} Standorten verwendet",
|
||||||
"licenseSitesUsed": "{count, plural, =0 {# Standorte} one {# Standort} other {# Standorte}} im System.",
|
"licenseSitesUsed": "{count, plural, =0 {# Standorte} one {# Standort} other {# Standorte}} im System.",
|
||||||
"licensePurchaseDescription": "Wähle aus, für wieviele Seiten du möchtest {selectedMode, select, license {kaufe eine Lizenz. Du kannst später immer weitere Seiten hinzufügen.} other {Füge zu deiner bestehenden Lizenz hinzu.}}",
|
"licensePurchaseDescription": "Wähle aus, für wie viele Standorte du möchtest {selectedMode, select, license {kaufe eine Lizenz. Du kannst später immer weitere Standorte hinzufügen.} other {Füge zu deiner bestehenden Lizenz hinzu.}}",
|
||||||
"licenseFee": "Lizenzgebühr",
|
"licenseFee": "Lizenzgebühr",
|
||||||
"licensePriceSite": "Preis pro Standort",
|
"licensePriceSite": "Preis pro Standort",
|
||||||
"total": "Gesamt",
|
"total": "Gesamt",
|
||||||
@@ -532,7 +532,7 @@
|
|||||||
"userRemoveOrgConfirmSelf": "Entfernung bestätigen",
|
"userRemoveOrgConfirmSelf": "Entfernung bestätigen",
|
||||||
"userRemoveOrgSelf": "Sich selbst aus der Organisation entfernen",
|
"userRemoveOrgSelf": "Sich selbst aus der Organisation entfernen",
|
||||||
"userRemoveOrgSelfWarning": "Sie verlieren sofort den Zugriff auf diese Organisation.",
|
"userRemoveOrgSelfWarning": "Sie verlieren sofort den Zugriff auf diese Organisation.",
|
||||||
"userRemoveOrgConfirmPhraseSelf": "ENTFERNUNG MICH SELBST AUS DER ORGANISATION",
|
"userRemoveOrgConfirmPhraseSelf": "MICH SELBST AUS DER ORGANISATION ENTFERNEN",
|
||||||
"users": "Benutzer",
|
"users": "Benutzer",
|
||||||
"accessRoleMember": "Mitglied",
|
"accessRoleMember": "Mitglied",
|
||||||
"accessRoleOwner": "Eigentümer",
|
"accessRoleOwner": "Eigentümer",
|
||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Erstellt am",
|
"createdAt": "Erstellt am",
|
||||||
"proxyErrorInvalidHeader": "Ungültiger benutzerdefinierter Host-Header-Wert. Verwenden Sie das Domain-Namensformat oder speichern Sie leer, um den benutzerdefinierten Host-Header zu deaktivieren.",
|
"proxyErrorInvalidHeader": "Ungültiger benutzerdefinierter Host-Header-Wert. Verwenden Sie das Domain-Namensformat oder speichern Sie leer, um den benutzerdefinierten Host-Header zu deaktivieren.",
|
||||||
"proxyErrorTls": "Ungültiger TLS-Servername. Verwenden Sie das Domain-Namensformat oder speichern Sie leer, um den TLS-Servernamen zu entfernen.",
|
"proxyErrorTls": "Ungültiger TLS-Servername. Verwenden Sie das Domain-Namensformat oder speichern Sie leer, um den TLS-Servernamen zu entfernen.",
|
||||||
"proxyEnableSSL": "TLS aktivieren",
|
"proxyEnableSSL": "SSL aktivieren",
|
||||||
"proxyEnableSSLDescription": "Aktiviere SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zu den Zielen.",
|
"proxyEnableSSLDescription": "Aktiviere SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zu den Zielen.",
|
||||||
"target": "Ziel",
|
"target": "Ziel",
|
||||||
"configureTarget": "Ziele konfigurieren",
|
"configureTarget": "Ziele konfigurieren",
|
||||||
@@ -1711,11 +1711,11 @@
|
|||||||
"regionSelectorComingSoon": "Kommt bald",
|
"regionSelectorComingSoon": "Kommt bald",
|
||||||
"billingLoadingSubscription": "Abonnement wird geladen...",
|
"billingLoadingSubscription": "Abonnement wird geladen...",
|
||||||
"billingFreeTier": "Kostenlose Stufe",
|
"billingFreeTier": "Kostenlose Stufe",
|
||||||
"billingWarningOverLimit": "Warnung: Sie haben ein oder mehrere Nutzungslimits überschritten. Ihre Webseiten werden nicht verbunden, bis Sie Ihr Abonnement ändern oder Ihren Verbrauch anpassen.",
|
"billingWarningOverLimit": "Warnung: Sie haben ein oder mehrere Nutzungslimits überschritten. Ihre Standorte werden nicht verbunden, bis Sie Ihr Abonnement ändern oder Ihren Verbrauch anpassen.",
|
||||||
"billingUsageLimitsOverview": "Übersicht über Nutzungsgrenzen",
|
"billingUsageLimitsOverview": "Übersicht über Nutzungsgrenzen",
|
||||||
"billingMonitorUsage": "Überwachen Sie Ihren Verbrauch im Vergleich zu konfigurierten Grenzwerten. Wenn Sie eine Erhöhung der Limits benötigen, kontaktieren Sie uns bitte support@pangolin.net.",
|
"billingMonitorUsage": "Überwachen Sie Ihren Verbrauch im Vergleich zu konfigurierten Grenzwerten. Wenn Sie eine Erhöhung der Limits benötigen, kontaktieren Sie uns bitte support@pangolin.net.",
|
||||||
"billingDataUsage": "Datenverbrauch",
|
"billingDataUsage": "Datenverbrauch",
|
||||||
"billingSites": "Seiten",
|
"billingSites": "Standorte",
|
||||||
"billingUsers": "Benutzergeräte",
|
"billingUsers": "Benutzergeräte",
|
||||||
"billingDomains": "Domänen",
|
"billingDomains": "Domänen",
|
||||||
"billingOrganizations": "Orden",
|
"billingOrganizations": "Orden",
|
||||||
@@ -1743,7 +1743,7 @@
|
|||||||
"billingCheckoutError": "Checkout-Fehler",
|
"billingCheckoutError": "Checkout-Fehler",
|
||||||
"billingFailedToGetPortalUrl": "Fehler beim Abrufen der Portal-URL",
|
"billingFailedToGetPortalUrl": "Fehler beim Abrufen der Portal-URL",
|
||||||
"billingPortalError": "Portalfehler",
|
"billingPortalError": "Portalfehler",
|
||||||
"billingDataUsageInfo": "Wenn Sie mit der Cloud verbunden sind, werden alle Daten über Ihre sicheren Tunnel belastet. Dies schließt eingehenden und ausgehenden Datenverkehr über alle Ihre Websites ein. Wenn Sie Ihr Limit erreichen, werden Ihre Seiten die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Daten werden nicht belastet, wenn Sie Knoten verwenden.",
|
"billingDataUsageInfo": "Wenn Sie mit der Cloud verbunden sind, werden alle Daten über Ihre sicheren Tunnel belastet. Dies schließt eingehenden und ausgehenden Datenverkehr über alle Ihre Standorte ein. Wenn Sie Ihr Limit erreichen, werden Ihre Standorte die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Daten werden nicht belastet, wenn Sie Knoten verwenden.",
|
||||||
"billingSInfo": "Anzahl der Sites die Sie verwenden können",
|
"billingSInfo": "Anzahl der Sites die Sie verwenden können",
|
||||||
"billingUsersInfo": "Wie viele Benutzer Sie verwenden können",
|
"billingUsersInfo": "Wie viele Benutzer Sie verwenden können",
|
||||||
"billingDomainInfo": "Wie viele Domains Sie verwenden können",
|
"billingDomainInfo": "Wie viele Domains Sie verwenden können",
|
||||||
@@ -1927,7 +1927,7 @@
|
|||||||
"configureHealthCheck": "Gesundheits-Check konfigurieren",
|
"configureHealthCheck": "Gesundheits-Check konfigurieren",
|
||||||
"configureHealthCheckDescription": "Richten Sie die Gesundheitsüberwachung für {target} ein",
|
"configureHealthCheckDescription": "Richten Sie die Gesundheitsüberwachung für {target} ein",
|
||||||
"enableHealthChecks": "Gesundheits-Checks aktivieren",
|
"enableHealthChecks": "Gesundheits-Checks aktivieren",
|
||||||
"healthCheckDisabledStateDescription": "Wenn deaktiviert, führt die Seite keine Gesundheitsprüfungen durch und der Zustand wird als unbekannt betrachtet.",
|
"healthCheckDisabledStateDescription": "Wenn deaktiviert, führt der Standort keine Gesundheitsprüfungen durch und der Zustand wird als unbekannt betrachtet.",
|
||||||
"enableHealthChecksDescription": "Überwachen Sie die Gesundheit dieses Ziels. Bei Bedarf können Sie einen anderen Endpunkt als das Ziel überwachen.",
|
"enableHealthChecksDescription": "Überwachen Sie die Gesundheit dieses Ziels. Bei Bedarf können Sie einen anderen Endpunkt als das Ziel überwachen.",
|
||||||
"healthScheme": "Methode",
|
"healthScheme": "Methode",
|
||||||
"healthSelectScheme": "Methode auswählen",
|
"healthSelectScheme": "Methode auswählen",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Schema",
|
"editInternalResourceDialogScheme": "Schema",
|
||||||
"editInternalResourceDialogEnableSsl": "TLS aktivieren",
|
"editInternalResourceDialogEnableSsl": "SSL aktivieren",
|
||||||
"editInternalResourceDialogEnableSslDescription": "SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zum Ziel aktivieren.",
|
"editInternalResourceDialogEnableSslDescription": "SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zum Ziel aktivieren.",
|
||||||
"editInternalResourceDialogDestination": "Ziel",
|
"editInternalResourceDialogDestination": "Ziel",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.",
|
"editInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Schema",
|
"scheme": "Schema",
|
||||||
"createInternalResourceDialogScheme": "Schema",
|
"createInternalResourceDialogScheme": "Schema",
|
||||||
"createInternalResourceDialogEnableSsl": "TLS aktivieren",
|
"createInternalResourceDialogEnableSsl": "SSL aktivieren",
|
||||||
"createInternalResourceDialogEnableSslDescription": "SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zum Ziel aktivieren.",
|
"createInternalResourceDialogEnableSslDescription": "SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zum Ziel aktivieren.",
|
||||||
"createInternalResourceDialogDestination": "Ziel",
|
"createInternalResourceDialogDestination": "Ziel",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.",
|
"createInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.",
|
||||||
@@ -2187,8 +2187,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"remoteExitNodeSelection": "Knotenauswahl",
|
"remoteExitNodeSelection": "Knotenauswahl",
|
||||||
"remoteExitNodeSelectionDescription": "Wählen Sie einen Knoten aus, durch den Traffic für diese lokale Seite geleitet werden soll",
|
"remoteExitNodeSelectionDescription": "Wählen Sie einen Knoten aus, durch den Traffic für diesen lokalen Standort geleitet werden soll",
|
||||||
"remoteExitNodeRequired": "Ein Knoten muss für lokale Seiten ausgewählt sein",
|
"remoteExitNodeRequired": "Ein Knoten muss für lokale Standorte ausgewählt sein",
|
||||||
"noRemoteExitNodesAvailable": "Keine Knoten verfügbar",
|
"noRemoteExitNodesAvailable": "Keine Knoten verfügbar",
|
||||||
"noRemoteExitNodesAvailableDescription": "Für diese Organisation sind keine Knoten verfügbar. Erstellen Sie zuerst einen Knoten, um lokale Standorte zu verwenden.",
|
"noRemoteExitNodesAvailableDescription": "Für diese Organisation sind keine Knoten verfügbar. Erstellen Sie zuerst einen Knoten, um lokale Standorte zu verwenden.",
|
||||||
"exitNode": "Exit-Node",
|
"exitNode": "Exit-Node",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Zuverlässiger und wartungsarmer Pangolin Server mit zusätzlichen Glocken und Pfeifen",
|
"description": "Zuverlässiger und wartungsarmer Pangolin Server mit zusätzlichen Glocken und Pfeifen",
|
||||||
"introTitle": "Verwalteter selbstgehosteter Pangolin",
|
"introTitle": "Verwalteter selbstgehosteter Pangolin",
|
||||||
"introDescription": "ist eine Deployment-Option, die für Personen konzipiert wurde, die Einfachheit und zusätzliche Zuverlässigkeit wünschen, während sie ihre Daten privat und selbstgehostet halten.",
|
"introDescription": "ist eine Deployment-Option, die für Personen konzipiert wurde, die Einfachheit und zusätzliche Zuverlässigkeit wünschen, während sie ihre Daten privat und selbstgehostet halten.",
|
||||||
"introDetail": "Mit dieser Option haben Sie immer noch Ihren eigenen Pangolin-Knoten – Ihre Tunnel, TLS-Terminierung und Traffic bleiben auf Ihrem Server. Der Unterschied besteht darin, dass Verwaltung und Überwachung über unser Cloud-Dashboard abgewickelt werden, das eine Reihe von Vorteilen freischaltet:",
|
"introDetail": "Mit dieser Option haben Sie immer noch Ihren eigenen Pangolin-Knoten – Ihre Tunnel, SSL-Terminierung und Traffic bleiben auf Ihrem Server. Der Unterschied besteht darin, dass Verwaltung und Überwachung über unser Cloud-Dashboard abgewickelt werden, das eine Reihe von Vorteilen freischaltet:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Einfachere Operationen",
|
"title": "Einfachere Operationen",
|
||||||
"description": "Sie brauchen keinen eigenen Mail-Server auszuführen oder komplexe Warnungen einzurichten. Sie erhalten Gesundheitschecks und Ausfallwarnungen aus dem Box."
|
"description": "Sie brauchen keinen eigenen Mail-Server auszuführen oder komplexe Warnungen einzurichten. Sie erhalten Gesundheitschecks und Ausfallwarnungen aus dem Box."
|
||||||
@@ -3235,7 +3235,7 @@
|
|||||||
"uptimeAddAlert": "Warnmeldung hinzufügen",
|
"uptimeAddAlert": "Warnmeldung hinzufügen",
|
||||||
"uptimeViewAlerts": "Warnungen anzeigen",
|
"uptimeViewAlerts": "Warnungen anzeigen",
|
||||||
"uptimeCreateEmailAlert": "E-Mail Alarm erstellen",
|
"uptimeCreateEmailAlert": "E-Mail Alarm erstellen",
|
||||||
"uptimeAlertDescriptionSite": "Werde per E-Mail benachrichtigt, wenn diese Seite offline oder wieder online ist.",
|
"uptimeAlertDescriptionSite": "Werde per E-Mail benachrichtigt, wenn dieser Standort offline oder wieder online ist.",
|
||||||
"uptimeAlertDescriptionResource": "Werde per E-Mail benachrichtigt, wenn diese Ressource offline oder wieder online ist.",
|
"uptimeAlertDescriptionResource": "Werde per E-Mail benachrichtigt, wenn diese Ressource offline oder wieder online ist.",
|
||||||
"uptimeAlertNamePlaceholder": "Alarmname",
|
"uptimeAlertNamePlaceholder": "Alarmname",
|
||||||
"uptimeAdditionalEmails": "Zusätzliche E-Mails",
|
"uptimeAdditionalEmails": "Zusätzliche E-Mails",
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Created At",
|
"createdAt": "Created At",
|
||||||
"proxyErrorInvalidHeader": "Invalid custom Host Header value. Use domain name format, or save empty to unset custom Host Header.",
|
"proxyErrorInvalidHeader": "Invalid custom Host Header value. Use domain name format, or save empty to unset custom Host Header.",
|
||||||
"proxyErrorTls": "Invalid TLS Server Name. Use domain name format, or save empty to remove the TLS Server Name.",
|
"proxyErrorTls": "Invalid TLS Server Name. Use domain name format, or save empty to remove the TLS Server Name.",
|
||||||
"proxyEnableSSL": "Enable TLS",
|
"proxyEnableSSL": "Enable SSL",
|
||||||
"proxyEnableSSLDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the targets.",
|
"proxyEnableSSLDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the targets.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Configure Targets",
|
"configureTarget": "Configure Targets",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Scheme",
|
"editInternalResourceDialogScheme": "Scheme",
|
||||||
"editInternalResourceDialogEnableSsl": "Enable TLS",
|
"editInternalResourceDialogEnableSsl": "Enable SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the destination.",
|
"editInternalResourceDialogEnableSslDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the destination.",
|
||||||
"editInternalResourceDialogDestination": "Destination",
|
"editInternalResourceDialogDestination": "Destination",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "The IP address or hostname of the resource on the site's network.",
|
"editInternalResourceDialogDestinationHostDescription": "The IP address or hostname of the resource on the site's network.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Scheme",
|
"scheme": "Scheme",
|
||||||
"createInternalResourceDialogScheme": "Scheme",
|
"createInternalResourceDialogScheme": "Scheme",
|
||||||
"createInternalResourceDialogEnableSsl": "Enable TLS",
|
"createInternalResourceDialogEnableSsl": "Enable SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the destination.",
|
"createInternalResourceDialogEnableSslDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the destination.",
|
||||||
"createInternalResourceDialogDestination": "Destination",
|
"createInternalResourceDialogDestination": "Destination",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "The IP address or hostname of the resource on the site's network.",
|
"createInternalResourceDialogDestinationHostDescription": "The IP address or hostname of the resource on the site's network.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "More reliable and low-maintenance self-hosted Pangolin server with extra bells and whistles",
|
"description": "More reliable and low-maintenance self-hosted Pangolin server with extra bells and whistles",
|
||||||
"introTitle": "Managed Self-Hosted Pangolin",
|
"introTitle": "Managed Self-Hosted Pangolin",
|
||||||
"introDescription": "is a deployment option designed for people who want simplicity and extra reliability while still keeping their data private and self-hosted.",
|
"introDescription": "is a deployment option designed for people who want simplicity and extra reliability while still keeping their data private and self-hosted.",
|
||||||
"introDetail": "With this option, you still run your own Pangolin node - your tunnels, TLS termination, and traffic all stay on your server. The difference is that management and monitoring are handled through our cloud dashboard, which unlocks a number of benefits:",
|
"introDetail": "With this option, you still run your own Pangolin node - your tunnels, SSL termination, and traffic all stay on your server. The difference is that management and monitoring are handled through our cloud dashboard, which unlocks a number of benefits:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Simpler operations",
|
"title": "Simpler operations",
|
||||||
"description": "No need to run your own mail server or set up complex alerting. You'll get health checks and downtime alerts out of the box."
|
"description": "No need to run your own mail server or set up complex alerting. You'll get health checks and downtime alerts out of the box."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Creado el",
|
"createdAt": "Creado el",
|
||||||
"proxyErrorInvalidHeader": "Valor de cabecera de host personalizado no válido. Utilice el formato de nombre de dominio, o guarde en blanco para desestablecer cabecera de host personalizada.",
|
"proxyErrorInvalidHeader": "Valor de cabecera de host personalizado no válido. Utilice el formato de nombre de dominio, o guarde en blanco para desestablecer cabecera de host personalizada.",
|
||||||
"proxyErrorTls": "Nombre de servidor TLS inválido. Utilice el formato de nombre de dominio o guarde en blanco para eliminar el nombre de servidor TLS.",
|
"proxyErrorTls": "Nombre de servidor TLS inválido. Utilice el formato de nombre de dominio o guarde en blanco para eliminar el nombre de servidor TLS.",
|
||||||
"proxyEnableSSL": "Activar TLS",
|
"proxyEnableSSL": "Activar SSL",
|
||||||
"proxyEnableSSLDescription": "Habilita el cifrado SSL/TLS para conexiones seguras HTTPS a los objetivos.",
|
"proxyEnableSSLDescription": "Habilita el cifrado SSL/TLS para conexiones seguras HTTPS a los objetivos.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Configurar objetivos",
|
"configureTarget": "Configurar objetivos",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Esquema",
|
"editInternalResourceDialogScheme": "Esquema",
|
||||||
"editInternalResourceDialogEnableSsl": "Activar TLS",
|
"editInternalResourceDialogEnableSsl": "Activar SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Habilitar cifrado SSL/TLS para conexiones HTTPS seguras al destino.",
|
"editInternalResourceDialogEnableSslDescription": "Habilitar cifrado SSL/TLS para conexiones HTTPS seguras al destino.",
|
||||||
"editInternalResourceDialogDestination": "Destino",
|
"editInternalResourceDialogDestination": "Destino",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.",
|
"editInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Esquema",
|
"scheme": "Esquema",
|
||||||
"createInternalResourceDialogScheme": "Esquema",
|
"createInternalResourceDialogScheme": "Esquema",
|
||||||
"createInternalResourceDialogEnableSsl": "Activar TLS",
|
"createInternalResourceDialogEnableSsl": "Activar SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Habilitar cifrado SSL/TLS para conexiones HTTPS seguras al destino.",
|
"createInternalResourceDialogEnableSslDescription": "Habilitar cifrado SSL/TLS para conexiones HTTPS seguras al destino.",
|
||||||
"createInternalResourceDialogDestination": "Destino",
|
"createInternalResourceDialogDestination": "Destino",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.",
|
"createInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Servidor Pangolin autoalojado más fiable y de bajo mantenimiento con campanas y silbidos extra",
|
"description": "Servidor Pangolin autoalojado más fiable y de bajo mantenimiento con campanas y silbidos extra",
|
||||||
"introTitle": "Pangolin autogestionado",
|
"introTitle": "Pangolin autogestionado",
|
||||||
"introDescription": "es una opción de despliegue diseñada para personas que quieren simplicidad y fiabilidad extra mientras mantienen sus datos privados y autoalojados.",
|
"introDescription": "es una opción de despliegue diseñada para personas que quieren simplicidad y fiabilidad extra mientras mantienen sus datos privados y autoalojados.",
|
||||||
"introDetail": "Con esta opción, todavía ejecuta su propio nodo Pangolin, sus túneles, terminación TLS y tráfico permanecen en su servidor. La diferencia es que la gestión y el control se gestionan a través de nuestro panel de control en la nube, que desbloquea una serie de ventajas:",
|
"introDetail": "Con esta opción, todavía ejecuta su propio nodo Pangolin, sus túneles, terminación SSL y tráfico permanecen en su servidor. La diferencia es que la gestión y el control se gestionan a través de nuestro panel de control en la nube, que desbloquea una serie de ventajas:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Operaciones simples",
|
"title": "Operaciones simples",
|
||||||
"description": "No necesitas ejecutar tu propio servidor de correo o configurar alertas complejas. Recibirás cheques de salud y alertas de tiempo de inactividad."
|
"description": "No necesitas ejecutar tu propio servidor de correo o configurar alertas complejas. Recibirás cheques de salud y alertas de tiempo de inactividad."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Créé le",
|
"createdAt": "Créé le",
|
||||||
"proxyErrorInvalidHeader": "Valeur d'en-tête Host personnalisée invalide. Utilisez le format de nom de domaine, ou laissez vide pour désactiver l'en-tête Host personnalisé.",
|
"proxyErrorInvalidHeader": "Valeur d'en-tête Host personnalisée invalide. Utilisez le format de nom de domaine, ou laissez vide pour désactiver l'en-tête Host personnalisé.",
|
||||||
"proxyErrorTls": "Nom de serveur TLS invalide. Utilisez le format de nom de domaine, ou laissez vide pour supprimer le nom de serveur TLS.",
|
"proxyErrorTls": "Nom de serveur TLS invalide. Utilisez le format de nom de domaine, ou laissez vide pour supprimer le nom de serveur TLS.",
|
||||||
"proxyEnableSSL": "Activer TLS",
|
"proxyEnableSSL": "Activer SSL",
|
||||||
"proxyEnableSSLDescription": "Activer le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers les cibles.",
|
"proxyEnableSSLDescription": "Activer le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers les cibles.",
|
||||||
"target": "Cible",
|
"target": "Cible",
|
||||||
"configureTarget": "Configurer les cibles",
|
"configureTarget": "Configurer les cibles",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Méthode HTTP",
|
"editInternalResourceDialogScheme": "Méthode HTTP",
|
||||||
"editInternalResourceDialogEnableSsl": "Activer TLS",
|
"editInternalResourceDialogEnableSsl": "Activer SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Activer le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers la destination.",
|
"editInternalResourceDialogEnableSslDescription": "Activer le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers la destination.",
|
||||||
"editInternalResourceDialogDestination": "Destination",
|
"editInternalResourceDialogDestination": "Destination",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.",
|
"editInternalResourceDialogDestinationHostDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Méthode HTTP",
|
"scheme": "Méthode HTTP",
|
||||||
"createInternalResourceDialogScheme": "Méthode HTTP",
|
"createInternalResourceDialogScheme": "Méthode HTTP",
|
||||||
"createInternalResourceDialogEnableSsl": "Activer TLS",
|
"createInternalResourceDialogEnableSsl": "Activer SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Activer le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers la destination.",
|
"createInternalResourceDialogEnableSslDescription": "Activer le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers la destination.",
|
||||||
"createInternalResourceDialogDestination": "Destination",
|
"createInternalResourceDialogDestination": "Destination",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.",
|
"createInternalResourceDialogDestinationHostDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Serveur Pangolin auto-hébergé avec des cloches et des sifflets supplémentaires",
|
"description": "Serveur Pangolin auto-hébergé avec des cloches et des sifflets supplémentaires",
|
||||||
"introTitle": "Pangolin auto-hébergé géré",
|
"introTitle": "Pangolin auto-hébergé géré",
|
||||||
"introDescription": "est une option de déploiement conçue pour les personnes qui veulent de la simplicité et de la fiabilité tout en gardant leurs données privées et auto-hébergées.",
|
"introDescription": "est une option de déploiement conçue pour les personnes qui veulent de la simplicité et de la fiabilité tout en gardant leurs données privées et auto-hébergées.",
|
||||||
"introDetail": "Avec cette option, vous exécutez toujours votre propre nœud Pangolin - vos tunnels, la terminaison TLS et le trafic restent sur votre serveur. La différence est que la gestion et la surveillance sont gérées via notre tableau de bord du cloud, qui déverrouille un certain nombre d'avantages :",
|
"introDetail": "Avec cette option, vous exécutez toujours votre propre nœud Pangolin - vos tunnels, la terminaison SSL et le trafic restent sur votre serveur. La différence est que la gestion et la surveillance sont gérées via notre tableau de bord du cloud, qui déverrouille un certain nombre d'avantages :",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Opérations plus simples",
|
"title": "Opérations plus simples",
|
||||||
"description": "Pas besoin de faire tourner votre propre serveur de messagerie ou de configurer des alertes complexes. Vous obtiendrez des contrôles de santé et des alertes de temps d'arrêt par la suite."
|
"description": "Pas besoin de faire tourner votre propre serveur de messagerie ou de configurer des alertes complexes. Vous obtiendrez des contrôles de santé et des alertes de temps d'arrêt par la suite."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Creato Il",
|
"createdAt": "Creato Il",
|
||||||
"proxyErrorInvalidHeader": "Valore dell'intestazione Host personalizzata non valido. Usa il formato nome dominio o salva vuoto per rimuovere l'intestazione Host personalizzata.",
|
"proxyErrorInvalidHeader": "Valore dell'intestazione Host personalizzata non valido. Usa il formato nome dominio o salva vuoto per rimuovere l'intestazione Host personalizzata.",
|
||||||
"proxyErrorTls": "Nome Server TLS non valido. Usa il formato nome dominio o salva vuoto per rimuovere il Nome Server TLS.",
|
"proxyErrorTls": "Nome Server TLS non valido. Usa il formato nome dominio o salva vuoto per rimuovere il Nome Server TLS.",
|
||||||
"proxyEnableSSL": "Abilita TLS",
|
"proxyEnableSSL": "Abilita SSL",
|
||||||
"proxyEnableSSLDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure alle risorse interne target.",
|
"proxyEnableSSLDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure alle risorse interne target.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Configura Risorse Interne",
|
"configureTarget": "Configura Risorse Interne",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Metodo HTTP",
|
"editInternalResourceDialogScheme": "Metodo HTTP",
|
||||||
"editInternalResourceDialogEnableSsl": "Abilitare TLS",
|
"editInternalResourceDialogEnableSsl": "Abilitare SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure alla destinazione.",
|
"editInternalResourceDialogEnableSslDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure alla destinazione.",
|
||||||
"editInternalResourceDialogDestination": "Destinazione",
|
"editInternalResourceDialogDestination": "Destinazione",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "L'indirizzo IP o il nome host della risorsa nella rete del sito.",
|
"editInternalResourceDialogDestinationHostDescription": "L'indirizzo IP o il nome host della risorsa nella rete del sito.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Metodo HTTP",
|
"scheme": "Metodo HTTP",
|
||||||
"createInternalResourceDialogScheme": "Metodo HTTP",
|
"createInternalResourceDialogScheme": "Metodo HTTP",
|
||||||
"createInternalResourceDialogEnableSsl": "Abilitare TLS",
|
"createInternalResourceDialogEnableSsl": "Abilitare SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure alla destinazione.",
|
"createInternalResourceDialogEnableSslDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure alla destinazione.",
|
||||||
"createInternalResourceDialogDestination": "Destinazione",
|
"createInternalResourceDialogDestination": "Destinazione",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "L'indirizzo IP o il nome host della risorsa nella rete del sito.",
|
"createInternalResourceDialogDestinationHostDescription": "L'indirizzo IP o il nome host della risorsa nella rete del sito.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Server Pangolin self-hosted più affidabile e a bassa manutenzione con campanelli e fischietti extra",
|
"description": "Server Pangolin self-hosted più affidabile e a bassa manutenzione con campanelli e fischietti extra",
|
||||||
"introTitle": "Managed Self-Hosted Pangolin",
|
"introTitle": "Managed Self-Hosted Pangolin",
|
||||||
"introDescription": "è un'opzione di distribuzione progettata per le persone che vogliono la semplicità e l'affidabilità extra mantenendo i loro dati privati e self-hosted.",
|
"introDescription": "è un'opzione di distribuzione progettata per le persone che vogliono la semplicità e l'affidabilità extra mantenendo i loro dati privati e self-hosted.",
|
||||||
"introDetail": "Con questa opzione, esegui ancora il tuo nodo Pangolin - i tunnel, la terminazione TLS e il traffico rimangono tutti sul tuo server. La differenza è che la gestione e il monitoraggio sono gestiti attraverso il nostro cruscotto cloud, che sblocca una serie di vantaggi:",
|
"introDetail": "Con questa opzione, esegui ancora il tuo nodo Pangolin - i tunnel, la terminazione SSL e il traffico rimangono tutti sul tuo server. La differenza è che la gestione e il monitoraggio sono gestiti attraverso il nostro cruscotto cloud, che sblocca una serie di vantaggi:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Operazioni più semplici",
|
"title": "Operazioni più semplici",
|
||||||
"description": "Non è necessario eseguire il proprio server di posta o impostare un avviso complesso. Otterrai controlli di salute e avvisi di inattività fuori dalla casella."
|
"description": "Non è necessario eseguire il proprio server di posta o impostare un avviso complesso. Otterrai controlli di salute e avvisi di inattività fuori dalla casella."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "생성일",
|
"createdAt": "생성일",
|
||||||
"proxyErrorInvalidHeader": "잘못된 사용자 정의 호스트 헤더 값입니다. 도메인 이름 형식을 사용하거나 사용자 정의 호스트 헤더를 해제하려면 비워 두십시오.",
|
"proxyErrorInvalidHeader": "잘못된 사용자 정의 호스트 헤더 값입니다. 도메인 이름 형식을 사용하거나 사용자 정의 호스트 헤더를 해제하려면 비워 두십시오.",
|
||||||
"proxyErrorTls": "유효하지 않은 TLS 서버 이름입니다. 도메인 이름 형식을 사용하거나 비워 두어 TLS 서버 이름을 제거하십시오.",
|
"proxyErrorTls": "유효하지 않은 TLS 서버 이름입니다. 도메인 이름 형식을 사용하거나 비워 두어 TLS 서버 이름을 제거하십시오.",
|
||||||
"proxyEnableSSL": "TLS 활성화",
|
"proxyEnableSSL": "SSL 활성화",
|
||||||
"proxyEnableSSLDescription": "타겟과의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화를 활성화하세요.",
|
"proxyEnableSSLDescription": "타겟과의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화를 활성화하세요.",
|
||||||
"target": "대상",
|
"target": "대상",
|
||||||
"configureTarget": "대상 구성",
|
"configureTarget": "대상 구성",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "스킴",
|
"editInternalResourceDialogScheme": "스킴",
|
||||||
"editInternalResourceDialogEnableSsl": "TLS 활성화",
|
"editInternalResourceDialogEnableSsl": "SSL 활성화",
|
||||||
"editInternalResourceDialogEnableSslDescription": "목적지로의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화 활성화.",
|
"editInternalResourceDialogEnableSslDescription": "목적지로의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화 활성화.",
|
||||||
"editInternalResourceDialogDestination": "대상지",
|
"editInternalResourceDialogDestination": "대상지",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.",
|
"editInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "스킴",
|
"scheme": "스킴",
|
||||||
"createInternalResourceDialogScheme": "스킴",
|
"createInternalResourceDialogScheme": "스킴",
|
||||||
"createInternalResourceDialogEnableSsl": "TLS 활성화",
|
"createInternalResourceDialogEnableSsl": "SSL 활성화",
|
||||||
"createInternalResourceDialogEnableSslDescription": "목적지로의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화 활성화.",
|
"createInternalResourceDialogEnableSslDescription": "목적지로의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화 활성화.",
|
||||||
"createInternalResourceDialogDestination": "대상지",
|
"createInternalResourceDialogDestination": "대상지",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.",
|
"createInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "더 신뢰할 수 있고 낮은 유지보수의 자체 호스팅 팡골린 서버, 추가 기능 포함",
|
"description": "더 신뢰할 수 있고 낮은 유지보수의 자체 호스팅 팡골린 서버, 추가 기능 포함",
|
||||||
"introTitle": "관리 자체 호스팅 팡골린",
|
"introTitle": "관리 자체 호스팅 팡골린",
|
||||||
"introDescription": "는 자신의 데이터를 프라이빗하고 자체 호스팅을 유지하면서 더 간단하고 추가적인 신뢰성을 원하는 사람들을 위한 배포 옵션입니다.",
|
"introDescription": "는 자신의 데이터를 프라이빗하고 자체 호스팅을 유지하면서 더 간단하고 추가적인 신뢰성을 원하는 사람들을 위한 배포 옵션입니다.",
|
||||||
"introDetail": "이 옵션을 사용하면 여전히 자신의 팡골린 노드를 운영하고 - 터널, TLS 종료 및 트래픽 모두 서버에 유지됩니다. 차이점은 관리 및 모니터링이 클라우드 대시보드를 통해 처리되어 여러 혜택을 제공합니다.",
|
"introDetail": "이 옵션을 사용하면 여전히 자신의 팡골린 노드를 운영하고 - 터널, SSL 종료 및 트래픽 모두 서버에 유지됩니다. 차이점은 관리 및 모니터링이 클라우드 대시보드를 통해 처리되어 여러 혜택을 제공합니다.",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "더 간단한 운영",
|
"title": "더 간단한 운영",
|
||||||
"description": "자체 메일 서버를 운영하거나 복잡한 경고를 설정할 필요가 없습니다. 기본적으로 상태 점검 및 다운타임 경고를 받을 수 있습니다."
|
"description": "자체 메일 서버를 운영하거나 복잡한 경고를 설정할 필요가 없습니다. 기본적으로 상태 점검 및 다운타임 경고를 받을 수 있습니다."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Opprettet",
|
"createdAt": "Opprettet",
|
||||||
"proxyErrorInvalidHeader": "Ugyldig verdi for egendefinert vertsoverskrift. Bruk domenenavnformat, eller lagre tomt for å fjerne den egendefinerte vertsoverskriften.",
|
"proxyErrorInvalidHeader": "Ugyldig verdi for egendefinert vertsoverskrift. Bruk domenenavnformat, eller lagre tomt for å fjerne den egendefinerte vertsoverskriften.",
|
||||||
"proxyErrorTls": "Ugyldig TLS-servernavn. Bruk domenenavnformat, eller la stå tomt for å fjerne TLS-servernavnet.",
|
"proxyErrorTls": "Ugyldig TLS-servernavn. Bruk domenenavnformat, eller la stå tomt for å fjerne TLS-servernavnet.",
|
||||||
"proxyEnableSSL": "Aktiver TLS",
|
"proxyEnableSSL": "Aktiver SSL",
|
||||||
"proxyEnableSSLDescription": "Aktivere SSL/TLS-kryptering for sikker HTTPS tilkobling til målene.",
|
"proxyEnableSSLDescription": "Aktivere SSL/TLS-kryptering for sikker HTTPS tilkobling til målene.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Konfigurer mål",
|
"configureTarget": "Konfigurer mål",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Skjema",
|
"editInternalResourceDialogScheme": "Skjema",
|
||||||
"editInternalResourceDialogEnableSsl": "Aktiver TLS",
|
"editInternalResourceDialogEnableSsl": "Aktiver SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Aktiver SSL/TLS-kryptering for sikre HTTPS-tilkoblinger til destinasjonen.",
|
"editInternalResourceDialogEnableSslDescription": "Aktiver SSL/TLS-kryptering for sikre HTTPS-tilkoblinger til destinasjonen.",
|
||||||
"editInternalResourceDialogDestination": "Destinasjon",
|
"editInternalResourceDialogDestination": "Destinasjon",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.",
|
"editInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Skjema",
|
"scheme": "Skjema",
|
||||||
"createInternalResourceDialogScheme": "Skjema",
|
"createInternalResourceDialogScheme": "Skjema",
|
||||||
"createInternalResourceDialogEnableSsl": "Aktiver TLS",
|
"createInternalResourceDialogEnableSsl": "Aktiver SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Aktiver SSL/TLS-kryptering for sikre HTTPS-tilkoblinger til destinasjonen.",
|
"createInternalResourceDialogEnableSslDescription": "Aktiver SSL/TLS-kryptering for sikre HTTPS-tilkoblinger til destinasjonen.",
|
||||||
"createInternalResourceDialogDestination": "Destinasjon",
|
"createInternalResourceDialogDestination": "Destinasjon",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.",
|
"createInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Sikre og lavvedlikeholdsservere, selvbetjente Pangolin med ekstra klokker, og understell",
|
"description": "Sikre og lavvedlikeholdsservere, selvbetjente Pangolin med ekstra klokker, og understell",
|
||||||
"introTitle": "Administrert Self-Hosted Pangolin",
|
"introTitle": "Administrert Self-Hosted Pangolin",
|
||||||
"introDescription": "er et alternativ for bruk utviklet for personer som ønsker enkel og ekstra pålitelighet mens de fortsatt holder sine data privat og selvdrevne.",
|
"introDescription": "er et alternativ for bruk utviklet for personer som ønsker enkel og ekstra pålitelighet mens de fortsatt holder sine data privat og selvdrevne.",
|
||||||
"introDetail": "Med dette valget kjører du fortsatt din egen Pangolin-node - tunneler, TLS-terminering og trafikken ligger på serveren din. Forskjellen er at behandling og overvåking håndteres gjennom vårt skydashbord, som låser opp en rekke fordeler:",
|
"introDetail": "Med dette valget kjører du fortsatt din egen Pangolin-node - tunneler, SSL-terminering og trafikken ligger på serveren din. Forskjellen er at behandling og overvåking håndteres gjennom vårt skydashbord, som låser opp en rekke fordeler:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Enklere operasjoner",
|
"title": "Enklere operasjoner",
|
||||||
"description": "Ingen grunn til å kjøre din egen e-postserver eller sette opp kompleks varsling. Du vil få helsesjekk og nedetid varsler ut av boksen."
|
"description": "Ingen grunn til å kjøre din egen e-postserver eller sette opp kompleks varsling. Du vil få helsesjekk og nedetid varsler ut av boksen."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Aangemaakt op",
|
"createdAt": "Aangemaakt op",
|
||||||
"proxyErrorInvalidHeader": "Ongeldige aangepaste Header waarde. Gebruik het domeinnaam formaat, of sla leeg op om de aangepaste Host header ongedaan te maken.",
|
"proxyErrorInvalidHeader": "Ongeldige aangepaste Header waarde. Gebruik het domeinnaam formaat, of sla leeg op om de aangepaste Host header ongedaan te maken.",
|
||||||
"proxyErrorTls": "Ongeldige TLS servernaam. Gebruik de domeinnaam of sla leeg op om de TLS servernaam te verwijderen.",
|
"proxyErrorTls": "Ongeldige TLS servernaam. Gebruik de domeinnaam of sla leeg op om de TLS servernaam te verwijderen.",
|
||||||
"proxyEnableSSL": "TLS inschakelen",
|
"proxyEnableSSL": "SSL inschakelen",
|
||||||
"proxyEnableSSLDescription": "SSL/TLS-versleuteling inschakelen voor beveiligde HTTPS-verbindingen naar de doelen.",
|
"proxyEnableSSLDescription": "SSL/TLS-versleuteling inschakelen voor beveiligde HTTPS-verbindingen naar de doelen.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Doelstellingen configureren",
|
"configureTarget": "Doelstellingen configureren",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Schema",
|
"editInternalResourceDialogScheme": "Schema",
|
||||||
"editInternalResourceDialogEnableSsl": "TLS inschakelen",
|
"editInternalResourceDialogEnableSsl": "SSL inschakelen",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Schakel SSL/TLS-encryptie in voor beveiligde HTTPS-verbindingen met de bestemming.",
|
"editInternalResourceDialogEnableSslDescription": "Schakel SSL/TLS-encryptie in voor beveiligde HTTPS-verbindingen met de bestemming.",
|
||||||
"editInternalResourceDialogDestination": "Bestemming",
|
"editInternalResourceDialogDestination": "Bestemming",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.",
|
"editInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Schema",
|
"scheme": "Schema",
|
||||||
"createInternalResourceDialogScheme": "Schema",
|
"createInternalResourceDialogScheme": "Schema",
|
||||||
"createInternalResourceDialogEnableSsl": "TLS inschakelen",
|
"createInternalResourceDialogEnableSsl": "SSL inschakelen",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Schakel SSL/TLS-encryptie in voor beveiligde HTTPS-verbindingen met de bestemming.",
|
"createInternalResourceDialogEnableSslDescription": "Schakel SSL/TLS-encryptie in voor beveiligde HTTPS-verbindingen met de bestemming.",
|
||||||
"createInternalResourceDialogDestination": "Bestemming",
|
"createInternalResourceDialogDestination": "Bestemming",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.",
|
"createInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "betrouwbaardere en slecht onderhouden Pangolin server met extra klokken en klokkenluiders",
|
"description": "betrouwbaardere en slecht onderhouden Pangolin server met extra klokken en klokkenluiders",
|
||||||
"introTitle": "Beheerde zelfgehoste pangolin",
|
"introTitle": "Beheerde zelfgehoste pangolin",
|
||||||
"introDescription": "is een implementatieoptie ontworpen voor mensen die eenvoud en extra betrouwbaarheid willen, terwijl hun gegevens privé en zelf georganiseerd blijven.",
|
"introDescription": "is een implementatieoptie ontworpen voor mensen die eenvoud en extra betrouwbaarheid willen, terwijl hun gegevens privé en zelf georganiseerd blijven.",
|
||||||
"introDetail": "Met deze optie beheert u nog steeds uw eigen Pangolin node - uw tunnels, TLS-verbinding en verkeer alles op uw server. Het verschil is dat beheer en monitoring worden behandeld via onze cloud dashboard, wat een aantal voordelen oplevert:",
|
"introDetail": "Met deze optie beheert u nog steeds uw eigen Pangolin node - uw tunnels, SSL-verbinding en verkeer alles op uw server. Het verschil is dat beheer en monitoring worden behandeld via onze cloud dashboard, wat een aantal voordelen oplevert:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Simpler operaties",
|
"title": "Simpler operaties",
|
||||||
"description": "Je hoeft geen eigen mailserver te draaien of complexe waarschuwingen in te stellen. Je krijgt gezondheidscontroles en downtime meldingen uit de box."
|
"description": "Je hoeft geen eigen mailserver te draaien of complexe waarschuwingen in te stellen. Je krijgt gezondheidscontroles en downtime meldingen uit de box."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Utworzono",
|
"createdAt": "Utworzono",
|
||||||
"proxyErrorInvalidHeader": "Nieprawidłowa wartość niestandardowego nagłówka hosta. Użyj formatu nazwy domeny lub zapisz pusty, aby usunąć niestandardowy nagłówek hosta.",
|
"proxyErrorInvalidHeader": "Nieprawidłowa wartość niestandardowego nagłówka hosta. Użyj formatu nazwy domeny lub zapisz pusty, aby usunąć niestandardowy nagłówek hosta.",
|
||||||
"proxyErrorTls": "Nieprawidłowa nazwa serwera TLS. Użyj formatu nazwy domeny lub zapisz pusty, aby usunąć nazwę serwera TLS.",
|
"proxyErrorTls": "Nieprawidłowa nazwa serwera TLS. Użyj formatu nazwy domeny lub zapisz pusty, aby usunąć nazwę serwera TLS.",
|
||||||
"proxyEnableSSL": "Włącz TLS",
|
"proxyEnableSSL": "Włącz SSL",
|
||||||
"proxyEnableSSLDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z celami.",
|
"proxyEnableSSLDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z celami.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Konfiguruj Targety",
|
"configureTarget": "Konfiguruj Targety",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Schemat",
|
"editInternalResourceDialogScheme": "Schemat",
|
||||||
"editInternalResourceDialogEnableSsl": "Włącz TLS",
|
"editInternalResourceDialogEnableSsl": "Włącz SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z miejscem docelowym.",
|
"editInternalResourceDialogEnableSslDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z miejscem docelowym.",
|
||||||
"editInternalResourceDialogDestination": "Miejsce docelowe",
|
"editInternalResourceDialogDestination": "Miejsce docelowe",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.",
|
"editInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Schemat",
|
"scheme": "Schemat",
|
||||||
"createInternalResourceDialogScheme": "Schemat",
|
"createInternalResourceDialogScheme": "Schemat",
|
||||||
"createInternalResourceDialogEnableSsl": "Włącz TLS",
|
"createInternalResourceDialogEnableSsl": "Włącz SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z miejscem docelowym.",
|
"createInternalResourceDialogEnableSslDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z miejscem docelowym.",
|
||||||
"createInternalResourceDialogDestination": "Miejsce docelowe",
|
"createInternalResourceDialogDestination": "Miejsce docelowe",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.",
|
"createInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Większa niezawodność i niska konserwacja serwera Pangolin z dodatkowymi dzwonkami i sygnałami",
|
"description": "Większa niezawodność i niska konserwacja serwera Pangolin z dodatkowymi dzwonkami i sygnałami",
|
||||||
"introTitle": "Zarządzany samowystarczalny Pangolin",
|
"introTitle": "Zarządzany samowystarczalny Pangolin",
|
||||||
"introDescription": "jest opcją wdrażania zaprojektowaną dla osób, które chcą prostoty i dodatkowej niezawodności, przy jednoczesnym utrzymaniu swoich danych prywatnych i samodzielnych.",
|
"introDescription": "jest opcją wdrażania zaprojektowaną dla osób, które chcą prostoty i dodatkowej niezawodności, przy jednoczesnym utrzymaniu swoich danych prywatnych i samodzielnych.",
|
||||||
"introDetail": "Z tą opcją nadal obsługujesz swój własny węzeł Pangolin - tunele, zakończenie TLS i ruch na Twoim serwerze. Różnica polega na tym, że zarządzanie i monitorowanie odbywa się za pomocą naszej tablicy rozdzielczej, która odblokowuje szereg korzyści:",
|
"introDetail": "Z tą opcją nadal obsługujesz swój własny węzeł Pangolin - tunele, zakończenie SSL i ruch na Twoim serwerze. Różnica polega na tym, że zarządzanie i monitorowanie odbywa się za pomocą naszej tablicy rozdzielczej, która odblokowuje szereg korzyści:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Uproszczone operacje",
|
"title": "Uproszczone operacje",
|
||||||
"description": "Nie ma potrzeby uruchamiania własnego serwera pocztowego lub ustawiania skomplikowanych powiadomień. Będziesz mieć kontrolę zdrowia i powiadomienia o przestoju."
|
"description": "Nie ma potrzeby uruchamiania własnego serwera pocztowego lub ustawiania skomplikowanych powiadomień. Będziesz mieć kontrolę zdrowia i powiadomienia o przestoju."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Criado Em",
|
"createdAt": "Criado Em",
|
||||||
"proxyErrorInvalidHeader": "Valor do cabeçalho Host personalizado inválido. Use o formato de nome de domínio ou salve vazio para remover o cabeçalho Host personalizado.",
|
"proxyErrorInvalidHeader": "Valor do cabeçalho Host personalizado inválido. Use o formato de nome de domínio ou salve vazio para remover o cabeçalho Host personalizado.",
|
||||||
"proxyErrorTls": "Nome do Servidor TLS inválido. Use o formato de nome de domínio ou salve vazio para remover o Nome do Servidor TLS.",
|
"proxyErrorTls": "Nome do Servidor TLS inválido. Use o formato de nome de domínio ou salve vazio para remover o Nome do Servidor TLS.",
|
||||||
"proxyEnableSSL": "Habilitar TLS",
|
"proxyEnableSSL": "Habilitar SSL",
|
||||||
"proxyEnableSSLDescription": "Habilitar criptografia SSL/TLS para conexões HTTPS seguras aos alvos.",
|
"proxyEnableSSLDescription": "Habilitar criptografia SSL/TLS para conexões HTTPS seguras aos alvos.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Configurar Alvos",
|
"configureTarget": "Configurar Alvos",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Esquema",
|
"editInternalResourceDialogScheme": "Esquema",
|
||||||
"editInternalResourceDialogEnableSsl": "Ativar TLS",
|
"editInternalResourceDialogEnableSsl": "Ativar SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Ativar criptografia SSL/TLS para conexões HTTPS seguras com o destino.",
|
"editInternalResourceDialogEnableSslDescription": "Ativar criptografia SSL/TLS para conexões HTTPS seguras com o destino.",
|
||||||
"editInternalResourceDialogDestination": "Destino",
|
"editInternalResourceDialogDestination": "Destino",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "O endereço IP ou o nome do host do recurso na rede do site.",
|
"editInternalResourceDialogDestinationHostDescription": "O endereço IP ou o nome do host do recurso na rede do site.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Esquema",
|
"scheme": "Esquema",
|
||||||
"createInternalResourceDialogScheme": "Esquema",
|
"createInternalResourceDialogScheme": "Esquema",
|
||||||
"createInternalResourceDialogEnableSsl": "Ativar TLS",
|
"createInternalResourceDialogEnableSsl": "Ativar SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Ativar criptografia SSL/TLS para conexões HTTPS seguras com o destino.",
|
"createInternalResourceDialogEnableSslDescription": "Ativar criptografia SSL/TLS para conexões HTTPS seguras com o destino.",
|
||||||
"createInternalResourceDialogDestination": "Destino",
|
"createInternalResourceDialogDestination": "Destino",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "O endereço IP ou o nome do host do recurso na rede do site.",
|
"createInternalResourceDialogDestinationHostDescription": "O endereço IP ou o nome do host do recurso na rede do site.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Servidor Pangolin auto-hospedado mais confiável e com baixa manutenção com sinos extras e assobiamentos",
|
"description": "Servidor Pangolin auto-hospedado mais confiável e com baixa manutenção com sinos extras e assobiamentos",
|
||||||
"introTitle": "Pangolin Auto-Hospedado Gerenciado",
|
"introTitle": "Pangolin Auto-Hospedado Gerenciado",
|
||||||
"introDescription": "é uma opção de implantação projetada para pessoas que querem simplicidade e confiança adicional, mantendo os seus dados privados e auto-hospedados.",
|
"introDescription": "é uma opção de implantação projetada para pessoas que querem simplicidade e confiança adicional, mantendo os seus dados privados e auto-hospedados.",
|
||||||
"introDetail": "Com esta opção, você ainda roda seu próprio nó Pangolin - seus túneis, terminação TLS e tráfego todos permanecem no seu servidor. A diferença é que a gestão e a monitorização são geridos através do nosso painel de nuvem, que desbloqueia vários benefícios:",
|
"introDetail": "Com esta opção, você ainda roda seu próprio nó Pangolin - seus túneis, terminação SSL e tráfego todos permanecem no seu servidor. A diferença é que a gestão e a monitorização são geridos através do nosso painel de nuvem, que desbloqueia vários benefícios:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Operações simples",
|
"title": "Operações simples",
|
||||||
"description": "Não é necessário executar o seu próprio servidor de e-mail ou configurar um alerta complexo. Você receberá fora de caixa verificações de saúde e alertas de tempo de inatividade."
|
"description": "Não é necessário executar o seu próprio servidor de e-mail ou configurar um alerta complexo. Você receberá fora de caixa verificações de saúde e alertas de tempo de inatividade."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Создано в",
|
"createdAt": "Создано в",
|
||||||
"proxyErrorInvalidHeader": "Неверное значение пользовательского заголовка Host. Используйте формат доменного имени или оставьте пустым для сброса пользовательского заголовка Host.",
|
"proxyErrorInvalidHeader": "Неверное значение пользовательского заголовка Host. Используйте формат доменного имени или оставьте пустым для сброса пользовательского заголовка Host.",
|
||||||
"proxyErrorTls": "Неверное имя TLS сервера. Используйте формат доменного имени или оставьте пустым для удаления имени TLS сервера.",
|
"proxyErrorTls": "Неверное имя TLS сервера. Используйте формат доменного имени или оставьте пустым для удаления имени TLS сервера.",
|
||||||
"proxyEnableSSL": "Включить TLS",
|
"proxyEnableSSL": "Включить SSL",
|
||||||
"proxyEnableSSLDescription": "Включить шифрование SSL/TLS для безопасных HTTPS соединений с целями.",
|
"proxyEnableSSLDescription": "Включить шифрование SSL/TLS для безопасных HTTPS соединений с целями.",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "Настроить адресаты",
|
"configureTarget": "Настроить адресаты",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Схема",
|
"editInternalResourceDialogScheme": "Схема",
|
||||||
"editInternalResourceDialogEnableSsl": "Включить TLS",
|
"editInternalResourceDialogEnableSsl": "Включить SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Включите шифрование SSL/TLS для защищенных HTTPS соединений с конечной точкой.",
|
"editInternalResourceDialogEnableSslDescription": "Включите шифрование SSL/TLS для защищенных HTTPS соединений с конечной точкой.",
|
||||||
"editInternalResourceDialogDestination": "Пункт назначения",
|
"editInternalResourceDialogDestination": "Пункт назначения",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "IP адрес или имя хоста ресурса в сети сайта.",
|
"editInternalResourceDialogDestinationHostDescription": "IP адрес или имя хоста ресурса в сети сайта.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Схема",
|
"scheme": "Схема",
|
||||||
"createInternalResourceDialogScheme": "Схема",
|
"createInternalResourceDialogScheme": "Схема",
|
||||||
"createInternalResourceDialogEnableSsl": "Включить TLS",
|
"createInternalResourceDialogEnableSsl": "Включить SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Включите SSL/TLS шифрование для защищенных HTTPS соединений с конечной точкой.",
|
"createInternalResourceDialogEnableSslDescription": "Включите SSL/TLS шифрование для защищенных HTTPS соединений с конечной точкой.",
|
||||||
"createInternalResourceDialogDestination": "Пункт назначения",
|
"createInternalResourceDialogDestination": "Пункт назначения",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "IP адрес или имя хоста ресурса в сети сайта.",
|
"createInternalResourceDialogDestinationHostDescription": "IP адрес или имя хоста ресурса в сети сайта.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Более надежный и низко обслуживаемый сервер Pangolin с дополнительными колокольнями и свистками",
|
"description": "Более надежный и низко обслуживаемый сервер Pangolin с дополнительными колокольнями и свистками",
|
||||||
"introTitle": "Управляемый Само-Хост Панголина",
|
"introTitle": "Управляемый Само-Хост Панголина",
|
||||||
"introDescription": "- это вариант развертывания, предназначенный для людей, которые хотят простоты и надёжности, сохраняя при этом свои данные конфиденциальными и самостоятельными.",
|
"introDescription": "- это вариант развертывания, предназначенный для людей, которые хотят простоты и надёжности, сохраняя при этом свои данные конфиденциальными и самостоятельными.",
|
||||||
"introDetail": "С помощью этой опции вы по-прежнему используете узел Pangolin - туннели, TLS, и весь остающийся на вашем сервере. Разница заключается в том, что управление и мониторинг осуществляются через нашу панель инструментов из облака, которая открывает ряд преимуществ:",
|
"introDetail": "С помощью этой опции вы по-прежнему используете узел Pangolin - туннели, SSL, и весь остающийся на вашем сервере. Разница заключается в том, что управление и мониторинг осуществляются через нашу панель инструментов из облака, которая открывает ряд преимуществ:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Более простые операции",
|
"title": "Более простые операции",
|
||||||
"description": "Не нужно запускать свой собственный почтовый сервер или настроить комплексное оповещение. Вы будете получать проверки состояния здоровья и оповещения о неисправностях из коробки."
|
"description": "Не нужно запускать свой собственный почтовый сервер или настроить комплексное оповещение. Вы будете получать проверки состояния здоровья и оповещения о неисправностях из коробки."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "Oluşturulma Tarihi",
|
"createdAt": "Oluşturulma Tarihi",
|
||||||
"proxyErrorInvalidHeader": "Geçersiz özel Ana Bilgisayar Başlığı değeri. Alan adı formatını kullanın veya özel Ana Bilgisayar Başlığını ayarlamak için boş bırakın.",
|
"proxyErrorInvalidHeader": "Geçersiz özel Ana Bilgisayar Başlığı değeri. Alan adı formatını kullanın veya özel Ana Bilgisayar Başlığını ayarlamak için boş bırakın.",
|
||||||
"proxyErrorTls": "Geçersiz TLS Sunucu Adı. Alan adı formatını kullanın veya TLS Sunucu Adını kaldırmak için boş bırakılsın.",
|
"proxyErrorTls": "Geçersiz TLS Sunucu Adı. Alan adı formatını kullanın veya TLS Sunucu Adını kaldırmak için boş bırakılsın.",
|
||||||
"proxyEnableSSL": "TLS Etkinleştir",
|
"proxyEnableSSL": "SSL Etkinleştir",
|
||||||
"proxyEnableSSLDescription": "Hedeflere güvenli HTTPS bağlantıları için SSL/TLS şifrelemesini etkinleştirin.",
|
"proxyEnableSSLDescription": "Hedeflere güvenli HTTPS bağlantıları için SSL/TLS şifrelemesini etkinleştirin.",
|
||||||
"target": "Hedef",
|
"target": "Hedef",
|
||||||
"configureTarget": "Hedefleri Yapılandır",
|
"configureTarget": "Hedefleri Yapılandır",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "Şema",
|
"editInternalResourceDialogScheme": "Şema",
|
||||||
"editInternalResourceDialogEnableSsl": "TLS Etkinleştir",
|
"editInternalResourceDialogEnableSsl": "SSL'i Etkinleştir",
|
||||||
"editInternalResourceDialogEnableSslDescription": "Hedefe güvenli HTTPS bağlantıları için SSL/TLS şifrelemeyi etkinleştirin.",
|
"editInternalResourceDialogEnableSslDescription": "Hedefe güvenli HTTPS bağlantıları için SSL/TLS şifrelemeyi etkinleştirin.",
|
||||||
"editInternalResourceDialogDestination": "Hedef",
|
"editInternalResourceDialogDestination": "Hedef",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "Site ağındaki kaynağın IP adresi veya ana bilgisayar adı.",
|
"editInternalResourceDialogDestinationHostDescription": "Site ağındaki kaynağın IP adresi veya ana bilgisayar adı.",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "Şema",
|
"scheme": "Şema",
|
||||||
"createInternalResourceDialogScheme": "Şema",
|
"createInternalResourceDialogScheme": "Şema",
|
||||||
"createInternalResourceDialogEnableSsl": "TLS'yi Etkinleştir",
|
"createInternalResourceDialogEnableSsl": "SSL'i Etkinleştir",
|
||||||
"createInternalResourceDialogEnableSslDescription": "Hedefe güvenli HTTPS bağlantıları için SSL/TLS şifrelemeyi etkinleştirin.",
|
"createInternalResourceDialogEnableSslDescription": "Hedefe güvenli HTTPS bağlantıları için SSL/TLS şifrelemeyi etkinleştirin.",
|
||||||
"createInternalResourceDialogDestination": "Hedef",
|
"createInternalResourceDialogDestination": "Hedef",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "Site ağındaki kaynağın IP adresi veya ana bilgisayar adı.",
|
"createInternalResourceDialogDestinationHostDescription": "Site ağındaki kaynağın IP adresi veya ana bilgisayar adı.",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "Daha güvenilir ve düşük bakım gerektiren, ekstra özelliklere sahip kendi kendine barındırabileceğiniz Pangolin sunucusu",
|
"description": "Daha güvenilir ve düşük bakım gerektiren, ekstra özelliklere sahip kendi kendine barındırabileceğiniz Pangolin sunucusu",
|
||||||
"introTitle": "Yönetilen Kendi Kendine Barındırılan Pangolin",
|
"introTitle": "Yönetilen Kendi Kendine Barındırılan Pangolin",
|
||||||
"introDescription": "Bu, basitlik ve ekstra güvenilirlik arayan, ancak verilerini gizli tutmak ve kendi sunucularında barındırmak isteyen kişiler için tasarlanmış bir dağıtım seçeneğidir.",
|
"introDescription": "Bu, basitlik ve ekstra güvenilirlik arayan, ancak verilerini gizli tutmak ve kendi sunucularında barındırmak isteyen kişiler için tasarlanmış bir dağıtım seçeneğidir.",
|
||||||
"introDetail": "Bu seçenekle, kendi Pangolin düğümünüzü çalıştırmaya devam edersiniz - tünelleriniz, TLS bitişiniz ve trafiğiniz tamamen sunucunuzda kalır. Fark, yönetim ve izlemeyi bulut panomuz üzerinden gerçekleştiririz, bu da bir dizi avantaj sağlar:",
|
"introDetail": "Bu seçenekle, kendi Pangolin düğümünüzü çalıştırmaya devam edersiniz - tünelleriniz, SSL bitişiniz ve trafiğiniz tamamen sunucunuzda kalır. Fark, yönetim ve izlemeyi bulut panomuz üzerinden gerçekleştiririz, bu da bir dizi avantaj sağlar:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "Daha basit işlemler",
|
"title": "Daha basit işlemler",
|
||||||
"description": "Kendi e-posta sunucunuzu çalıştırmanıza veya karmaşık uyarılar kurmanıza gerek yok. Sağlık kontrolleri ve kesinti uyarılarını kutudan çıktığı gibi alırsınız."
|
"description": "Kendi e-posta sunucunuzu çalıştırmanıza veya karmaşık uyarılar kurmanıza gerek yok. Sağlık kontrolleri ve kesinti uyarılarını kutudan çıktığı gibi alırsınız."
|
||||||
|
|||||||
@@ -630,7 +630,7 @@
|
|||||||
"createdAt": "创建于",
|
"createdAt": "创建于",
|
||||||
"proxyErrorInvalidHeader": "无效的自定义主机头值。使用域名格式,或将空保存为取消自定义主机头。",
|
"proxyErrorInvalidHeader": "无效的自定义主机头值。使用域名格式,或将空保存为取消自定义主机头。",
|
||||||
"proxyErrorTls": "无效的 TLS 服务器名称。使用域名格式,或保存空以删除 TLS 服务器名称。",
|
"proxyErrorTls": "无效的 TLS 服务器名称。使用域名格式,或保存空以删除 TLS 服务器名称。",
|
||||||
"proxyEnableSSL": "启用 TLS",
|
"proxyEnableSSL": "启用 SSL",
|
||||||
"proxyEnableSSLDescription": "启用 SSL/TLS 加密以确保目标的 HTTPS 连接。",
|
"proxyEnableSSLDescription": "启用 SSL/TLS 加密以确保目标的 HTTPS 连接。",
|
||||||
"target": "Target",
|
"target": "Target",
|
||||||
"configureTarget": "配置目标",
|
"configureTarget": "配置目标",
|
||||||
@@ -2050,7 +2050,7 @@
|
|||||||
"editInternalResourceDialogModeHttp": "HTTP",
|
"editInternalResourceDialogModeHttp": "HTTP",
|
||||||
"editInternalResourceDialogModeHttps": "HTTPS",
|
"editInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"editInternalResourceDialogScheme": "方案",
|
"editInternalResourceDialogScheme": "方案",
|
||||||
"editInternalResourceDialogEnableSsl": "启用 TLS",
|
"editInternalResourceDialogEnableSsl": "启用 SSL",
|
||||||
"editInternalResourceDialogEnableSslDescription": "为目标的安全 HTTPS 连接启用 SSL/TLS 加密。",
|
"editInternalResourceDialogEnableSslDescription": "为目标的安全 HTTPS 连接启用 SSL/TLS 加密。",
|
||||||
"editInternalResourceDialogDestination": "目标",
|
"editInternalResourceDialogDestination": "目标",
|
||||||
"editInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。",
|
"editInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。",
|
||||||
@@ -2100,7 +2100,7 @@
|
|||||||
"createInternalResourceDialogModeHttps": "HTTPS",
|
"createInternalResourceDialogModeHttps": "HTTPS",
|
||||||
"scheme": "方案",
|
"scheme": "方案",
|
||||||
"createInternalResourceDialogScheme": "方案",
|
"createInternalResourceDialogScheme": "方案",
|
||||||
"createInternalResourceDialogEnableSsl": "启用 TLS",
|
"createInternalResourceDialogEnableSsl": "启用 SSL",
|
||||||
"createInternalResourceDialogEnableSslDescription": "为目标的安全 HTTPS 连接启用 SSL/TLS 加密。",
|
"createInternalResourceDialogEnableSslDescription": "为目标的安全 HTTPS 连接启用 SSL/TLS 加密。",
|
||||||
"createInternalResourceDialogDestination": "目标",
|
"createInternalResourceDialogDestination": "目标",
|
||||||
"createInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。",
|
"createInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。",
|
||||||
@@ -2233,7 +2233,7 @@
|
|||||||
"description": "更可靠和低维护自我托管的 Pangolin 服务器,带有额外的铃声和告密器",
|
"description": "更可靠和低维护自我托管的 Pangolin 服务器,带有额外的铃声和告密器",
|
||||||
"introTitle": "托管自托管的潘戈林公司",
|
"introTitle": "托管自托管的潘戈林公司",
|
||||||
"introDescription": "这是一种部署选择,为那些希望简洁和额外可靠的人设计,同时仍然保持他们的数据的私密性和自我托管性。",
|
"introDescription": "这是一种部署选择,为那些希望简洁和额外可靠的人设计,同时仍然保持他们的数据的私密性和自我托管性。",
|
||||||
"introDetail": "通过此选项,您仍然运行您自己的 Pangolin 节点 - - 您的隧道、TLS 终止,并且流量在您的服务器上保持所有状态。 不同之处在于,管理和监测是通过我们的云层仪表板进行的,该仪表板开启了一些好处:",
|
"introDetail": "通过此选项,您仍然运行您自己的 Pangolin 节点 - - 您的隧道、SSL 终止,并且流量在您的服务器上保持所有状态。 不同之处在于,管理和监测是通过我们的云层仪表板进行的,该仪表板开启了一些好处:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "简单的操作",
|
"title": "简单的操作",
|
||||||
"description": "无需运行您自己的邮件服务器或设置复杂的警报。您将从方框中获得健康检查和下限提醒。"
|
"description": "无需运行您自己的邮件服务器或设置复杂的警报。您将从方框中获得健康检查和下限提醒。"
|
||||||
|
|||||||
@@ -489,7 +489,7 @@
|
|||||||
"createdAt": "創建於",
|
"createdAt": "創建於",
|
||||||
"proxyErrorInvalidHeader": "無效的自訂主機 Header。使用域名格式,或將空保存為取消自訂 Header。",
|
"proxyErrorInvalidHeader": "無效的自訂主機 Header。使用域名格式,或將空保存為取消自訂 Header。",
|
||||||
"proxyErrorTls": "無效的 TLS 伺服器名稱。使用域名格式,或保存空以刪除 TLS 伺服器名稱。",
|
"proxyErrorTls": "無效的 TLS 伺服器名稱。使用域名格式,或保存空以刪除 TLS 伺服器名稱。",
|
||||||
"proxyEnableSSL": "啟用 TLS",
|
"proxyEnableSSL": "啟用 SSL",
|
||||||
"proxyEnableSSLDescription": "啟用 SSL/TLS 加密以確保您目標的 HTTPS 連接。",
|
"proxyEnableSSLDescription": "啟用 SSL/TLS 加密以確保您目標的 HTTPS 連接。",
|
||||||
"target": "目標",
|
"target": "目標",
|
||||||
"configureTarget": "配置目標",
|
"configureTarget": "配置目標",
|
||||||
@@ -1763,7 +1763,7 @@
|
|||||||
"description": "更可靠、維護成本更低的自架 Pangolin 伺服器,並附帶額外的附加功能",
|
"description": "更可靠、維護成本更低的自架 Pangolin 伺服器,並附帶額外的附加功能",
|
||||||
"introTitle": "託管式自架 Pangolin",
|
"introTitle": "託管式自架 Pangolin",
|
||||||
"introDescription": "這是一種部署選擇,為那些希望簡潔和額外可靠的人設計,同時仍然保持他們的數據的私密性和自我託管性。",
|
"introDescription": "這是一種部署選擇,為那些希望簡潔和額外可靠的人設計,同時仍然保持他們的數據的私密性和自我託管性。",
|
||||||
"introDetail": "通過此選項,您仍然運行您自己的 Pangolin 節點 - - 您的隧道、TLS 終止,並且流量在您的伺服器上保持所有狀態。 不同之處在於,管理和監測是通過我們的雲層儀錶板進行的,該儀錶板開啟了一些好處:",
|
"introDetail": "通過此選項,您仍然運行您自己的 Pangolin 節點 - - 您的隧道、SSL 終止,並且流量在您的伺服器上保持所有狀態。 不同之處在於,管理和監測是通過我們的雲層儀錶板進行的,該儀錶板開啟了一些好處:",
|
||||||
"benefitSimplerOperations": {
|
"benefitSimplerOperations": {
|
||||||
"title": "簡單的操作",
|
"title": "簡單的操作",
|
||||||
"description": "無需運行您自己的郵件伺服器或設置複雜的警報。您將從方框中獲得健康檢查和下限提醒。"
|
"description": "無需運行您自己的郵件伺服器或設置複雜的警報。您將從方框中獲得健康檢查和下限提醒。"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
ExitNode
|
ExitNode
|
||||||
} from "@server/db";
|
} from "@server/db";
|
||||||
import { db } from "@server/db";
|
import { db } from "@server/db";
|
||||||
import { eq } from "drizzle-orm";
|
import { eq, inArray } from "drizzle-orm";
|
||||||
import HttpCode from "@server/types/HttpCode";
|
import HttpCode from "@server/types/HttpCode";
|
||||||
import createHttpError from "http-errors";
|
import createHttpError from "http-errors";
|
||||||
import logger from "@server/logger";
|
import logger from "@server/logger";
|
||||||
@@ -97,86 +97,119 @@ export async function generateRelayMappings(exitNode: ExitNode) {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize mappings object for multi-peer support
|
// Filter to sites with the required fields up front so the rest of the
|
||||||
const mappings: { [key: string]: ProxyMapping } = {};
|
// function can safely treat endpoint/subnet/listenPort as defined.
|
||||||
|
const validSites = sitesRes.filter(
|
||||||
// Process each site
|
(s) => s.endpoint && s.subnet && s.listenPort
|
||||||
for (const site of sitesRes) {
|
|
||||||
if (!site.endpoint || !site.subnet || !site.listenPort) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find all clients associated with this site through clientSites
|
|
||||||
const clientSitesRes = await db
|
|
||||||
.select()
|
|
||||||
.from(clientSitesAssociationsCache)
|
|
||||||
.where(eq(clientSitesAssociationsCache.siteId, site.siteId));
|
|
||||||
|
|
||||||
for (const clientSite of clientSitesRes) {
|
|
||||||
if (!clientSite.endpoint) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add this site as a destination for the client
|
|
||||||
if (!mappings[clientSite.endpoint]) {
|
|
||||||
mappings[clientSite.endpoint] = { destinations: [] };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add site as a destination for this client
|
|
||||||
const destination: PeerDestination = {
|
|
||||||
destinationIP: site.subnet.split("/")[0],
|
|
||||||
destinationPort: site.listenPort || 1 // this satisfies gerbil for now but should be reevaluated
|
|
||||||
};
|
|
||||||
|
|
||||||
// Check if this destination is already in the array to avoid duplicates
|
|
||||||
const isDuplicate = mappings[clientSite.endpoint].destinations.some(
|
|
||||||
(dest) =>
|
|
||||||
dest.destinationIP === destination.destinationIP &&
|
|
||||||
dest.destinationPort === destination.destinationPort
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!isDuplicate) {
|
if (validSites.length === 0) {
|
||||||
mappings[clientSite.endpoint].destinations.push(destination);
|
return {};
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also handle site-to-site communication (all sites in the same org)
|
const siteIds = validSites.map((s) => s.siteId);
|
||||||
if (site.orgId) {
|
const orgIds = Array.from(
|
||||||
const orgSites = await db
|
new Set(
|
||||||
|
validSites
|
||||||
|
.map((s) => s.orgId)
|
||||||
|
.filter((id): id is NonNullable<typeof id> => id != null)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Batch fetch all client-site associations for these sites in one query.
|
||||||
|
const clientSitesRes = siteIds.length
|
||||||
|
? await db
|
||||||
.select()
|
.select()
|
||||||
.from(sites)
|
.from(clientSitesAssociationsCache)
|
||||||
.where(eq(sites.orgId, site.orgId));
|
.where(inArray(clientSitesAssociationsCache.siteId, siteIds))
|
||||||
|
: [];
|
||||||
|
|
||||||
for (const peer of orgSites) {
|
// Batch fetch all sites in the relevant orgs in one query (covers
|
||||||
// Skip self
|
// site-to-site communication for every site processed below).
|
||||||
|
const orgSitesRes = orgIds.length
|
||||||
|
? await db.select().from(sites).where(inArray(sites.orgId, orgIds))
|
||||||
|
: [];
|
||||||
|
|
||||||
|
// Index org sites by orgId for O(1) lookup per site.
|
||||||
|
const sitesByOrg = new Map<string, typeof orgSitesRes>();
|
||||||
|
for (const peer of orgSitesRes) {
|
||||||
if (
|
if (
|
||||||
peer.siteId === site.siteId ||
|
peer.orgId == null ||
|
||||||
!peer.endpoint ||
|
!peer.endpoint ||
|
||||||
!peer.subnet ||
|
!peer.subnet ||
|
||||||
!peer.listenPort
|
!peer.listenPort
|
||||||
) {
|
) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
let arr = sitesByOrg.get(peer.orgId);
|
||||||
// Add peer site as a destination for this site
|
if (!arr) {
|
||||||
if (!mappings[site.endpoint]) {
|
arr = [];
|
||||||
mappings[site.endpoint] = { destinations: [] };
|
sitesByOrg.set(peer.orgId, arr);
|
||||||
|
}
|
||||||
|
arr.push(peer);
|
||||||
}
|
}
|
||||||
|
|
||||||
const destination: PeerDestination = {
|
// Index client-site associations by siteId for O(1) lookup per site.
|
||||||
destinationIP: peer.subnet.split("/")[0],
|
const clientSitesBySite = new Map<number, typeof clientSitesRes>();
|
||||||
destinationPort: peer.listenPort || 1 // this satisfies gerbil for now but should be reevaluated
|
for (const cs of clientSitesRes) {
|
||||||
|
let arr = clientSitesBySite.get(cs.siteId);
|
||||||
|
if (!arr) {
|
||||||
|
arr = [];
|
||||||
|
clientSitesBySite.set(cs.siteId, arr);
|
||||||
|
}
|
||||||
|
arr.push(cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize mappings object for multi-peer support
|
||||||
|
const mappings: { [key: string]: ProxyMapping } = {};
|
||||||
|
|
||||||
|
// Track destinations per endpoint to deduplicate in O(1).
|
||||||
|
const seen = new Map<string, Set<string>>();
|
||||||
|
|
||||||
|
const addDestination = (endpoint: string, dest: PeerDestination) => {
|
||||||
|
let destSet = seen.get(endpoint);
|
||||||
|
if (!destSet) {
|
||||||
|
destSet = new Set();
|
||||||
|
seen.set(endpoint, destSet);
|
||||||
|
mappings[endpoint] = { destinations: [] };
|
||||||
|
}
|
||||||
|
const key = `${dest.destinationIP}:${dest.destinationPort}`;
|
||||||
|
if (!destSet.has(key)) {
|
||||||
|
destSet.add(key);
|
||||||
|
mappings[endpoint].destinations.push(dest);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check for duplicates
|
// Process each site using the pre-fetched data.
|
||||||
const isDuplicate = mappings[site.endpoint].destinations.some(
|
for (const site of validSites) {
|
||||||
(dest) =>
|
const siteDestination: PeerDestination = {
|
||||||
dest.destinationIP === destination.destinationIP &&
|
destinationIP: site.subnet!.split("/")[0],
|
||||||
dest.destinationPort === destination.destinationPort
|
destinationPort: site.listenPort! || 1 // this satisfies gerbil for now but should be reevaluated
|
||||||
);
|
};
|
||||||
|
|
||||||
if (!isDuplicate) {
|
// Add this site as a destination for each associated client.
|
||||||
mappings[site.endpoint].destinations.push(destination);
|
const clientSites = clientSitesBySite.get(site.siteId);
|
||||||
|
if (clientSites) {
|
||||||
|
for (const clientSite of clientSites) {
|
||||||
|
if (!clientSite.endpoint) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
addDestination(clientSite.endpoint, siteDestination);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Site-to-site communication (all sites in the same org).
|
||||||
|
if (site.orgId != null) {
|
||||||
|
const peers = sitesByOrg.get(site.orgId);
|
||||||
|
if (peers) {
|
||||||
|
for (const peer of peers) {
|
||||||
|
if (peer.siteId === site.siteId) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
addDestination(site.endpoint!, {
|
||||||
|
destinationIP: peer.subnet!.split("/")[0],
|
||||||
|
destinationPort: peer.listenPort! || 1 // this satisfies gerbil for now but should be reevaluated
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,16 +185,20 @@ export async function updateAndGenerateEndpointDestinations(
|
|||||||
const sitesOnExitNode = await db
|
const sitesOnExitNode = await db
|
||||||
.select({
|
.select({
|
||||||
siteId: sites.siteId,
|
siteId: sites.siteId,
|
||||||
|
newtId: newts.newtId,
|
||||||
subnet: sites.subnet,
|
subnet: sites.subnet,
|
||||||
listenPort: sites.listenPort,
|
listenPort: sites.listenPort,
|
||||||
publicKey: sites.publicKey,
|
publicKey: sites.publicKey,
|
||||||
endpoint: clientSitesAssociationsCache.endpoint
|
endpoint: clientSitesAssociationsCache.endpoint,
|
||||||
|
isRelayed: clientSitesAssociationsCache.isRelayed,
|
||||||
|
isJitMode: clientSitesAssociationsCache.isJitMode
|
||||||
})
|
})
|
||||||
.from(sites)
|
.from(sites)
|
||||||
.innerJoin(
|
.innerJoin(
|
||||||
clientSitesAssociationsCache,
|
clientSitesAssociationsCache,
|
||||||
eq(sites.siteId, clientSitesAssociationsCache.siteId)
|
eq(sites.siteId, clientSitesAssociationsCache.siteId)
|
||||||
)
|
)
|
||||||
|
.innerJoin(newts, eq(sites.siteId, newts.siteId))
|
||||||
.where(
|
.where(
|
||||||
and(
|
and(
|
||||||
eq(sites.exitNodeId, exitNode.exitNodeId),
|
eq(sites.exitNodeId, exitNode.exitNodeId),
|
||||||
@@ -208,6 +212,7 @@ export async function updateAndGenerateEndpointDestinations(
|
|||||||
// Determine which rows actually need updating and whether the endpoint
|
// Determine which rows actually need updating and whether the endpoint
|
||||||
// (as opposed to only the publicKey) changed for any of them.
|
// (as opposed to only the publicKey) changed for any of them.
|
||||||
const siteIdsToUpdate: number[] = [];
|
const siteIdsToUpdate: number[] = [];
|
||||||
|
const sitesWithNewtsToUpdate: { siteId: number; newtId: string }[] = [];
|
||||||
let endpointChanged = false;
|
let endpointChanged = false;
|
||||||
for (const site of sitesOnExitNode) {
|
for (const site of sitesOnExitNode) {
|
||||||
if (
|
if (
|
||||||
@@ -217,6 +222,12 @@ export async function updateAndGenerateEndpointDestinations(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
siteIdsToUpdate.push(site.siteId);
|
siteIdsToUpdate.push(site.siteId);
|
||||||
|
if (!site.isRelayed && !site.isJitMode) {
|
||||||
|
sitesWithNewtsToUpdate.push({
|
||||||
|
siteId: site.siteId,
|
||||||
|
newtId: site.newtId
|
||||||
|
});
|
||||||
|
}
|
||||||
if (site.endpoint !== formattedEndpoint) {
|
if (site.endpoint !== formattedEndpoint) {
|
||||||
endpointChanged = true;
|
endpointChanged = true;
|
||||||
}
|
}
|
||||||
@@ -248,7 +259,15 @@ export async function updateAndGenerateEndpointDestinations(
|
|||||||
logger.info(
|
logger.info(
|
||||||
`ClientSitesAssociationsCache for client ${olm.clientId} endpoint changed to ${formattedEndpoint} for ${siteIdsToUpdate.length} site(s) on exit node ${exitNode.exitNodeId}`
|
`ClientSitesAssociationsCache for client ${olm.clientId} endpoint changed to ${formattedEndpoint} for ${siteIdsToUpdate.length} site(s) on exit node ${exitNode.exitNodeId}`
|
||||||
);
|
);
|
||||||
handleClientEndpointChange(olm.clientId, formattedEndpoint);
|
handleClientEndpointChange(
|
||||||
|
sitesWithNewtsToUpdate,
|
||||||
|
olm.clientId,
|
||||||
|
formattedEndpoint
|
||||||
|
).catch((error) => {
|
||||||
|
logger.error(
|
||||||
|
`Failed to handle client endpoint change for client ${olm.clientId}: ${error}`
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,59 +358,14 @@ export async function updateAndGenerateEndpointDestinations(
|
|||||||
`Site ${newt.siteId} endpoint changed from ${site.endpoint} to ${updatedSite.endpoint}`
|
`Site ${newt.siteId} endpoint changed from ${site.endpoint} to ${updatedSite.endpoint}`
|
||||||
);
|
);
|
||||||
// Handle any additional logic for endpoint change
|
// Handle any additional logic for endpoint change
|
||||||
handleSiteEndpointChange(newt.siteId, updatedSite.endpoint!);
|
handleSiteEndpointChange(newt.siteId, updatedSite.endpoint!).catch(
|
||||||
|
(error) => {
|
||||||
|
logger.error(
|
||||||
|
`Failed to handle site endpoint change for site ${newt.siteId}: ${error}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (!updatedSite || !updatedSite.subnet) {
|
|
||||||
// logger.warn(`Site not found: ${newt.siteId}`);
|
|
||||||
// throw new Error("Site not found");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Find all clients that connect to this site
|
|
||||||
// const sitesClientPairs = await db
|
|
||||||
// .select()
|
|
||||||
// .from(clientSites)
|
|
||||||
// .where(eq(clientSites.siteId, newt.siteId));
|
|
||||||
|
|
||||||
// THE NEWT IS NOT SENDING RAW WG TO THE GERBIL SO IDK IF WE REALLY NEED THIS - REMOVING
|
|
||||||
// Get client details for each client
|
|
||||||
// for (const pair of sitesClientPairs) {
|
|
||||||
// const [client] = await db
|
|
||||||
// .select()
|
|
||||||
// .from(clients)
|
|
||||||
// .where(eq(clients.clientId, pair.clientId));
|
|
||||||
|
|
||||||
// if (client && client.endpoint) {
|
|
||||||
// const [host, portStr] = client.endpoint.split(':');
|
|
||||||
// if (host && portStr) {
|
|
||||||
// destinations.push({
|
|
||||||
// destinationIP: host,
|
|
||||||
// destinationPort: parseInt(portStr, 10)
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// If this is a newt/site, also add other sites in the same org
|
|
||||||
// if (updatedSite.orgId) {
|
|
||||||
// const orgSites = await db
|
|
||||||
// .select()
|
|
||||||
// .from(sites)
|
|
||||||
// .where(eq(sites.orgId, updatedSite.orgId));
|
|
||||||
|
|
||||||
// for (const site of orgSites) {
|
|
||||||
// // Don't add the current site to the destinations
|
|
||||||
// if (site.siteId !== currentSiteId && site.subnet && site.endpoint && site.listenPort) {
|
|
||||||
// const [host, portStr] = site.endpoint.split(':');
|
|
||||||
// if (host && portStr) {
|
|
||||||
// destinations.push({
|
|
||||||
// destinationIP: host,
|
|
||||||
// destinationPort: site.listenPort
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
return destinations;
|
return destinations;
|
||||||
}
|
}
|
||||||
@@ -465,7 +439,8 @@ async function handleSiteEndpointChange(siteId: number, newEndpoint: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleClientEndpointChange( // TODO: I THINK WE DONT NEED TO HIT EVERY SITE HERE BECAUSE WE ONLY NEED TO UPDATE THE SITES CONNECTED TO THIS NODE WHICH WE ALREADY HAVE FROM ABOVE
|
async function handleClientEndpointChange(
|
||||||
|
sitesWithNewtsToUpdate: { siteId: number; newtId: string }[],
|
||||||
clientId: number,
|
clientId: number,
|
||||||
newEndpoint: string
|
newEndpoint: string
|
||||||
) {
|
) {
|
||||||
@@ -483,66 +458,38 @@ async function handleClientEndpointChange( // TODO: I THINK WE DONT NEED TO HIT
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all non-relayed sites connected to this client
|
if (sitesWithNewtsToUpdate.length > 250) {
|
||||||
const connectedSites = await db
|
|
||||||
.select({
|
|
||||||
siteId: sites.siteId,
|
|
||||||
newtId: newts.newtId,
|
|
||||||
isRelayed: clientSitesAssociationsCache.isRelayed,
|
|
||||||
isJitMode: clientSitesAssociationsCache.isJitMode,
|
|
||||||
subnet: clients.subnet
|
|
||||||
})
|
|
||||||
.from(clientSitesAssociationsCache)
|
|
||||||
.innerJoin(
|
|
||||||
sites,
|
|
||||||
eq(clientSitesAssociationsCache.siteId, sites.siteId)
|
|
||||||
)
|
|
||||||
.innerJoin(newts, eq(newts.siteId, sites.siteId))
|
|
||||||
.innerJoin(
|
|
||||||
clients,
|
|
||||||
eq(clientSitesAssociationsCache.clientId, clients.clientId)
|
|
||||||
)
|
|
||||||
.where(
|
|
||||||
and(
|
|
||||||
eq(sites.online, true), // the site has to be online or it does not matter...
|
|
||||||
eq(clientSitesAssociationsCache.clientId, clientId),
|
|
||||||
eq(clientSitesAssociationsCache.isRelayed, false),
|
|
||||||
eq(clientSitesAssociationsCache.isJitMode, false)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (connectedSites.length > 250) {
|
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`Client ${clientId} has ${connectedSites.length} connected sites so the client will be in jit mode anyway, skipping endpoint updates`
|
`Client ${clientId} has ${sitesWithNewtsToUpdate.length} connected sites so the client will be in jit mode anyway, skipping endpoint updates`
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update each non-relayed site with the new client endpoint (in parallel)
|
// Update each non-relayed site with the new client endpoint (in parallel)
|
||||||
await Promise.allSettled(
|
await Promise.allSettled(
|
||||||
connectedSites.map(async (siteData) => {
|
sitesWithNewtsToUpdate.map(async ({ siteId, newtId }) => {
|
||||||
if (!siteData.subnet || !client.pubKey) {
|
if (!client.pubKey) {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`Client ${clientId} has no subnet or public key, skipping update for site ${siteData.siteId}`
|
`Client ${clientId} has no public key, skipping update for site ${siteId}`
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await updateNewtPeer(
|
await updateNewtPeer(
|
||||||
siteData.siteId,
|
siteId,
|
||||||
client.pubKey,
|
client.pubKey,
|
||||||
{
|
{
|
||||||
endpoint: newEndpoint
|
endpoint: newEndpoint
|
||||||
},
|
},
|
||||||
siteData.newtId
|
newtId
|
||||||
);
|
);
|
||||||
logger.debug(
|
logger.debug(
|
||||||
`Updated site ${siteData.siteId} with new client ${clientId} endpoint: ${newEndpoint}`
|
`Updated site ${siteId} with new client ${clientId} endpoint: ${newEndpoint}`
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(
|
logger.error(
|
||||||
`Failed to update site ${siteData.siteId} with new client endpoint: ${error}`
|
`Failed to update site ${siteId} with new client endpoint: ${error}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Request, Response, NextFunction } from "express";
|
import { Request, Response, NextFunction } from "express";
|
||||||
import { db } from "@server/db";
|
import { db, DB_TYPE } from "@server/db";
|
||||||
import { and, eq, or, inArray } from "drizzle-orm";
|
import { and, eq, or, inArray, sql } from "drizzle-orm";
|
||||||
import {
|
import {
|
||||||
resources,
|
resources,
|
||||||
userResources,
|
userResources,
|
||||||
@@ -12,7 +12,9 @@ import {
|
|||||||
resourceWhitelist,
|
resourceWhitelist,
|
||||||
siteResources,
|
siteResources,
|
||||||
userSiteResources,
|
userSiteResources,
|
||||||
roleSiteResources
|
roleSiteResources,
|
||||||
|
siteNetworks,
|
||||||
|
sites
|
||||||
} from "@server/db";
|
} from "@server/db";
|
||||||
import createHttpError from "http-errors";
|
import createHttpError from "http-errors";
|
||||||
import HttpCode from "@server/types/HttpCode";
|
import HttpCode from "@server/types/HttpCode";
|
||||||
@@ -156,9 +158,24 @@ export async function getUserResources(
|
|||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
alias: string | null;
|
alias: string | null;
|
||||||
aliasAddress: string | null;
|
aliasAddress: string | null;
|
||||||
|
tcpPortRangeString: string | null;
|
||||||
|
udpPortRangeString: string | null;
|
||||||
|
disableIcmp: boolean | null;
|
||||||
|
siteIds: number[];
|
||||||
|
siteNames: string[];
|
||||||
|
siteNiceIds: string[];
|
||||||
|
siteAddresses: (string | null)[];
|
||||||
|
siteOnlines: boolean[];
|
||||||
}> = [];
|
}> = [];
|
||||||
if (accessibleSiteResourceIds.length > 0) {
|
if (accessibleSiteResourceIds.length > 0) {
|
||||||
siteResourcesData = await db
|
const aggCol = <T>(column: any) => {
|
||||||
|
if (DB_TYPE === "sqlite") {
|
||||||
|
return sql<T>`json_group_array(${column})`;
|
||||||
|
}
|
||||||
|
return sql<T>`COALESCE(array_agg(${column}) FILTER (WHERE ${sites.siteId} IS NOT NULL), '{}')`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const siteResourcesRaw = await db
|
||||||
.select({
|
.select({
|
||||||
siteResourceId: siteResources.siteResourceId,
|
siteResourceId: siteResources.siteResourceId,
|
||||||
name: siteResources.name,
|
name: siteResources.name,
|
||||||
@@ -170,9 +187,22 @@ export async function getUserResources(
|
|||||||
fullDomain: siteResources.fullDomain,
|
fullDomain: siteResources.fullDomain,
|
||||||
enabled: siteResources.enabled,
|
enabled: siteResources.enabled,
|
||||||
alias: siteResources.alias,
|
alias: siteResources.alias,
|
||||||
aliasAddress: siteResources.aliasAddress
|
aliasAddress: siteResources.aliasAddress,
|
||||||
|
tcpPortRangeString: siteResources.tcpPortRangeString,
|
||||||
|
udpPortRangeString: siteResources.udpPortRangeString,
|
||||||
|
disableIcmp: siteResources.disableIcmp,
|
||||||
|
siteIds: aggCol<number[]>(sites.siteId),
|
||||||
|
siteNames: aggCol<string[]>(sites.name),
|
||||||
|
siteNiceIds: aggCol<string[]>(sites.niceId),
|
||||||
|
siteAddresses: aggCol<(string | null)[]>(sites.address),
|
||||||
|
siteOnlines: aggCol<boolean[]>(sites.online)
|
||||||
})
|
})
|
||||||
.from(siteResources)
|
.from(siteResources)
|
||||||
|
.leftJoin(
|
||||||
|
siteNetworks,
|
||||||
|
eq(siteResources.networkId, siteNetworks.networkId)
|
||||||
|
)
|
||||||
|
.leftJoin(sites, eq(siteNetworks.siteId, sites.siteId))
|
||||||
.where(
|
.where(
|
||||||
and(
|
and(
|
||||||
inArray(
|
inArray(
|
||||||
@@ -182,7 +212,55 @@ export async function getUserResources(
|
|||||||
eq(siteResources.orgId, orgId),
|
eq(siteResources.orgId, orgId),
|
||||||
eq(siteResources.enabled, true)
|
eq(siteResources.enabled, true)
|
||||||
)
|
)
|
||||||
);
|
)
|
||||||
|
.groupBy(siteResources.siteResourceId);
|
||||||
|
|
||||||
|
siteResourcesData = siteResourcesRaw.map((row: any) => {
|
||||||
|
if (DB_TYPE !== "sqlite") {
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
const siteIdsRaw = JSON.parse(row.siteIds) as (number | null)[];
|
||||||
|
const siteNamesRaw = JSON.parse(row.siteNames) as (
|
||||||
|
| string
|
||||||
|
| null
|
||||||
|
)[];
|
||||||
|
const siteNiceIdsRaw = JSON.parse(row.siteNiceIds) as (
|
||||||
|
| string
|
||||||
|
| null
|
||||||
|
)[];
|
||||||
|
const siteAddressesRaw = JSON.parse(row.siteAddresses) as (
|
||||||
|
| string
|
||||||
|
| null
|
||||||
|
)[];
|
||||||
|
const siteOnlinesRaw = JSON.parse(row.siteOnlines) as (
|
||||||
|
| 0
|
||||||
|
| 1
|
||||||
|
| null
|
||||||
|
)[];
|
||||||
|
|
||||||
|
const siteIds: number[] = [];
|
||||||
|
const siteNames: string[] = [];
|
||||||
|
const siteNiceIds: string[] = [];
|
||||||
|
const siteAddresses: (string | null)[] = [];
|
||||||
|
const siteOnlines: boolean[] = [];
|
||||||
|
for (let i = 0; i < siteIdsRaw.length; i++) {
|
||||||
|
if (siteIdsRaw[i] == null) continue;
|
||||||
|
siteIds.push(siteIdsRaw[i] as number);
|
||||||
|
siteNames.push((siteNamesRaw[i] ?? "") as string);
|
||||||
|
siteNiceIds.push((siteNiceIdsRaw[i] ?? "") as string);
|
||||||
|
siteAddresses.push(siteAddressesRaw[i] ?? null);
|
||||||
|
siteOnlines.push(siteOnlinesRaw[i] === 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...row,
|
||||||
|
siteIds,
|
||||||
|
siteNames,
|
||||||
|
siteNiceIds,
|
||||||
|
siteAddresses,
|
||||||
|
siteOnlines
|
||||||
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for password, pincode, and whitelist protection for each resource
|
// Check for password, pincode, and whitelist protection for each resource
|
||||||
@@ -260,6 +338,14 @@ export async function getUserResources(
|
|||||||
enabled: siteResource.enabled,
|
enabled: siteResource.enabled,
|
||||||
alias: siteResource.alias,
|
alias: siteResource.alias,
|
||||||
aliasAddress: siteResource.aliasAddress,
|
aliasAddress: siteResource.aliasAddress,
|
||||||
|
tcpPortRangeString: siteResource.tcpPortRangeString,
|
||||||
|
udpPortRangeString: siteResource.udpPortRangeString,
|
||||||
|
disableIcmp: siteResource.disableIcmp,
|
||||||
|
siteIds: siteResource.siteIds,
|
||||||
|
siteNames: siteResource.siteNames,
|
||||||
|
siteNiceIds: siteResource.siteNiceIds,
|
||||||
|
siteAddresses: siteResource.siteAddresses,
|
||||||
|
siteOnlines: siteResource.siteOnlines,
|
||||||
type: "site" as const
|
type: "site" as const
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@@ -302,11 +388,19 @@ export type GetUserResourcesResponse = {
|
|||||||
destination: string;
|
destination: string;
|
||||||
mode: string;
|
mode: string;
|
||||||
protocol: string | null;
|
protocol: string | null;
|
||||||
|
tcpPortRangeString: string | null;
|
||||||
|
udpPortRangeString: string | null;
|
||||||
|
disableIcmp: boolean | null;
|
||||||
ssl: boolean;
|
ssl: boolean;
|
||||||
fullDomain: string | null;
|
fullDomain: string | null;
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
alias: string | null;
|
alias: string | null;
|
||||||
aliasAddress: string | null;
|
aliasAddress: string | null;
|
||||||
|
siteIds: number[];
|
||||||
|
siteNames: string[];
|
||||||
|
siteNiceIds: string[];
|
||||||
|
siteAddresses: (string | null)[];
|
||||||
|
siteOnlines: boolean[];
|
||||||
type: "site";
|
type: "site";
|
||||||
}>;
|
}>;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user