diff --git a/web/projects/shared/src/i18n/dictionaries/de.ts b/web/projects/shared/src/i18n/dictionaries/de.ts index 2bfc4bebb..a1b8f7d4d 100644 --- a/web/projects/shared/src/i18n/dictionaries/de.ts +++ b/web/projects/shared/src/i18n/dictionaries/de.ts @@ -535,6 +535,7 @@ export default { 569: 'Wählen Sie eine Zertifizierungsstelle aus, um SSL/TLS-Zertifikate für diese Domain auszustellen.', 570: 'Andere', 571: 'Ein Name zur einfachen Identifizierung des Gateways', + 572: 'Nicht gut für öffentlichen Zugriff, da das Zertifikat von der Root-CA Ihres Servers signiert ist', 574: 'Datei', 575: 'StartTunnel-Konfigurationsdatei', 576: 'Kopieren/Einfügen', @@ -548,7 +549,7 @@ export default { 584: 'Verbindungen können manchmal langsam oder unzuverlässig sein', 585: 'Öffentlich, wenn Sie die Adresse öffentlich teilen, andernfalls privat', 586: 'Erfordert ein Tor-fähiges Gerät oder einen Browser', - 587: 'Nur nützlich für Clients, die SSL erzwingen', + 587: 'In den meisten Fällen nicht empfohlen. Nur erforderlich für Apps, die HTTPS erzwingen', 588: 'Ideal für anonyme, zensurresistente Bereitstellung und Fernzugriff', 589: 'Ideal für lokalen Zugriff', 590: 'Erfordert die Verbindung mit demselben lokalen Netzwerk (LAN) wie Ihr Server, entweder physisch oder über VPN', @@ -561,11 +562,11 @@ export default { 597: 'der sich auflöst zu', 598: 'Nicht empfohlen für VPN-Zugriff. VPNs unterstützen keine „.local“-Domains ohne erweiterte Konfiguration', 599: 'Kann für Clearnet-Zugriff verwendet werden', - 600: 'In den meisten Fällen nicht empfohlen. Öffentliche Domains werden bevorzugt', + 600: 'In den meisten Fällen nicht empfohlen. Öffentliche Domains sind üblicher und werden bevorzugt', 601: 'Lokal', 602: 'Kann für lokalen Zugriff verwendet werden', 603: 'Ideal für öffentlichen Zugriff über das Internet', - 604: 'Kann für persönlichen Zugriff über das öffentliche Internet verwendet werden. VPN ist privater und sicherer', + 604: 'Kann für persönlichen Zugriff über das öffentliche Internet verwendet werden, aber ein VPN ist privater und sicherer', 605: 'wenn die Verwendung von IP-Adressen und Ports unerwünscht ist', 606: 'Host', 607: 'Wert', diff --git a/web/projects/shared/src/i18n/dictionaries/en.ts b/web/projects/shared/src/i18n/dictionaries/en.ts index 71c25bcd1..5e97cd43c 100644 --- a/web/projects/shared/src/i18n/dictionaries/en.ts +++ b/web/projects/shared/src/i18n/dictionaries/en.ts @@ -534,6 +534,7 @@ export const ENGLISH = { 'Select a Certificate Authority to issue SSL/TLS certificates for this domain': 569, 'Other': 570, // as in, a list option to indicate none of the options listed 'A name to easily identify the gateway': 571, + "Not good for public access, since the certificate is signed by your Server's Root CA": 572, 'File': 574, // as in, a computer file 'StartTunnel Config File': 575, 'Copy/Paste': 576, @@ -547,7 +548,7 @@ export const ENGLISH = { 'Connections can be slow or unreliable at times': 584, 'Public if you share the address publicly, otherwise private': 585, 'Requires using a Tor-enabled device or browser': 586, - 'Only useful for clients that require SSL': 587, + 'Not recommended in most cases. Only needed for apps that enforce HTTPS': 587, 'Ideal for anonymous, censorship-resistant hosting and remote access': 588, 'Ideal for local access': 589, 'Requires being connected to the same Local Area Network (LAN) as your server, either physically or via VPN': 590, @@ -560,11 +561,11 @@ export const ENGLISH = { 'that resolves to': 597, // this is a partial sentence. It is preceded by "requires a DNS record for [domain] " 'Not recommended for VPN access. VPNs do not support ".local" domains without advanced configuration': 598, 'Can be used for clearnet access': 599, - 'Not recommended in most cases. Public domains are preferred': 600, + 'Not recommended in most cases. Using a public domain is more common and preferred': 600, 'Local': 601, // as in, not remote 'Can be used for local access': 602, 'Ideal for public access via the Internet': 603, - 'Can be used for personal access via the public Internet. VPN is more private and secure': 604, + 'Can be used for personal access via the public Internet, but a VPN is more private and secure': 604, 'when using IP addresses and ports is undesirable': 605, // this is a partial sentence. It is preceded by "Good for connections " 'Host': 606, // as in, a network host 'Value': 607, // as in, the value in a column of a table diff --git a/web/projects/shared/src/i18n/dictionaries/es.ts b/web/projects/shared/src/i18n/dictionaries/es.ts index aa3263d5b..e3897f23b 100644 --- a/web/projects/shared/src/i18n/dictionaries/es.ts +++ b/web/projects/shared/src/i18n/dictionaries/es.ts @@ -535,6 +535,7 @@ export default { 569: 'Selecciona una Autoridad Certificadora para emitir certificados SSL/TLS para este dominio.', 570: 'Otro', 571: 'Un nombre para identificar fácilmente la puerta de enlace', + 572: 'No es adecuado para acceso público, ya que el certificado está firmado por la CA raíz de tu servidor', 574: 'Archivo', 575: 'Archivo de configuración de StartTunnel', 576: 'Copiar/Pegar', @@ -548,7 +549,7 @@ export default { 584: 'Las conexiones pueden ser lentas o poco confiables a veces', 585: 'Público si compartes la dirección públicamente, de lo contrario privado', 586: 'Requiere un dispositivo o navegador habilitado para Tor', - 587: 'Solo útil para clientes que imponen SSL', + 587: 'No recomendado en la mayoría de los casos. Solo necesario para aplicaciones que imponen HTTPS', 588: 'Ideal para alojamiento y acceso remoto anónimo y resistente a la censura', 589: 'Ideal para acceso local', 590: 'Requiere estar conectado a la misma red de área local (LAN) que tu servidor, ya sea físicamente o mediante VPN', @@ -561,11 +562,11 @@ export default { 597: 'que se resuelva en', 598: 'No recomendado para acceso VPN. Las VPN no admiten dominios “.local” sin configuración avanzada', 599: 'Se puede usar para acceso a clearnet', - 600: 'No recomendado en la mayoría de los casos. Se prefieren los dominios de públicos', + 600: 'No recomendado en la mayoría de los casos. Los dominios públicos son más comunes y preferidos', 601: 'Local', 602: 'Se puede usar para acceso local', 603: 'Ideal para acceso público a través de Internet', - 604: 'Se puede usar para acceso personal a través de Internet público. VPN es más privado y seguro', + 604: 'Puede usarse para acceso personal a través de Internet público, pero una VPN es más privada y segura', 605: 'cuando el uso de direcciones IP y puertos no es deseable', 606: 'Host', 607: 'Valor', diff --git a/web/projects/shared/src/i18n/dictionaries/fr.ts b/web/projects/shared/src/i18n/dictionaries/fr.ts index ebf0a172f..0c6ab45af 100644 --- a/web/projects/shared/src/i18n/dictionaries/fr.ts +++ b/web/projects/shared/src/i18n/dictionaries/fr.ts @@ -535,6 +535,7 @@ export default { 569: 'Sélectionnez une Autorité de Certification pour émettre des certificats SSL/TLS pour ce domaine.', 570: 'Autre', 571: 'Un nom pour identifier facilement la passerelle', + 572: 'Pas idéal pour un accès public, car le certificat est signé par l’AC racine de votre serveur', 574: 'Fichier', 575: 'Fichier de configuration StartTunnel', 576: 'Copier/Coller', @@ -548,7 +549,7 @@ export default { 584: 'Les connexions peuvent parfois être lentes ou peu fiables', 585: 'Public si vous partagez l’adresse publiquement, sinon privé', 586: 'Nécessite un appareil ou un navigateur compatible Tor', - 587: 'Utile uniquement pour les clients qui imposent SSL', + 587: 'Non recommandé dans la plupart des cas. Nécessaire uniquement pour les applications qui imposent HTTPS', 588: 'Idéal pour l’hébergement et l’accès à distance anonymes et résistants à la censure', 589: 'Idéal pour un accès local', 590: 'Nécessite d’être connecté au même réseau local (LAN) que votre serveur, soit physiquement, soit via VPN', @@ -561,11 +562,11 @@ export default { 597: 'qui se résout en', 598: 'Non recommandé pour l’accès VPN. Les VPN ne prennent pas en charge les domaines « .local » sans configuration avancée', 599: 'Peut être utilisé pour un accès clearnet', - 600: 'Non recommandé dans la plupart des cas. Les domaines publics sont préférés', + 600: 'Non recommandé dans la plupart des cas. Les domaines publics sont plus courants et préférés', 601: 'Local', 602: 'Peut être utilisé pour un accès local', 603: 'Idéal pour un accès public via Internet', - 604: 'Peut être utilisé pour un accès personnel via Internet public. Le VPN est plus privé et sécurisé', + 604: 'Peut être utilisé pour un accès personnel via l’Internet public, mais un VPN est plus privé et plus sécurisé', 605: 'lorsque l’utilisation des adresses IP et des ports est indésirable', 606: 'Hôte', 607: 'Valeur', diff --git a/web/projects/shared/src/i18n/dictionaries/pl.ts b/web/projects/shared/src/i18n/dictionaries/pl.ts index dbcf8b2ff..01b1f619a 100644 --- a/web/projects/shared/src/i18n/dictionaries/pl.ts +++ b/web/projects/shared/src/i18n/dictionaries/pl.ts @@ -535,6 +535,7 @@ export default { 569: 'Wybierz Urząd Certyfikacji, aby wystawić certyfikaty SSL/TLS dla tej domeny.', 570: 'Inne', 571: 'Nazwa ułatwiająca identyfikację bramy', + 572: 'Niezalecane do publicznego dostępu, ponieważ certyfikat jest podpisany przez główną CA serwera', 574: 'Plik', 575: 'Plik konfiguracyjny StartTunnel', 576: 'Kopiuj/Wklej', @@ -548,7 +549,7 @@ export default { 584: 'Połączenia mogą być czasami wolne lub niestabilne', 585: 'Publiczne, jeśli udostępniasz adres publicznie, w przeciwnym razie prywatne', 586: 'Wymaga urządzenia lub przeglądarki obsługującej Tor', - 587: 'Przydatne tylko dla klientów wymuszających SSL', + 587: 'Niezalecane w większości przypadków. Wymagane tylko dla aplikacji wymuszających HTTPS', 588: 'Idealne do anonimowego, odpornego na cenzurę hostingu i zdalnego dostępu', 589: 'Idealne do dostępu lokalnego', 590: 'Wymaga połączenia z tą samą siecią lokalną (LAN) co serwer, fizycznie lub przez VPN', @@ -561,11 +562,11 @@ export default { 597: 'który rozwiązuje się na', 598: 'Niezalecane do dostępu VPN. VPN-y nie obsługują domen „.local” bez zaawansowanej konfiguracji', 599: 'Może być używane do dostępu do clearnet', - 600: 'Niezalecane w większości przypadków. Preferowane są domeny publiczne', + 600: 'Niezalecane w większości przypadków. Domeny publiczne są bardziej powszechne i preferowane', 601: 'Lokalne', 602: 'Może być używane do dostępu lokalnego', 603: 'Idealne do publicznego dostępu przez Internet', - 604: 'Może być używane do osobistego dostępu przez publiczny Internet. VPN jest bardziej prywatny i bezpieczny', + 604: 'Może być używane do osobistego dostępu przez publiczny Internet, ale VPN jest bardziej prywatny i bezpieczny', 605: 'gdy używanie adresów IP i portów jest niepożądane', 606: 'Host', 607: 'Wartość', diff --git a/web/projects/start-tunnel/src/app/routes/home/routes/devices/add.ts b/web/projects/start-tunnel/src/app/routes/home/routes/devices/add.ts index 59651c62b..990ddf10d 100644 --- a/web/projects/start-tunnel/src/app/routes/home/routes/devices/add.ts +++ b/web/projects/start-tunnel/src/app/routes/home/routes/devices/add.ts @@ -1,10 +1,5 @@ import { AsyncPipe } from '@angular/common' -import { - ChangeDetectionStrategy, - Component, - inject, - Signal, -} from '@angular/core' +import { ChangeDetectionStrategy, Component, inject } from '@angular/core' import { NonNullableFormBuilder, ReactiveFormsModule, @@ -23,6 +18,7 @@ import { TuiError, TuiTextfield, } from '@taiga-ui/core' +import { TuiDialogService } from '@taiga-ui/experimental' import { TuiChevron, TuiDataListWrapper, @@ -34,12 +30,13 @@ import { TuiForm } from '@taiga-ui/layout' import { injectContext, PolymorpheusComponent } from '@taiga-ui/polymorpheus' import { ApiService } from 'src/app/services/api/api.service' +import { DEVICES_CONFIG } from './config' import { - getIp, DeviceData, + getIp, + ipInSubnetValidator, MappedSubnet, subnetValidator, - ipInSubnetValidator, } from './utils' @Component({ @@ -118,6 +115,7 @@ export class DevicesAdd { private readonly loading = inject(LoadingService) private readonly api = inject(ApiService) private readonly errorService = inject(ErrorService) + private readonly dialogs = inject(TuiDialogService) protected readonly mobile = inject(TUI_IS_MOBILE) protected readonly context = @@ -167,9 +165,18 @@ export class DevicesAdd { const data = { ip, name, subnet: subnet?.range || '' } try { - this.context.data.device - ? await this.api.editDevice(data) - : await this.api.addDevice(data) + if (this.context.data.device) { + await this.api.editDevice(data) + } else { + await this.api.addDevice(data) + + const config = await this.api.showDeviceConfig({ + subnet: data.subnet, + ip, + }) + + this.dialogs.open(DEVICES_CONFIG, { data: config }).subscribe() + } } catch (e: any) { console.error(e) this.errorService.handleError(e) diff --git a/web/projects/ui/src/app/routes/portal/components/interfaces/interface.service.ts b/web/projects/ui/src/app/routes/portal/components/interfaces/interface.service.ts index 8cd7ed512..50f99d881 100644 --- a/web/projects/ui/src/app/routes/portal/components/interfaces/interface.service.ts +++ b/web/projects/ui/src/app/routes/portal/components/interfaces/interface.service.ts @@ -354,7 +354,9 @@ export class InterfaceService { if (ssl) { type = `${type} (SSL)` bullets = [ - this.i18n.transform('Only useful for clients that require SSL'), + this.i18n.transform( + 'Not recommended in most cases. Only needed for apps that enforce HTTPS', + ), rootCaRequired, ...bullets, ] @@ -409,13 +411,13 @@ export class InterfaceService { bullets = [ this.i18n.transform('Can be used for clearnet access'), this.i18n.transform( - 'Not recommended in most cases. Public domains are preferred', + 'Not recommended in most cases. Using a public domain is more common and preferred', ), rootCaRequired, ] if (!info.gateway.public) { bullets.push( - `${portForwarding} "${gatewayName}": ${port} -> ${gateway?.subnets.find(s => s.isIpv4())?.address}:${port}`, + `${portForwarding} "${gatewayName}": ${port} -> ${port}`, ) } } else { @@ -452,7 +454,7 @@ export class InterfaceService { if (!info.gateway.public) { bullets.push( - `${portForwarding} "${gatewayName}": ${port} -> ${gateway?.subnets.find(s => s.isIpv4())?.address}:${port === 443 ? 5443 : port}`, + `${portForwarding} "${gatewayName}": ${port} -> ${port === 443 ? 5443 : port}`, ) } @@ -463,7 +465,10 @@ export class InterfaceService { } else { bullets = [ this.i18n.transform( - 'Can be used for personal access via the public Internet. VPN is more private and secure', + 'Can be used for personal access via the public Internet, but a VPN is more private and secure', + ), + this.i18n.transform( + `Not good for public access, since the certificate is signed by your Server's Root CA`, ), rootCaRequired, ...bullets,