diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index efc587e..526f1d3 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 22e6d56..3a63179 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-14 11:54-0300\n" +"POT-Creation-Date: 2026-03-15 17:20-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,12 +38,12 @@ msgstr "Zurück" #: templates/app_gateway/application_details.html:125 #: templates/firewall/manage_firewall_rule.html:382 #: templates/firewall/manage_redirect_rule.html:86 -#: templates/gatekeeper/gatekeeper_list.html:77 -#: templates/gatekeeper/gatekeeper_list.html:120 -#: templates/gatekeeper/gatekeeper_list.html:165 -#: templates/gatekeeper/gatekeeper_list.html:213 -#: templates/gatekeeper/gatekeeper_list.html:230 -#: templates/gatekeeper/gatekeeper_list.html:282 +#: templates/gatekeeper/gatekeeper_list.html:93 +#: templates/gatekeeper/gatekeeper_list.html:136 +#: templates/gatekeeper/gatekeeper_list.html:181 +#: templates/gatekeeper/gatekeeper_list.html:229 +#: templates/gatekeeper/gatekeeper_list.html:246 +#: templates/gatekeeper/gatekeeper_list.html:298 #: templates/scheduler/scheduleprofile_form.html:127 #: templates/scheduler/scheduleprofile_list.html:29 #: templates/wireguard/peer_list/peer_preview_modal.html:109 @@ -65,11 +65,11 @@ msgstr "" "wird sofort ungültig." #: api_v2/forms.py:63 app_gateway/forms.py:40 app_gateway/forms.py:92 -#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:226 -#: app_gateway/forms.py:267 cluster/forms.py:67 cluster/forms.py:124 -#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:41 -#: gatekeeper/forms.py:75 gatekeeper/forms.py:139 gatekeeper/forms.py:226 -#: gatekeeper/forms.py:256 gatekeeper/forms.py:287 +#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:237 +#: app_gateway/forms.py:278 cluster/forms.py:67 cluster/forms.py:124 +#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:70 +#: gatekeeper/forms.py:150 gatekeeper/forms.py:212 gatekeeper/forms.py:299 +#: gatekeeper/forms.py:329 gatekeeper/forms.py:360 #: routing_templates/forms.py:71 scheduler/forms.py:102 #: templates/firewall/manage_firewall_rule.html:379 #: templates/firewall/manage_firewall_settings.html:59 @@ -83,13 +83,13 @@ msgid "Save" msgstr "Speichern" #: api_v2/models.py:10 app_gateway/forms.py:18 app_gateway/forms.py:106 -#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:99 +#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:174 #: routing_templates/forms.py:28 templates/api_v2/api_documentation.html:47 #: templates/api_v2/list.html:8 templates/app_gateway/app_gateway_list.html:58 #: templates/app_gateway/app_gateway_list.html:138 #: templates/app_gateway/application_details.html:26 #: templates/cluster/workers_list.html:8 templates/dns/static_host_list.html:68 -#: templates/gatekeeper/gatekeeper_list.html:149 +#: templates/gatekeeper/gatekeeper_list.html:165 #: templates/routing_templates/list.html:8 #: templates/scheduler/scheduleprofile_list.html:13 #: templates/user_manager/peer_group_list.html:8 @@ -133,10 +133,10 @@ msgstr "Aktiviert" #: app_gateway/views.py:293 app_gateway/views.py:328 app_gateway/views.py:354 #: app_gateway/views.py:404 app_gateway/views.py:432 cluster/views.py:18 #: cluster/views.py:45 cluster/views.py:114 gatekeeper/views.py:23 -#: gatekeeper/views.py:48 gatekeeper/views.py:78 gatekeeper/views.py:101 -#: gatekeeper/views.py:131 gatekeeper/views.py:154 gatekeeper/views.py:202 -#: gatekeeper/views.py:261 gatekeeper/views.py:291 gatekeeper/views.py:314 -#: gatekeeper/views.py:344 gatekeeper/views.py:367 gatekeeper/views.py:416 +#: gatekeeper/views.py:48 gatekeeper/views.py:98 gatekeeper/views.py:121 +#: gatekeeper/views.py:151 gatekeeper/views.py:174 gatekeeper/views.py:222 +#: gatekeeper/views.py:281 gatekeeper/views.py:311 gatekeeper/views.py:334 +#: gatekeeper/views.py:364 gatekeeper/views.py:387 gatekeeper/views.py:436 #: templates/access_denied.html:9 msgid "Access Denied" msgstr "Zugriff verweigert" @@ -218,9 +218,9 @@ msgid "Upstream" msgstr "Upstream" #: app_gateway/forms.py:41 app_gateway/forms.py:93 app_gateway/forms.py:137 -#: app_gateway/forms.py:155 app_gateway/forms.py:227 app_gateway/forms.py:268 -#: gatekeeper/forms.py:42 gatekeeper/forms.py:76 gatekeeper/forms.py:140 -#: gatekeeper/forms.py:227 gatekeeper/forms.py:257 gatekeeper/forms.py:288 +#: app_gateway/forms.py:155 app_gateway/forms.py:238 app_gateway/forms.py:279 +#: gatekeeper/forms.py:71 gatekeeper/forms.py:151 gatekeeper/forms.py:213 +#: gatekeeper/forms.py:300 gatekeeper/forms.py:330 gatekeeper/forms.py:361 #: scheduler/forms.py:103 #: templates/app_gateway/access_policy_type_select.html:50 #: templates/generic_delete_confirmation.html:19 @@ -266,20 +266,28 @@ msgstr "Erlaubte Gruppen" msgid "Authentication Methods" msgstr "Authentifizierungsmethoden" -#: app_gateway/forms.py:185 +#: app_gateway/forms.py:188 msgid "Cannot select more than one Local Password authentication method." msgstr "" "Es kann nicht mehr als eine lokale Passwort-Authentifizierungsmethode " "ausgewählt werden." -#: app_gateway/forms.py:189 +#: app_gateway/forms.py:192 msgid "" "Cannot select more than one OpenID Connect (OIDC) authentication method." msgstr "" "Es kann nicht mehr als eine OpenID Connect (OIDC)-Authentifizierungsmethode " "ausgewählt werden." -#: app_gateway/forms.py:193 +#: app_gateway/forms.py:196 +#, fuzzy +#| msgid "Cannot select more than one Local Password authentication method." +msgid "Cannot select more than one TOTP authentication method." +msgstr "" +"Es kann nicht mehr als eine lokale Passwort-Authentifizierungsmethode " +"ausgewählt werden." + +#: app_gateway/forms.py:200 msgid "" "Cannot select both Local Password and OpenID Connect (OIDC) authentication " "methods." @@ -287,7 +295,19 @@ msgstr "" "Die Authentifizierungsmethoden \"Lokales Passwort\" und OpenID Connect " "(OIDC) können nicht gleichzeitig ausgewählt werden." -#: app_gateway/forms.py:197 +#: app_gateway/forms.py:204 +#, fuzzy +#| msgid "" +#| "Cannot select both Local Password and OpenID Connect (OIDC) " +#| "authentication methods." +msgid "" +"TOTP must be combined with a Local Password or OpenID Connect authentication " +"method." +msgstr "" +"Die Authentifizierungsmethoden \"Lokales Passwort\" und OpenID Connect " +"(OIDC) können nicht gleichzeitig ausgewählt werden." + +#: app_gateway/forms.py:208 msgid "" "At least one user group must be selected when using Local Password " "authentication." @@ -295,31 +315,31 @@ msgstr "" "Bei Verwendung der lokalen Passwort-Authentifizierung muss mindestens eine " "Benutzergruppe ausgewählt werden." -#: app_gateway/forms.py:201 +#: app_gateway/forms.py:212 msgid "User groups can only be used with Local Password authentication." msgstr "" "Benutzergruppen können nur mit der lokalen Passwort-Authentifizierung " "verwendet werden." -#: app_gateway/forms.py:211 templates/app_gateway/app_gateway_list.html:62 +#: app_gateway/forms.py:222 templates/app_gateway/app_gateway_list.html:62 #: templates/app_gateway/application_details.html:31 #: templates/firewall/firewall_nav_tabs.html:15 msgid "Default Policy" msgstr "Standard‑Richtlinie" -#: app_gateway/forms.py:240 templates/app_gateway/application_details.html:105 +#: app_gateway/forms.py:251 templates/app_gateway/application_details.html:105 msgid "Route Name" msgstr "Routenname" -#: app_gateway/forms.py:241 templates/app_gateway/application_details.html:106 +#: app_gateway/forms.py:252 templates/app_gateway/application_details.html:106 msgid "Path Prefix" msgstr "Pfadpräfix" -#: app_gateway/forms.py:242 templates/app_gateway/application_details.html:107 +#: app_gateway/forms.py:253 templates/app_gateway/application_details.html:107 msgid "Policy" msgstr "Richtlinie" -#: app_gateway/forms.py:243 templates/app_gateway/application_details.html:108 +#: app_gateway/forms.py:254 templates/app_gateway/application_details.html:108 msgid "Order" msgstr "Reihenfolge" @@ -337,9 +357,9 @@ msgstr "Öffentlich" msgid "Protected" msgstr "Geschützt" -#: app_gateway/models.py:45 gatekeeper/models.py:110 +#: app_gateway/models.py:45 gatekeeper/models.py:108 #: templates/app_gateway/access_policy_type_select.html:41 -#: templates/gatekeeper/gatekeeper_list.html:272 +#: templates/gatekeeper/gatekeeper_list.html:288 msgid "Deny" msgstr "Verweigern" @@ -627,11 +647,11 @@ msgid "Are you sure you want to delete the route \"%(name)s\" (%(path)s)?" msgstr "" "Sind Sie sicher, dass Sie die Route \"%(name)s\" (%(path)s) löschen möchten?" -#: app_gateway/views.py:444 +#: app_gateway/views.py:443 msgid "Configuration exported successfully." msgstr "Konfiguration erfolgreich exportiert." -#: app_gateway/views.py:446 +#: app_gateway/views.py:445 msgid "" "Caddy is not active. Configuration files were exported for debugging " "purposes." @@ -643,13 +663,13 @@ msgstr "" msgid "IP Lock" msgstr "IP-Sperre" -#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:198 +#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:271 #: templates/cluster/workers_list.html:10 #: templates/dns/static_host_list.html:18 #: templates/firewall/manage_redirect_rule.html:43 #: templates/firewall/manage_redirect_rule.html:67 #: templates/firewall/manage_redirect_rule.html:68 -#: templates/gatekeeper/gatekeeper_list.html:256 +#: templates/gatekeeper/gatekeeper_list.html:272 #: templates/wireguard/wireguard_status.html:45 msgid "IP Address" msgstr "IP‑Adresse" @@ -926,7 +946,7 @@ msgstr "Statischer DNS" msgid "Invalid hostname." msgstr "Ungültiger Hostname." -#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:201 +#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:274 #: templates/api_v2/api_documentation.html:51 #: templates/dns/static_host_list.html:69 #: templates/firewall/manage_redirect_rule.html:18 @@ -1261,43 +1281,29 @@ msgstr "Firewall‑Einstellungen verwalten" msgid "Firewall settings saved successfully" msgstr "Firewall‑Einstellungen erfolgreich gespeichert" -#: gatekeeper/forms.py:17 templates/accounts/login.html:14 -#: templates/gatekeeper/gatekeeper_list.html:61 -#: templates/user_manager/list.html:8 user_manager/forms.py:13 -#: vpn_invite/forms.py:281 -msgid "Username" -msgstr "Benutzername" - -#: gatekeeper/forms.py:18 gatekeeper/forms.py:271 -#: templates/gatekeeper/gatekeeper_list.html:62 -#: templates/gatekeeper/gatekeeper_list.html:204 -#: templates/wireguard/peer_list/peer_preview_modal.html:103 -msgid "Email" -msgstr "E‑Mail" - -#: gatekeeper/forms.py:19 templates/accounts/login.html:23 +#: gatekeeper/forms.py:17 templates/accounts/login.html:23 #: templates/vpn_invite/invite_settings.html:19 user_manager/forms.py:14 #: vpn_invite/forms.py:282 msgid "Password" msgstr "Passwort" #: gatekeeper/forms.py:20 -msgid "TOTP Secret" -msgstr "TOTP-Geheimnis" +msgid "" +"Minimum 8 characters, with at least one uppercase letter, one lowercase " +"letter, and one number." +msgstr "" -#: gatekeeper/forms.py:55 templates/gatekeeper/gatekeeper_list.html:104 -msgid "Group Name" -msgstr "Gruppenname" +#: gatekeeper/forms.py:23 +#, fuzzy +#| msgid "Random Password" +msgid "Confirm Password" +msgstr "Zufallspasswort" -#: gatekeeper/forms.py:56 templates/gatekeeper/gatekeeper_list.html:105 -msgid "Members" -msgstr "Mitglieder" - -#: gatekeeper/forms.py:86 +#: gatekeeper/forms.py:28 gatekeeper/forms.py:161 msgid "TOTP Validation PIN" msgstr "TOTP-Validierungs-PIN" -#: gatekeeper/forms.py:89 +#: gatekeeper/forms.py:31 gatekeeper/forms.py:164 msgid "" "Enter a 6-digit PIN generated by your authenticator app to validate the " "secret." @@ -1305,98 +1311,154 @@ msgstr "" "Geben Sie eine 6-stellige PIN ein, die von Ihrer Authenticator-App generiert " "wurde, um das Geheimnis zu validieren." -#: gatekeeper/forms.py:100 +#: gatekeeper/forms.py:38 templates/accounts/login.html:14 +#: templates/gatekeeper/gatekeeper_list.html:61 +#: templates/user_manager/list.html:8 user_manager/forms.py:13 +#: vpn_invite/forms.py:281 +msgid "Username" +msgstr "Benutzername" + +#: gatekeeper/forms.py:39 gatekeeper/forms.py:344 +#: templates/gatekeeper/gatekeeper_list.html:62 +#: templates/gatekeeper/gatekeeper_list.html:220 +#: templates/wireguard/peer_list/peer_preview_modal.html:103 +msgid "Email" +msgstr "E‑Mail" + +#: gatekeeper/forms.py:40 +msgid "TOTP Secret" +msgstr "TOTP-Geheimnis" + +#: gatekeeper/forms.py:87 +#, fuzzy +#| msgid "Port is required." +msgid "Password is required." +msgstr "Port ist erforderlich." + +#: gatekeeper/forms.py:90 user_manager/forms.py:127 +msgid "Password must be at least 8 characters long." +msgstr "Das Passwort muss mindestens 8 Zeichen lang sein." + +#: gatekeeper/forms.py:92 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one lowercase letter." +msgstr "Das Passwort muss mindestens 8 Zeichen lang sein." + +#: gatekeeper/forms.py:94 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one uppercase letter." +msgstr "Das Passwort muss mindestens 8 Zeichen lang sein." + +#: gatekeeper/forms.py:96 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one number." +msgstr "Das Passwort muss mindestens 8 Zeichen lang sein." + +#: gatekeeper/forms.py:98 +#, fuzzy +#| msgid "Password Confirmation" +msgid "Passwords do not match." +msgstr "Passwortbestätigung" + +#: gatekeeper/forms.py:103 gatekeeper/forms.py:249 +msgid "Please provide a PIN to validate the TOTP secret." +msgstr "Bitte geben Sie eine PIN an, um das TOTP-Geheimnis zu validieren." + +#: gatekeeper/forms.py:108 gatekeeper/forms.py:254 +msgid "Invalid TOTP PIN." +msgstr "Ungültige TOTP-PIN." + +#: gatekeeper/forms.py:110 gatekeeper/forms.py:256 +msgid "Invalid TOTP secret format. Must be a valid Base32 string." +msgstr "" +"Ungültiges TOTP-Geheimnisformat. Muss eine gültige Base32-Zeichenfolge sein." + +#: gatekeeper/forms.py:130 templates/gatekeeper/gatekeeper_list.html:120 +msgid "Group Name" +msgstr "Gruppenname" + +#: gatekeeper/forms.py:131 templates/gatekeeper/gatekeeper_list.html:121 +msgid "Members" +msgstr "Mitglieder" + +#: gatekeeper/forms.py:175 msgid "Authentication Type" msgstr "Authentifizierungstyp" -#: gatekeeper/forms.py:101 +#: gatekeeper/forms.py:176 msgid "Global TOTP Secret" msgstr "Globales TOTP-Geheimnis" -#: gatekeeper/forms.py:102 -msgid "Global TOTP Before Authentication" -msgstr "Globales TOTP vor der Authentifizierung" - -#: gatekeeper/forms.py:103 +#: gatekeeper/forms.py:177 msgid "OIDC Provider URL" msgstr "OIDC-Anbieter-URL" -#: gatekeeper/forms.py:104 +#: gatekeeper/forms.py:178 msgid "OIDC Client ID" msgstr "OIDC-Client-ID" -#: gatekeeper/forms.py:105 +#: gatekeeper/forms.py:179 msgid "OIDC Client Secret" msgstr "OIDC-Client-Geheimnis" -#: gatekeeper/forms.py:157 +#: gatekeeper/forms.py:230 msgid "TOTP secret must be empty for Local Password authentication." msgstr "" "Das TOTP-Geheimnis muss für die Authentifizierung mit lokalem Passwort leer " "sein." -#: gatekeeper/forms.py:159 +#: gatekeeper/forms.py:232 msgid "TOTP validation PIN must be empty for Local Password authentication." msgstr "" "Die TOTP-Validierungs-PIN muss für die Authentifizierung mit lokalem " "Passwort leer sein." -#: gatekeeper/forms.py:161 +#: gatekeeper/forms.py:234 msgid "OIDC fields must be empty for Local Password authentication." msgstr "" "OIDC-Felder müssen für die Authentifizierung mit lokalem Passwort leer sein." -#: gatekeeper/forms.py:167 +#: gatekeeper/forms.py:240 msgid "Only one Local Password authentication method can be configured." msgstr "" "Es kann nur eine Authentifizierungsmethode mit lokalem Passwort konfiguriert " "werden." -#: gatekeeper/forms.py:170 +#: gatekeeper/forms.py:243 msgid "OIDC fields must be empty for TOTP authentication." msgstr "OIDC-Felder müssen für die TOTP-Authentifizierung leer sein." -#: gatekeeper/forms.py:172 +#: gatekeeper/forms.py:245 msgid "TOTP secret is required for TOTP authentication." msgstr "Das TOTP-Geheimnis ist für die TOTP-Authentifizierung erforderlich." -#: gatekeeper/forms.py:176 -msgid "Please provide a PIN to validate the TOTP secret." -msgstr "Bitte geben Sie eine PIN an, um das TOTP-Geheimnis zu validieren." - -#: gatekeeper/forms.py:181 -msgid "Invalid TOTP PIN." -msgstr "Ungültige TOTP-PIN." - -#: gatekeeper/forms.py:183 -msgid "Invalid TOTP secret format. Must be a valid Base32 string." -msgstr "" -"Ungültiges TOTP-Geheimnisformat. Muss eine gültige Base32-Zeichenfolge sein." - -#: gatekeeper/forms.py:186 +#: gatekeeper/forms.py:259 msgid "TOTP secret must be empty for OIDC authentication." msgstr "Das TOTP-Geheimnis muss für die OIDC-Authentifizierung leer sein." -#: gatekeeper/forms.py:188 +#: gatekeeper/forms.py:261 msgid "TOTP validation PIN must be empty for OIDC authentication." msgstr "" "Die TOTP-Validierungs-PIN muss für die OIDC-Authentifizierung leer sein." -#: gatekeeper/forms.py:197 gatekeeper/forms.py:239 gatekeeper/forms.py:270 +#: gatekeeper/forms.py:270 gatekeeper/forms.py:312 gatekeeper/forms.py:343 msgid "Authentication Method" msgstr "Authentifizierungsmethode" -#: gatekeeper/forms.py:199 templates/gatekeeper/gatekeeper_list.html:257 +#: gatekeeper/forms.py:272 templates/gatekeeper/gatekeeper_list.html:273 msgid "Prefix Length" msgstr "Präfixlänge" -#: gatekeeper/forms.py:200 templates/firewall/firewall_rule_list.html:47 +#: gatekeeper/forms.py:273 templates/firewall/firewall_rule_list.html:47 #: templates/firewall/manage_firewall_rule.html:360 -#: templates/gatekeeper/gatekeeper_list.html:258 +#: templates/gatekeeper/gatekeeper_list.html:274 msgid "Action" msgstr "Aktion" -#: gatekeeper/forms.py:240 templates/gatekeeper/gatekeeper_list.html:221 +#: gatekeeper/forms.py:313 templates/gatekeeper/gatekeeper_list.html:237 msgid "Domain" msgstr "Domäne" @@ -1420,16 +1482,16 @@ msgstr "IP-Adressliste" msgid "Shared/global TOTP secret key" msgstr "Gemeinsamer/globaler TOTP-Geheimschlüssel" -#: gatekeeper/models.py:69 +#: gatekeeper/models.py:68 msgid "Password for local authentication (leave blank if not using)" msgstr "" "Passwort für die lokale Authentifizierung (leer lassen, wenn nicht verwendet)" -#: gatekeeper/models.py:71 +#: gatekeeper/models.py:69 msgid "Per-user TOTP secret key" msgstr "Benutzerspezifischer TOTP-Geheimschlüssel" -#: gatekeeper/models.py:110 templates/gatekeeper/gatekeeper_list.html:270 +#: gatekeeper/models.py:108 templates/gatekeeper/gatekeeper_list.html:286 msgid "Allow" msgstr "Zulassen" @@ -1445,58 +1507,103 @@ msgstr "Gatekeeper-Benutzer erstellen" msgid "Gatekeeper User saved successfully." msgstr "Gatekeeper-Benutzer erfolgreich gespeichert." -#: gatekeeper/views.py:86 +#: gatekeeper/views.py:69 +msgid "" +"\n" +"

Gatekeeper User

\n" +"

Gatekeeper users are used for authenticating against protected " +"applications managed by this gateway.

\n" +"\n" +"
Password
\n" +"

Required when creating a user. When editing, leave both password " +"fields blank to keep the current password.\n" +" Passwords are stored using Argon2id hashing.

\n" +"\n" +"
TOTP Secret
\n" +"

Optional per-user TOTP secret. When set, this user will " +"authenticate using their own secret instead of the\n" +" global TOTP secret configured on the Authentication Method. Use the " +"buttons below the field to generate a\n" +" random secret and scan the QR code with your authenticator app. " +"Validate the secret by entering the current\n" +" 6-digit PIN before saving.

\n" +" " +msgstr "" + +#: gatekeeper/views.py:106 msgid "Gatekeeper User deleted successfully." msgstr "Gatekeeper-Benutzer erfolgreich gelöscht." -#: gatekeeper/views.py:91 +#: gatekeeper/views.py:111 msgid "Delete Gatekeeper User" msgstr "Gatekeeper-Benutzer löschen" -#: gatekeeper/views.py:93 +#: gatekeeper/views.py:113 #, python-format msgid "Are you sure you want to delete the user \"%(username)s\"?" msgstr "" "Sind Sie sicher, dass Sie den Benutzer \"%(username)s\" löschen möchten?" -#: gatekeeper/views.py:107 +#: gatekeeper/views.py:127 msgid "Edit Gatekeeper Group" msgstr "Gatekeeper-Gruppe bearbeiten" -#: gatekeeper/views.py:110 +#: gatekeeper/views.py:130 msgid "Create Gatekeeper Group" msgstr "Gatekeeper-Gruppe erstellen" -#: gatekeeper/views.py:117 +#: gatekeeper/views.py:137 msgid "Gatekeeper Group saved successfully." msgstr "Gatekeeper-Gruppe erfolgreich gespeichert." -#: gatekeeper/views.py:139 +#: gatekeeper/views.py:159 msgid "Gatekeeper Group deleted successfully." msgstr "Gatekeeper-Gruppe erfolgreich gelöscht." -#: gatekeeper/views.py:144 +#: gatekeeper/views.py:164 msgid "Delete Gatekeeper Group" msgstr "Gatekeeper-Gruppe löschen" -#: gatekeeper/views.py:146 +#: gatekeeper/views.py:166 #, python-format msgid "Are you sure you want to delete the group \"%(name)s\"?" msgstr "Sind Sie sicher, dass Sie die Gruppe \"%(name)s\" löschen möchten?" -#: gatekeeper/views.py:160 +#: gatekeeper/views.py:180 msgid "Edit Authentication Method" msgstr "Authentifizierungsmethode bearbeiten" -#: gatekeeper/views.py:163 +#: gatekeeper/views.py:183 msgid "Create Authentication Method" msgstr "Authentifizierungsmethode erstellen" -#: gatekeeper/views.py:170 +#: gatekeeper/views.py:190 msgid "Authentication Method saved successfully." msgstr "Authentifizierungsmethode erfolgreich gespeichert." -#: gatekeeper/views.py:175 +#: gatekeeper/views.py:195 +#, fuzzy +#| msgid "" +#| "\n" +#| "

Authentication Types

\n" +#| "

Select how users will authenticate through this method.

\n" +#| " \n" +#| "
Local Password
\n" +#| "

Users will authenticate using a standard username and password " +#| "stored locally. Only one of this type can be created.

\n" +#| " \n" +#| "
OIDC (OpenID Connect)
\n" +#| "

Users will authenticate via an external identity provider " +#| "(like Keycloak, Google, or Authelia). Requires Provider URL, Client ID, " +#| "and Client Secret.

\n" +#| " \n" +#| "
TOTP (Time-Based One-Time Password)
\n" +#| "

Users will need to enter a rotating token from an " +#| "authenticator app. Requires setting a Global TOTP Secret.
If " +#| "Global TOTP Before Authentication is enabled, the PIN is " +#| "required before the username and password to help combat bruteforce " +#| "attacks.

\n" +#| " " msgid "" "\n" "

Authentication Types

\n" @@ -1513,9 +1620,8 @@ msgid "" " \n" "
TOTP (Time-Based One-Time Password)
\n" "

Users will need to enter a rotating token from an authenticator " -"app. Requires setting a Global TOTP Secret.
If Global TOTP " -"Before Authentication is enabled, the PIN is required before the " -"username and password to help combat bruteforce attacks.

\n" +"app. If a user does not have a personal TOTP configured, the Global " +"TOTP Secret will be used instead.

\n" " " msgstr "" "\n" @@ -1541,88 +1647,88 @@ msgstr "" "Force-Angriffe zu bekämpfen.

\n" " " -#: gatekeeper/views.py:210 +#: gatekeeper/views.py:230 msgid "Authentication Method deleted successfully." msgstr "Authentifizierungsmethode erfolgreich gelöscht." -#: gatekeeper/views.py:215 +#: gatekeeper/views.py:235 msgid "Delete Authentication Method" msgstr "Authentifizierungsmethode löschen" -#: gatekeeper/views.py:217 +#: gatekeeper/views.py:237 #, python-format msgid "Are you sure you want to delete the authentication method \"%(name)s\"?" msgstr "" "Sind Sie sicher, dass Sie die Authentifizierungsmethode \"%(name)s\" löschen " "möchten?" -#: gatekeeper/views.py:267 +#: gatekeeper/views.py:287 msgid "Edit Allowed Domain" msgstr "Zulässige Domäne bearbeiten" -#: gatekeeper/views.py:270 templates/gatekeeper/gatekeeper_list.html:186 +#: gatekeeper/views.py:290 templates/gatekeeper/gatekeeper_list.html:202 msgid "Add Allowed Domain" msgstr "Zulässige Domäne hinzufügen" -#: gatekeeper/views.py:277 +#: gatekeeper/views.py:297 msgid "Allowed Domain saved successfully." msgstr "Zulässige Domäne erfolgreich gespeichert." -#: gatekeeper/views.py:299 +#: gatekeeper/views.py:319 msgid "Allowed Domain deleted successfully." msgstr "Zulässige Domäne erfolgreich gelöscht." -#: gatekeeper/views.py:304 +#: gatekeeper/views.py:324 msgid "Delete Allowed Domain" msgstr "Zulässige Domäne löschen" -#: gatekeeper/views.py:306 +#: gatekeeper/views.py:326 #, python-format msgid "Are you sure you want to delete the allowed domain \"%(domain)s\"?" msgstr "" "Sind Sie sicher, dass Sie die zulässige Domäne \"%(domain)s\" löschen " "möchten?" -#: gatekeeper/views.py:320 +#: gatekeeper/views.py:340 msgid "Edit Allowed Email" msgstr "Zulässige E-Mail bearbeiten" -#: gatekeeper/views.py:323 templates/gatekeeper/gatekeeper_list.html:183 +#: gatekeeper/views.py:343 templates/gatekeeper/gatekeeper_list.html:199 msgid "Add Allowed Email" msgstr "Zulässige E-Mail hinzufügen" -#: gatekeeper/views.py:330 +#: gatekeeper/views.py:350 msgid "Allowed Email saved successfully." msgstr "Zulässige E-Mail erfolgreich gespeichert." -#: gatekeeper/views.py:352 +#: gatekeeper/views.py:372 msgid "Allowed Email deleted successfully." msgstr "Zulässige E-Mail erfolgreich gelöscht." -#: gatekeeper/views.py:357 +#: gatekeeper/views.py:377 msgid "Delete Allowed Email" msgstr "Zulässige E-Mail löschen" -#: gatekeeper/views.py:359 +#: gatekeeper/views.py:379 #, python-format msgid "Are you sure you want to delete the allowed email \"%(email)s\"?" msgstr "" "Sind Sie sicher, dass Sie die zulässige E-Mail \"%(email)s\" löschen möchten?" -#: gatekeeper/views.py:373 +#: gatekeeper/views.py:393 msgid "Edit IP Address" msgstr "IP-Adresse bearbeiten" -#: gatekeeper/views.py:376 templates/gatekeeper/gatekeeper_list.html:247 +#: gatekeeper/views.py:396 templates/gatekeeper/gatekeeper_list.html:263 #: templates/wireguard/wireguard_manage_peer.html:171 msgid "Add IP Address" msgstr "IP‑Adresse hinzufügen" -#: gatekeeper/views.py:383 +#: gatekeeper/views.py:403 msgid "IP Address saved successfully." msgstr "IP-Adresse erfolgreich gespeichert." -#: gatekeeper/views.py:388 +#: gatekeeper/views.py:408 msgid "" "\n" "
IP Address List
\n" @@ -1669,15 +1775,15 @@ msgstr "" "„Büronetzwerk“, „Blockierter Angreifer“).

\n" " " -#: gatekeeper/views.py:424 +#: gatekeeper/views.py:444 msgid "IP Address deleted successfully." msgstr "IP-Adresse erfolgreich gelöscht." -#: gatekeeper/views.py:429 +#: gatekeeper/views.py:449 msgid "Delete IP Address" msgstr "IP-Adresse löschen" -#: gatekeeper/views.py:431 +#: gatekeeper/views.py:451 #, python-format msgid "Are you sure you want to delete the IP address \"%(address)s\"?" msgstr "" @@ -2045,8 +2151,8 @@ msgid "In" msgstr "Eingehend" #: templates/api_v2/api_documentation.html:49 -#: templates/gatekeeper/gatekeeper_list.html:150 -#: templates/gatekeeper/gatekeeper_list.html:195 +#: templates/gatekeeper/gatekeeper_list.html:166 +#: templates/gatekeeper/gatekeeper_list.html:211 #: templates/wireguard/apply_route_template.html:27 msgid "Type" msgstr "Typ" @@ -2056,11 +2162,13 @@ msgid "Required" msgstr "Erforderlich" #: templates/api_v2/api_documentation.html:62 +#: templates/gatekeeper/gatekeeper_list.html:75 #: templates/scheduler/scheduleprofile_form.html:175 msgid "Yes" msgstr "Ja" #: templates/api_v2/api_documentation.html:64 +#: templates/gatekeeper/gatekeeper_list.html:77 #: templates/scheduler/scheduleprofile_form.html:177 msgid "No" msgstr "Nein" @@ -2104,12 +2212,12 @@ msgstr "Deaktiviert" #: templates/app_gateway/application_details.html:121 #: templates/cluster/workers_list.html:77 #: templates/dns/static_host_list.html:74 -#: templates/gatekeeper/gatekeeper_list.html:73 -#: templates/gatekeeper/gatekeeper_list.html:116 -#: templates/gatekeeper/gatekeeper_list.html:161 -#: templates/gatekeeper/gatekeeper_list.html:209 -#: templates/gatekeeper/gatekeeper_list.html:226 -#: templates/gatekeeper/gatekeeper_list.html:278 +#: templates/gatekeeper/gatekeeper_list.html:89 +#: templates/gatekeeper/gatekeeper_list.html:132 +#: templates/gatekeeper/gatekeeper_list.html:177 +#: templates/gatekeeper/gatekeeper_list.html:225 +#: templates/gatekeeper/gatekeeper_list.html:242 +#: templates/gatekeeper/gatekeeper_list.html:294 #: templates/routing_templates/list.html:29 #: templates/scheduler/scheduleprofile_form.html:123 #: templates/scheduler/scheduleprofile_list.html:25 @@ -2192,6 +2300,7 @@ msgstr "Zugriffsrichtlinie hinzufügen" #: templates/app_gateway/app_gateway_list.html:140 #: templates/gatekeeper/gatekeeper_list.html:43 +#: templates/gatekeeper/gatekeeper_list.html:64 msgid "Groups" msgstr "Gruppen" @@ -2202,10 +2311,10 @@ msgstr "Authentifizierungsmethoden" #: templates/app_gateway/app_gateway_list.html:142 #: templates/app_gateway/application_details.html:62 #: templates/app_gateway/application_details.html:109 -#: templates/gatekeeper/gatekeeper_list.html:63 -#: templates/gatekeeper/gatekeeper_list.html:106 -#: templates/gatekeeper/gatekeeper_list.html:151 -#: templates/gatekeeper/gatekeeper_list.html:198 +#: templates/gatekeeper/gatekeeper_list.html:65 +#: templates/gatekeeper/gatekeeper_list.html:122 +#: templates/gatekeeper/gatekeeper_list.html:167 +#: templates/gatekeeper/gatekeeper_list.html:214 #: templates/scheduler/scheduleprofile_form.html:111 #: templates/scheduler/scheduleprofile_list.html:15 #: templates/wireguard/apply_route_template.html:28 @@ -2760,10 +2869,19 @@ msgid "Create Port forwarding Rule" msgstr "Port‑Weiterleitungsregel erstellen" #: templates/gatekeeper/gatekeeper_auth_method_form.html:63 +#: templates/gatekeeper/gatekeeper_user_form.html:43 msgid "View QR Code" msgstr "QR-Code anzeigen" -#: templates/gatekeeper/gatekeeper_auth_method_form.html:74 +#: templates/gatekeeper/gatekeeper_auth_method_form.html:64 +#: templates/gatekeeper/gatekeeper_user_form.html:44 +#, fuzzy +#| msgid "Global TOTP Secret" +msgid "Generate TOTP Secret" +msgstr "Globales TOTP-Geheimnis" + +#: templates/gatekeeper/gatekeeper_auth_method_form.html:93 +#: templates/gatekeeper/gatekeeper_user_form.html:73 msgid "Please enter a TOTP Secret first to generate the QR code." msgstr "" "Bitte geben Sie zuerst ein TOTP-Geheimnis ein, um den QR-Code zu generieren." @@ -2790,44 +2908,48 @@ msgstr "Benutzer" msgid "Add User" msgstr "Benutzer hinzufügen" -#: templates/gatekeeper/gatekeeper_list.html:88 +#: templates/gatekeeper/gatekeeper_list.html:63 +msgid "TOTP" +msgstr "" + +#: templates/gatekeeper/gatekeeper_list.html:104 msgid "No Gatekeeper Users found." msgstr "Keine Gatekeeper-Benutzer gefunden." -#: templates/gatekeeper/gatekeeper_list.html:95 +#: templates/gatekeeper/gatekeeper_list.html:111 msgid "Add Group" msgstr "Gruppe hinzufügen" -#: templates/gatekeeper/gatekeeper_list.html:131 +#: templates/gatekeeper/gatekeeper_list.html:147 msgid "No Gatekeeper Groups found." msgstr "Keine Gatekeeper-Gruppen gefunden." -#: templates/gatekeeper/gatekeeper_list.html:140 +#: templates/gatekeeper/gatekeeper_list.html:156 msgid "Add Auth Method" msgstr "Authentifizierungsmethode hinzufügen" -#: templates/gatekeeper/gatekeeper_list.html:176 +#: templates/gatekeeper/gatekeeper_list.html:192 msgid "No Authentication Methods found." msgstr "Keine Authentifizierungsmethoden gefunden." -#: templates/gatekeeper/gatekeeper_list.html:196 +#: templates/gatekeeper/gatekeeper_list.html:212 msgid "Identity" msgstr "Identität" -#: templates/gatekeeper/gatekeeper_list.html:197 -#: templates/gatekeeper/gatekeeper_list.html:259 +#: templates/gatekeeper/gatekeeper_list.html:213 +#: templates/gatekeeper/gatekeeper_list.html:275 msgid "Auth Method" msgstr "Authentifizierungsmethode" -#: templates/gatekeeper/gatekeeper_list.html:241 +#: templates/gatekeeper/gatekeeper_list.html:257 msgid "No Allowed Emails or Domains found." msgstr "Keine zulässigen E-Mails oder Domänen gefunden." -#: templates/gatekeeper/gatekeeper_list.html:260 +#: templates/gatekeeper/gatekeeper_list.html:276 msgid "Manage" msgstr "Verwalten" -#: templates/gatekeeper/gatekeeper_list.html:293 +#: templates/gatekeeper/gatekeeper_list.html:309 msgid "No IP Addresses found." msgstr "Keine IP-Adressen gefunden." @@ -3666,10 +3788,6 @@ msgstr "Für neue Benutzer ist eine Passwortbestätigung erforderlich." msgid "The two password fields didn't match." msgstr "Die beiden Passwortfelder stimmen nicht überein." -#: user_manager/forms.py:127 -msgid "Password must be at least 8 characters long." -msgstr "Das Passwort muss mindestens 8 Zeichen lang sein." - #: user_manager/forms.py:220 msgid "A peer group with that name already exists." msgstr "Eine Peer‑Gruppe mit diesem Namen existiert bereits." @@ -4452,3 +4570,6 @@ msgid "No interfaces found|No WireGuard interfaces were found to process." msgstr "" "Keine Schnittstellen gefunden|Es wurden keine WireGuard‑Schnittstellen " "gefunden." + +#~ msgid "Global TOTP Before Authentication" +#~ msgstr "Globales TOTP vor der Authentifizierung" diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo index 20febed..e4e5c00 100644 Binary files a/locale/es/LC_MESSAGES/django.mo and b/locale/es/LC_MESSAGES/django.mo differ diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index 90dfbda..1fc51a4 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-14 11:54-0300\n" +"POT-Creation-Date: 2026-03-15 17:20-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,12 +38,12 @@ msgstr "Volver" #: templates/app_gateway/application_details.html:125 #: templates/firewall/manage_firewall_rule.html:382 #: templates/firewall/manage_redirect_rule.html:86 -#: templates/gatekeeper/gatekeeper_list.html:77 -#: templates/gatekeeper/gatekeeper_list.html:120 -#: templates/gatekeeper/gatekeeper_list.html:165 -#: templates/gatekeeper/gatekeeper_list.html:213 -#: templates/gatekeeper/gatekeeper_list.html:230 -#: templates/gatekeeper/gatekeeper_list.html:282 +#: templates/gatekeeper/gatekeeper_list.html:93 +#: templates/gatekeeper/gatekeeper_list.html:136 +#: templates/gatekeeper/gatekeeper_list.html:181 +#: templates/gatekeeper/gatekeeper_list.html:229 +#: templates/gatekeeper/gatekeeper_list.html:246 +#: templates/gatekeeper/gatekeeper_list.html:298 #: templates/scheduler/scheduleprofile_form.html:127 #: templates/scheduler/scheduleprofile_list.html:29 #: templates/wireguard/peer_list/peer_preview_modal.html:109 @@ -65,11 +65,11 @@ msgstr "" "funcionar inmediatamente." #: api_v2/forms.py:63 app_gateway/forms.py:40 app_gateway/forms.py:92 -#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:226 -#: app_gateway/forms.py:267 cluster/forms.py:67 cluster/forms.py:124 -#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:41 -#: gatekeeper/forms.py:75 gatekeeper/forms.py:139 gatekeeper/forms.py:226 -#: gatekeeper/forms.py:256 gatekeeper/forms.py:287 +#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:237 +#: app_gateway/forms.py:278 cluster/forms.py:67 cluster/forms.py:124 +#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:70 +#: gatekeeper/forms.py:150 gatekeeper/forms.py:212 gatekeeper/forms.py:299 +#: gatekeeper/forms.py:329 gatekeeper/forms.py:360 #: routing_templates/forms.py:71 scheduler/forms.py:102 #: templates/firewall/manage_firewall_rule.html:379 #: templates/firewall/manage_firewall_settings.html:59 @@ -83,13 +83,13 @@ msgid "Save" msgstr "Guardar" #: api_v2/models.py:10 app_gateway/forms.py:18 app_gateway/forms.py:106 -#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:99 +#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:174 #: routing_templates/forms.py:28 templates/api_v2/api_documentation.html:47 #: templates/api_v2/list.html:8 templates/app_gateway/app_gateway_list.html:58 #: templates/app_gateway/app_gateway_list.html:138 #: templates/app_gateway/application_details.html:26 #: templates/cluster/workers_list.html:8 templates/dns/static_host_list.html:68 -#: templates/gatekeeper/gatekeeper_list.html:149 +#: templates/gatekeeper/gatekeeper_list.html:165 #: templates/routing_templates/list.html:8 #: templates/scheduler/scheduleprofile_list.html:13 #: templates/user_manager/peer_group_list.html:8 @@ -133,10 +133,10 @@ msgstr "Habilitado" #: app_gateway/views.py:293 app_gateway/views.py:328 app_gateway/views.py:354 #: app_gateway/views.py:404 app_gateway/views.py:432 cluster/views.py:18 #: cluster/views.py:45 cluster/views.py:114 gatekeeper/views.py:23 -#: gatekeeper/views.py:48 gatekeeper/views.py:78 gatekeeper/views.py:101 -#: gatekeeper/views.py:131 gatekeeper/views.py:154 gatekeeper/views.py:202 -#: gatekeeper/views.py:261 gatekeeper/views.py:291 gatekeeper/views.py:314 -#: gatekeeper/views.py:344 gatekeeper/views.py:367 gatekeeper/views.py:416 +#: gatekeeper/views.py:48 gatekeeper/views.py:98 gatekeeper/views.py:121 +#: gatekeeper/views.py:151 gatekeeper/views.py:174 gatekeeper/views.py:222 +#: gatekeeper/views.py:281 gatekeeper/views.py:311 gatekeeper/views.py:334 +#: gatekeeper/views.py:364 gatekeeper/views.py:387 gatekeeper/views.py:436 #: templates/access_denied.html:9 msgid "Access Denied" msgstr "Acceso denegado" @@ -217,9 +217,9 @@ msgid "Upstream" msgstr "Upstream" #: app_gateway/forms.py:41 app_gateway/forms.py:93 app_gateway/forms.py:137 -#: app_gateway/forms.py:155 app_gateway/forms.py:227 app_gateway/forms.py:268 -#: gatekeeper/forms.py:42 gatekeeper/forms.py:76 gatekeeper/forms.py:140 -#: gatekeeper/forms.py:227 gatekeeper/forms.py:257 gatekeeper/forms.py:288 +#: app_gateway/forms.py:155 app_gateway/forms.py:238 app_gateway/forms.py:279 +#: gatekeeper/forms.py:71 gatekeeper/forms.py:151 gatekeeper/forms.py:213 +#: gatekeeper/forms.py:300 gatekeeper/forms.py:330 gatekeeper/forms.py:361 #: scheduler/forms.py:103 #: templates/app_gateway/access_policy_type_select.html:50 #: templates/generic_delete_confirmation.html:19 @@ -264,20 +264,28 @@ msgstr "Grupos permitidos" msgid "Authentication Methods" msgstr "Métodos de autenticación" -#: app_gateway/forms.py:185 +#: app_gateway/forms.py:188 msgid "Cannot select more than one Local Password authentication method." msgstr "" "No se puede seleccionar más de un método de autenticación de Contraseña " "Local." -#: app_gateway/forms.py:189 +#: app_gateway/forms.py:192 msgid "" "Cannot select more than one OpenID Connect (OIDC) authentication method." msgstr "" "No se puede seleccionar más de un método de autenticação OpenID Connect " "(OIDC)." -#: app_gateway/forms.py:193 +#: app_gateway/forms.py:196 +#, fuzzy +#| msgid "Cannot select more than one Local Password authentication method." +msgid "Cannot select more than one TOTP authentication method." +msgstr "" +"No se puede seleccionar más de un método de autenticación de Contraseña " +"Local." + +#: app_gateway/forms.py:200 msgid "" "Cannot select both Local Password and OpenID Connect (OIDC) authentication " "methods." @@ -285,7 +293,19 @@ msgstr "" "No se pueden seleccionar simultáneamente los métodos de autenticación de " "Contraseña Local y OpenID Connect (OIDC)." -#: app_gateway/forms.py:197 +#: app_gateway/forms.py:204 +#, fuzzy +#| msgid "" +#| "Cannot select both Local Password and OpenID Connect (OIDC) " +#| "authentication methods." +msgid "" +"TOTP must be combined with a Local Password or OpenID Connect authentication " +"method." +msgstr "" +"No se pueden seleccionar simultáneamente los métodos de autenticación de " +"Contraseña Local y OpenID Connect (OIDC)." + +#: app_gateway/forms.py:208 msgid "" "At least one user group must be selected when using Local Password " "authentication." @@ -293,31 +313,31 @@ msgstr "" "Se debe seleccionar al menos um grupo de usuarios al usar la autenticación " "de Contraseña Local." -#: app_gateway/forms.py:201 +#: app_gateway/forms.py:212 msgid "User groups can only be used with Local Password authentication." msgstr "" "Los grupos de usuarios solo se pueden usar con la autenticación de " "Contraseña Local." -#: app_gateway/forms.py:211 templates/app_gateway/app_gateway_list.html:62 +#: app_gateway/forms.py:222 templates/app_gateway/app_gateway_list.html:62 #: templates/app_gateway/application_details.html:31 #: templates/firewall/firewall_nav_tabs.html:15 msgid "Default Policy" msgstr "Política predeterminada" -#: app_gateway/forms.py:240 templates/app_gateway/application_details.html:105 +#: app_gateway/forms.py:251 templates/app_gateway/application_details.html:105 msgid "Route Name" msgstr "Nombre de la ruta" -#: app_gateway/forms.py:241 templates/app_gateway/application_details.html:106 +#: app_gateway/forms.py:252 templates/app_gateway/application_details.html:106 msgid "Path Prefix" msgstr "Prefijo de ruta" -#: app_gateway/forms.py:242 templates/app_gateway/application_details.html:107 +#: app_gateway/forms.py:253 templates/app_gateway/application_details.html:107 msgid "Policy" msgstr "Política" -#: app_gateway/forms.py:243 templates/app_gateway/application_details.html:108 +#: app_gateway/forms.py:254 templates/app_gateway/application_details.html:108 msgid "Order" msgstr "Orden" @@ -335,9 +355,9 @@ msgstr "Público" msgid "Protected" msgstr "Protegido" -#: app_gateway/models.py:45 gatekeeper/models.py:110 +#: app_gateway/models.py:45 gatekeeper/models.py:108 #: templates/app_gateway/access_policy_type_select.html:41 -#: templates/gatekeeper/gatekeeper_list.html:272 +#: templates/gatekeeper/gatekeeper_list.html:288 msgid "Deny" msgstr "Denegar" @@ -620,11 +640,11 @@ msgstr "Eliminar ruta de la aplicación" msgid "Are you sure you want to delete the route \"%(name)s\" (%(path)s)?" msgstr "¿Está seguro de que desea eliminar la ruta \"%(name)s\" (%(path)s)?" -#: app_gateway/views.py:444 +#: app_gateway/views.py:443 msgid "Configuration exported successfully." msgstr "Configuración exportada con éxito." -#: app_gateway/views.py:446 +#: app_gateway/views.py:445 msgid "" "Caddy is not active. Configuration files were exported for debugging " "purposes." @@ -636,13 +656,13 @@ msgstr "" msgid "IP Lock" msgstr "Bloqueo de IP" -#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:198 +#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:271 #: templates/cluster/workers_list.html:10 #: templates/dns/static_host_list.html:18 #: templates/firewall/manage_redirect_rule.html:43 #: templates/firewall/manage_redirect_rule.html:67 #: templates/firewall/manage_redirect_rule.html:68 -#: templates/gatekeeper/gatekeeper_list.html:256 +#: templates/gatekeeper/gatekeeper_list.html:272 #: templates/wireguard/wireguard_status.html:45 msgid "IP Address" msgstr "Dirección IP" @@ -919,7 +939,7 @@ msgstr "DNS estático" msgid "Invalid hostname." msgstr "Nombre de host inválido." -#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:201 +#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:274 #: templates/api_v2/api_documentation.html:51 #: templates/dns/static_host_list.html:69 #: templates/firewall/manage_redirect_rule.html:18 @@ -1251,43 +1271,29 @@ msgstr "Gestionar configuración de firewall" msgid "Firewall settings saved successfully" msgstr "Configuración de firewall guardada correctamente" -#: gatekeeper/forms.py:17 templates/accounts/login.html:14 -#: templates/gatekeeper/gatekeeper_list.html:61 -#: templates/user_manager/list.html:8 user_manager/forms.py:13 -#: vpn_invite/forms.py:281 -msgid "Username" -msgstr "Usuario" - -#: gatekeeper/forms.py:18 gatekeeper/forms.py:271 -#: templates/gatekeeper/gatekeeper_list.html:62 -#: templates/gatekeeper/gatekeeper_list.html:204 -#: templates/wireguard/peer_list/peer_preview_modal.html:103 -msgid "Email" -msgstr "Email" - -#: gatekeeper/forms.py:19 templates/accounts/login.html:23 +#: gatekeeper/forms.py:17 templates/accounts/login.html:23 #: templates/vpn_invite/invite_settings.html:19 user_manager/forms.py:14 #: vpn_invite/forms.py:282 msgid "Password" msgstr "Contraseña" #: gatekeeper/forms.py:20 -msgid "TOTP Secret" -msgstr "Secreto TOTP" +msgid "" +"Minimum 8 characters, with at least one uppercase letter, one lowercase " +"letter, and one number." +msgstr "" -#: gatekeeper/forms.py:55 templates/gatekeeper/gatekeeper_list.html:104 -msgid "Group Name" -msgstr "Nombre del grupo" +#: gatekeeper/forms.py:23 +#, fuzzy +#| msgid "Random Password" +msgid "Confirm Password" +msgstr "Contraseña aleatoria" -#: gatekeeper/forms.py:56 templates/gatekeeper/gatekeeper_list.html:105 -msgid "Members" -msgstr "Miembros" - -#: gatekeeper/forms.py:86 +#: gatekeeper/forms.py:28 gatekeeper/forms.py:161 msgid "TOTP Validation PIN" msgstr "PIN de validación TOTP" -#: gatekeeper/forms.py:89 +#: gatekeeper/forms.py:31 gatekeeper/forms.py:164 msgid "" "Enter a 6-digit PIN generated by your authenticator app to validate the " "secret." @@ -1295,95 +1301,151 @@ msgstr "" "Introduzca un PIN de 6 dígitos generado por su aplicación de autenticación " "para validar el secreto." -#: gatekeeper/forms.py:100 +#: gatekeeper/forms.py:38 templates/accounts/login.html:14 +#: templates/gatekeeper/gatekeeper_list.html:61 +#: templates/user_manager/list.html:8 user_manager/forms.py:13 +#: vpn_invite/forms.py:281 +msgid "Username" +msgstr "Usuario" + +#: gatekeeper/forms.py:39 gatekeeper/forms.py:344 +#: templates/gatekeeper/gatekeeper_list.html:62 +#: templates/gatekeeper/gatekeeper_list.html:220 +#: templates/wireguard/peer_list/peer_preview_modal.html:103 +msgid "Email" +msgstr "Email" + +#: gatekeeper/forms.py:40 +msgid "TOTP Secret" +msgstr "Secreto TOTP" + +#: gatekeeper/forms.py:87 +#, fuzzy +#| msgid "Port is required." +msgid "Password is required." +msgstr "Puerto es obligatorio." + +#: gatekeeper/forms.py:90 user_manager/forms.py:127 +msgid "Password must be at least 8 characters long." +msgstr "La contraseña debe tener al menos 8 caracteres." + +#: gatekeeper/forms.py:92 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one lowercase letter." +msgstr "La contraseña debe tener al menos 8 caracteres." + +#: gatekeeper/forms.py:94 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one uppercase letter." +msgstr "La contraseña debe tener al menos 8 caracteres." + +#: gatekeeper/forms.py:96 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one number." +msgstr "La contraseña debe tener al menos 8 caracteres." + +#: gatekeeper/forms.py:98 +#, fuzzy +#| msgid "Password Confirmation" +msgid "Passwords do not match." +msgstr "Confirmación de contraseña" + +#: gatekeeper/forms.py:103 gatekeeper/forms.py:249 +msgid "Please provide a PIN to validate the TOTP secret." +msgstr "Proporcione un PIN para validar el secreto TOTP." + +#: gatekeeper/forms.py:108 gatekeeper/forms.py:254 +msgid "Invalid TOTP PIN." +msgstr "PIN TOTP no válido." + +#: gatekeeper/forms.py:110 gatekeeper/forms.py:256 +msgid "Invalid TOTP secret format. Must be a valid Base32 string." +msgstr "Formato de secreto TOTP no válido. Debe ser una cadena Base32 válida." + +#: gatekeeper/forms.py:130 templates/gatekeeper/gatekeeper_list.html:120 +msgid "Group Name" +msgstr "Nombre del grupo" + +#: gatekeeper/forms.py:131 templates/gatekeeper/gatekeeper_list.html:121 +msgid "Members" +msgstr "Miembros" + +#: gatekeeper/forms.py:175 msgid "Authentication Type" msgstr "Tipo de autenticación" -#: gatekeeper/forms.py:101 +#: gatekeeper/forms.py:176 msgid "Global TOTP Secret" msgstr "Secreto TOTP global" -#: gatekeeper/forms.py:102 -msgid "Global TOTP Before Authentication" -msgstr "TOTP global antes de la autenticación" - -#: gatekeeper/forms.py:103 +#: gatekeeper/forms.py:177 msgid "OIDC Provider URL" msgstr "URL del proveedor OIDC" -#: gatekeeper/forms.py:104 +#: gatekeeper/forms.py:178 msgid "OIDC Client ID" msgstr "ID de cliente OIDC" -#: gatekeeper/forms.py:105 +#: gatekeeper/forms.py:179 msgid "OIDC Client Secret" msgstr "Secreto de cliente OIDC" -#: gatekeeper/forms.py:157 +#: gatekeeper/forms.py:230 msgid "TOTP secret must be empty for Local Password authentication." msgstr "" "El secreto TOTP debe estar vacío para la autenticación por contraseña local." -#: gatekeeper/forms.py:159 +#: gatekeeper/forms.py:232 msgid "TOTP validation PIN must be empty for Local Password authentication." msgstr "" "El PIN de validación TOTP debe estar vacío para la autenticación por " "contraseña local." -#: gatekeeper/forms.py:161 +#: gatekeeper/forms.py:234 msgid "OIDC fields must be empty for Local Password authentication." msgstr "" "Los campos OIDC deben estar vacíos para la autenticación por contraseña " "local." -#: gatekeeper/forms.py:167 +#: gatekeeper/forms.py:240 msgid "Only one Local Password authentication method can be configured." msgstr "" "Sólo se puede configurar un método de autenticación por contraseña local." -#: gatekeeper/forms.py:170 +#: gatekeeper/forms.py:243 msgid "OIDC fields must be empty for TOTP authentication." msgstr "Los campos OIDC deben estar vacíos para la autenticación TOTP." -#: gatekeeper/forms.py:172 +#: gatekeeper/forms.py:245 msgid "TOTP secret is required for TOTP authentication." msgstr "El secreto TOTP es obligatorio para la autenticación TOTP." -#: gatekeeper/forms.py:176 -msgid "Please provide a PIN to validate the TOTP secret." -msgstr "Proporcione un PIN para validar el secreto TOTP." - -#: gatekeeper/forms.py:181 -msgid "Invalid TOTP PIN." -msgstr "PIN TOTP no válido." - -#: gatekeeper/forms.py:183 -msgid "Invalid TOTP secret format. Must be a valid Base32 string." -msgstr "Formato de secreto TOTP no válido. Debe ser una cadena Base32 válida." - -#: gatekeeper/forms.py:186 +#: gatekeeper/forms.py:259 msgid "TOTP secret must be empty for OIDC authentication." msgstr "El secreto TOTP debe estar vacío para la autenticación OIDC." -#: gatekeeper/forms.py:188 +#: gatekeeper/forms.py:261 msgid "TOTP validation PIN must be empty for OIDC authentication." msgstr "El PIN de validación TOTP debe estar vacío para la autenticación OIDC." -#: gatekeeper/forms.py:197 gatekeeper/forms.py:239 gatekeeper/forms.py:270 +#: gatekeeper/forms.py:270 gatekeeper/forms.py:312 gatekeeper/forms.py:343 msgid "Authentication Method" msgstr "Método de autenticación" -#: gatekeeper/forms.py:199 templates/gatekeeper/gatekeeper_list.html:257 +#: gatekeeper/forms.py:272 templates/gatekeeper/gatekeeper_list.html:273 msgid "Prefix Length" msgstr "Longitud del prefijo" -#: gatekeeper/forms.py:200 templates/firewall/firewall_rule_list.html:47 +#: gatekeeper/forms.py:273 templates/firewall/firewall_rule_list.html:47 #: templates/firewall/manage_firewall_rule.html:360 -#: templates/gatekeeper/gatekeeper_list.html:258 +#: templates/gatekeeper/gatekeeper_list.html:274 msgid "Action" msgstr "Acción" -#: gatekeeper/forms.py:240 templates/gatekeeper/gatekeeper_list.html:221 +#: gatekeeper/forms.py:313 templates/gatekeeper/gatekeeper_list.html:237 msgid "Domain" msgstr "Dominio" @@ -1407,15 +1469,15 @@ msgstr "Lista de direcciones IP" msgid "Shared/global TOTP secret key" msgstr "Clave secreta TOTP compartida/global" -#: gatekeeper/models.py:69 +#: gatekeeper/models.py:68 msgid "Password for local authentication (leave blank if not using)" msgstr "Contraseña para autenticación local (dejar en blanco si no se usa)" -#: gatekeeper/models.py:71 +#: gatekeeper/models.py:69 msgid "Per-user TOTP secret key" msgstr "Clave secreta TOTP por usuario" -#: gatekeeper/models.py:110 templates/gatekeeper/gatekeeper_list.html:270 +#: gatekeeper/models.py:108 templates/gatekeeper/gatekeeper_list.html:286 msgid "Allow" msgstr "Permitir" @@ -1431,57 +1493,102 @@ msgstr "Crear usuario de Gatekeeper" msgid "Gatekeeper User saved successfully." msgstr "Usuario de Gatekeeper guardado correctamente." -#: gatekeeper/views.py:86 +#: gatekeeper/views.py:69 +msgid "" +"\n" +"

Gatekeeper User

\n" +"

Gatekeeper users are used for authenticating against protected " +"applications managed by this gateway.

\n" +"\n" +"
Password
\n" +"

Required when creating a user. When editing, leave both password " +"fields blank to keep the current password.\n" +" Passwords are stored using Argon2id hashing.

\n" +"\n" +"
TOTP Secret
\n" +"

Optional per-user TOTP secret. When set, this user will " +"authenticate using their own secret instead of the\n" +" global TOTP secret configured on the Authentication Method. Use the " +"buttons below the field to generate a\n" +" random secret and scan the QR code with your authenticator app. " +"Validate the secret by entering the current\n" +" 6-digit PIN before saving.

\n" +" " +msgstr "" + +#: gatekeeper/views.py:106 msgid "Gatekeeper User deleted successfully." msgstr "Usuario de Gatekeeper eliminado correctamente." -#: gatekeeper/views.py:91 +#: gatekeeper/views.py:111 msgid "Delete Gatekeeper User" msgstr "Eliminar usuario de Gatekeeper" -#: gatekeeper/views.py:93 +#: gatekeeper/views.py:113 #, python-format msgid "Are you sure you want to delete the user \"%(username)s\"?" msgstr "¿Está seguro de que desea eliminar al usuario \"%(username)s\"?" -#: gatekeeper/views.py:107 +#: gatekeeper/views.py:127 msgid "Edit Gatekeeper Group" msgstr "Editar grupo de Gatekeeper" -#: gatekeeper/views.py:110 +#: gatekeeper/views.py:130 msgid "Create Gatekeeper Group" msgstr "Crear grupo Gatekeeper" -#: gatekeeper/views.py:117 +#: gatekeeper/views.py:137 msgid "Gatekeeper Group saved successfully." msgstr "Grupo de Gatekeeper guardado correctamente." -#: gatekeeper/views.py:139 +#: gatekeeper/views.py:159 msgid "Gatekeeper Group deleted successfully." msgstr "Grupo de Gatekeeper eliminado correctamente." -#: gatekeeper/views.py:144 +#: gatekeeper/views.py:164 msgid "Delete Gatekeeper Group" msgstr "Eliminar grupo Gatekeeper" -#: gatekeeper/views.py:146 +#: gatekeeper/views.py:166 #, python-format msgid "Are you sure you want to delete the group \"%(name)s\"?" msgstr "¿Está seguro de que desea eliminar el grupo \"%(name)s\"?" -#: gatekeeper/views.py:160 +#: gatekeeper/views.py:180 msgid "Edit Authentication Method" msgstr "Editar método de autenticación" -#: gatekeeper/views.py:163 +#: gatekeeper/views.py:183 msgid "Create Authentication Method" msgstr "Crear método de autenticación" -#: gatekeeper/views.py:170 +#: gatekeeper/views.py:190 msgid "Authentication Method saved successfully." msgstr "Método de autenticación guardado correctamente." -#: gatekeeper/views.py:175 +#: gatekeeper/views.py:195 +#, fuzzy +#| msgid "" +#| "\n" +#| "

Authentication Types

\n" +#| "

Select how users will authenticate through this method.

\n" +#| " \n" +#| "
Local Password
\n" +#| "

Users will authenticate using a standard username and password " +#| "stored locally. Only one of this type can be created.

\n" +#| " \n" +#| "
OIDC (OpenID Connect)
\n" +#| "

Users will authenticate via an external identity provider " +#| "(like Keycloak, Google, or Authelia). Requires Provider URL, Client ID, " +#| "and Client Secret.

\n" +#| " \n" +#| "
TOTP (Time-Based One-Time Password)
\n" +#| "

Users will need to enter a rotating token from an " +#| "authenticator app. Requires setting a Global TOTP Secret.
If " +#| "Global TOTP Before Authentication is enabled, the PIN is " +#| "required before the username and password to help combat bruteforce " +#| "attacks.

\n" +#| " " msgid "" "\n" "

Authentication Types

\n" @@ -1498,9 +1605,8 @@ msgid "" " \n" "
TOTP (Time-Based One-Time Password)
\n" "

Users will need to enter a rotating token from an authenticator " -"app. Requires setting a Global TOTP Secret.
If Global TOTP " -"Before Authentication is enabled, the PIN is required before the " -"username and password to help combat bruteforce attacks.

\n" +"app. If a user does not have a personal TOTP configured, the Global " +"TOTP Secret will be used instead.

\n" " " msgstr "" "\n" @@ -1526,87 +1632,87 @@ msgstr "" "para ayudar a combatir los ataques de fuerza bruta.

\n" " " -#: gatekeeper/views.py:210 +#: gatekeeper/views.py:230 msgid "Authentication Method deleted successfully." msgstr "Método de autenticación eliminado correctamente." -#: gatekeeper/views.py:215 +#: gatekeeper/views.py:235 msgid "Delete Authentication Method" msgstr "Eliminar método de autenticación" -#: gatekeeper/views.py:217 +#: gatekeeper/views.py:237 #, python-format msgid "Are you sure you want to delete the authentication method \"%(name)s\"?" msgstr "" "¿Está seguro de que desea eliminar el método de autenticación \"%(name)s\"?" -#: gatekeeper/views.py:267 +#: gatekeeper/views.py:287 msgid "Edit Allowed Domain" msgstr "Editar dominio permitido" -#: gatekeeper/views.py:270 templates/gatekeeper/gatekeeper_list.html:186 +#: gatekeeper/views.py:290 templates/gatekeeper/gatekeeper_list.html:202 msgid "Add Allowed Domain" msgstr "Añadir dominio permitido" -#: gatekeeper/views.py:277 +#: gatekeeper/views.py:297 msgid "Allowed Domain saved successfully." msgstr "Dominio permitido guardado correctamente." -#: gatekeeper/views.py:299 +#: gatekeeper/views.py:319 msgid "Allowed Domain deleted successfully." msgstr "Dominio permitido eliminado correctamente." -#: gatekeeper/views.py:304 +#: gatekeeper/views.py:324 msgid "Delete Allowed Domain" msgstr "Eliminar dominio permitido" -#: gatekeeper/views.py:306 +#: gatekeeper/views.py:326 #, python-format msgid "Are you sure you want to delete the allowed domain \"%(domain)s\"?" msgstr "" "¿Está seguro de que desea eliminar el dominio permitido \"%(domain)s\"?" -#: gatekeeper/views.py:320 +#: gatekeeper/views.py:340 msgid "Edit Allowed Email" msgstr "Editar correo electrónico permitido" -#: gatekeeper/views.py:323 templates/gatekeeper/gatekeeper_list.html:183 +#: gatekeeper/views.py:343 templates/gatekeeper/gatekeeper_list.html:199 msgid "Add Allowed Email" msgstr "Añadir correo electrónico permitido" -#: gatekeeper/views.py:330 +#: gatekeeper/views.py:350 msgid "Allowed Email saved successfully." msgstr "Correo electrónico permitido guardado correctamente." -#: gatekeeper/views.py:352 +#: gatekeeper/views.py:372 msgid "Allowed Email deleted successfully." msgstr "Correo electrónico permitido eliminado correctamente." -#: gatekeeper/views.py:357 +#: gatekeeper/views.py:377 msgid "Delete Allowed Email" msgstr "Eliminar correo electrónico permitido" -#: gatekeeper/views.py:359 +#: gatekeeper/views.py:379 #, python-format msgid "Are you sure you want to delete the allowed email \"%(email)s\"?" msgstr "" "¿Está seguro de que desea eliminar el correo electrónico permitido " "\"%(email)s\"?" -#: gatekeeper/views.py:373 +#: gatekeeper/views.py:393 msgid "Edit IP Address" msgstr "Editar dirección IP" -#: gatekeeper/views.py:376 templates/gatekeeper/gatekeeper_list.html:247 +#: gatekeeper/views.py:396 templates/gatekeeper/gatekeeper_list.html:263 #: templates/wireguard/wireguard_manage_peer.html:171 msgid "Add IP Address" msgstr "Añadir IP" -#: gatekeeper/views.py:383 +#: gatekeeper/views.py:403 msgid "IP Address saved successfully." msgstr "Dirección IP guardada correctamente." -#: gatekeeper/views.py:388 +#: gatekeeper/views.py:408 msgid "" "\n" "
IP Address List
\n" @@ -1653,15 +1759,15 @@ msgstr "" "\"Red de la Oficina\", \"Atacante Bloqueado\").

\n" " " -#: gatekeeper/views.py:424 +#: gatekeeper/views.py:444 msgid "IP Address deleted successfully." msgstr "Dirección IP eliminada correctamente." -#: gatekeeper/views.py:429 +#: gatekeeper/views.py:449 msgid "Delete IP Address" msgstr "Eliminar dirección IP" -#: gatekeeper/views.py:431 +#: gatekeeper/views.py:451 #, python-format msgid "Are you sure you want to delete the IP address \"%(address)s\"?" msgstr "¿Está seguro de que desea eliminar la dirección IP \"%(address)s\"?" @@ -2027,8 +2133,8 @@ msgid "In" msgstr "Entrada" #: templates/api_v2/api_documentation.html:49 -#: templates/gatekeeper/gatekeeper_list.html:150 -#: templates/gatekeeper/gatekeeper_list.html:195 +#: templates/gatekeeper/gatekeeper_list.html:166 +#: templates/gatekeeper/gatekeeper_list.html:211 #: templates/wireguard/apply_route_template.html:27 msgid "Type" msgstr "Tipo" @@ -2038,11 +2144,13 @@ msgid "Required" msgstr "Obligatorio" #: templates/api_v2/api_documentation.html:62 +#: templates/gatekeeper/gatekeeper_list.html:75 #: templates/scheduler/scheduleprofile_form.html:175 msgid "Yes" msgstr "Sí" #: templates/api_v2/api_documentation.html:64 +#: templates/gatekeeper/gatekeeper_list.html:77 #: templates/scheduler/scheduleprofile_form.html:177 msgid "No" msgstr "No" @@ -2087,12 +2195,12 @@ msgstr "Deshabilitado" #: templates/app_gateway/application_details.html:121 #: templates/cluster/workers_list.html:77 #: templates/dns/static_host_list.html:74 -#: templates/gatekeeper/gatekeeper_list.html:73 -#: templates/gatekeeper/gatekeeper_list.html:116 -#: templates/gatekeeper/gatekeeper_list.html:161 -#: templates/gatekeeper/gatekeeper_list.html:209 -#: templates/gatekeeper/gatekeeper_list.html:226 -#: templates/gatekeeper/gatekeeper_list.html:278 +#: templates/gatekeeper/gatekeeper_list.html:89 +#: templates/gatekeeper/gatekeeper_list.html:132 +#: templates/gatekeeper/gatekeeper_list.html:177 +#: templates/gatekeeper/gatekeeper_list.html:225 +#: templates/gatekeeper/gatekeeper_list.html:242 +#: templates/gatekeeper/gatekeeper_list.html:294 #: templates/routing_templates/list.html:29 #: templates/scheduler/scheduleprofile_form.html:123 #: templates/scheduler/scheduleprofile_list.html:25 @@ -2174,6 +2282,7 @@ msgstr "Añadir política de acceso" #: templates/app_gateway/app_gateway_list.html:140 #: templates/gatekeeper/gatekeeper_list.html:43 +#: templates/gatekeeper/gatekeeper_list.html:64 msgid "Groups" msgstr "Grupos" @@ -2184,10 +2293,10 @@ msgstr "Métodos de autenticación" #: templates/app_gateway/app_gateway_list.html:142 #: templates/app_gateway/application_details.html:62 #: templates/app_gateway/application_details.html:109 -#: templates/gatekeeper/gatekeeper_list.html:63 -#: templates/gatekeeper/gatekeeper_list.html:106 -#: templates/gatekeeper/gatekeeper_list.html:151 -#: templates/gatekeeper/gatekeeper_list.html:198 +#: templates/gatekeeper/gatekeeper_list.html:65 +#: templates/gatekeeper/gatekeeper_list.html:122 +#: templates/gatekeeper/gatekeeper_list.html:167 +#: templates/gatekeeper/gatekeeper_list.html:214 #: templates/scheduler/scheduleprofile_form.html:111 #: templates/scheduler/scheduleprofile_list.html:15 #: templates/wireguard/apply_route_template.html:28 @@ -2737,10 +2846,19 @@ msgid "Create Port forwarding Rule" msgstr "Crear regla de reenvío de puerto" #: templates/gatekeeper/gatekeeper_auth_method_form.html:63 +#: templates/gatekeeper/gatekeeper_user_form.html:43 msgid "View QR Code" msgstr "Ver código QR" -#: templates/gatekeeper/gatekeeper_auth_method_form.html:74 +#: templates/gatekeeper/gatekeeper_auth_method_form.html:64 +#: templates/gatekeeper/gatekeeper_user_form.html:44 +#, fuzzy +#| msgid "Global TOTP Secret" +msgid "Generate TOTP Secret" +msgstr "Secreto TOTP global" + +#: templates/gatekeeper/gatekeeper_auth_method_form.html:93 +#: templates/gatekeeper/gatekeeper_user_form.html:73 msgid "Please enter a TOTP Secret first to generate the QR code." msgstr "" "Por favor, introduzca primero un secreto TOTP para generar el código QR." @@ -2767,44 +2885,48 @@ msgstr "Usuarios" msgid "Add User" msgstr "Añadir usuario" -#: templates/gatekeeper/gatekeeper_list.html:88 +#: templates/gatekeeper/gatekeeper_list.html:63 +msgid "TOTP" +msgstr "" + +#: templates/gatekeeper/gatekeeper_list.html:104 msgid "No Gatekeeper Users found." msgstr "No se han encontrado usuarios de Gatekeeper." -#: templates/gatekeeper/gatekeeper_list.html:95 +#: templates/gatekeeper/gatekeeper_list.html:111 msgid "Add Group" msgstr "Añadir grupo" -#: templates/gatekeeper/gatekeeper_list.html:131 +#: templates/gatekeeper/gatekeeper_list.html:147 msgid "No Gatekeeper Groups found." msgstr "No se han encontrado grupos de Gatekeeper." -#: templates/gatekeeper/gatekeeper_list.html:140 +#: templates/gatekeeper/gatekeeper_list.html:156 msgid "Add Auth Method" msgstr "Añadir método de autenticación" -#: templates/gatekeeper/gatekeeper_list.html:176 +#: templates/gatekeeper/gatekeeper_list.html:192 msgid "No Authentication Methods found." msgstr "No se han encontrado métodos de autenticación." -#: templates/gatekeeper/gatekeeper_list.html:196 +#: templates/gatekeeper/gatekeeper_list.html:212 msgid "Identity" msgstr "Identidad" -#: templates/gatekeeper/gatekeeper_list.html:197 -#: templates/gatekeeper/gatekeeper_list.html:259 +#: templates/gatekeeper/gatekeeper_list.html:213 +#: templates/gatekeeper/gatekeeper_list.html:275 msgid "Auth Method" msgstr "Método de autenticación" -#: templates/gatekeeper/gatekeeper_list.html:241 +#: templates/gatekeeper/gatekeeper_list.html:257 msgid "No Allowed Emails or Domains found." msgstr "No se han encontrado correos electrónicos o dominios permitidos." -#: templates/gatekeeper/gatekeeper_list.html:260 +#: templates/gatekeeper/gatekeeper_list.html:276 msgid "Manage" msgstr "Gestionar" -#: templates/gatekeeper/gatekeeper_list.html:293 +#: templates/gatekeeper/gatekeeper_list.html:309 msgid "No IP Addresses found." msgstr "No se han encontrado direcciones IP." @@ -3640,10 +3762,6 @@ msgstr "Confirmación de contraseña obligatoria para nuevos usuarios." msgid "The two password fields didn't match." msgstr "Las contraseñas no coinciden." -#: user_manager/forms.py:127 -msgid "Password must be at least 8 characters long." -msgstr "La contraseña debe tener al menos 8 caracteres." - #: user_manager/forms.py:220 msgid "A peer group with that name already exists." msgstr "Ya existe un grupo de peers con ese nombre." @@ -4404,3 +4522,6 @@ msgstr "Errores encontrados|Error al procesar una o más interfaces." msgid "No interfaces found|No WireGuard interfaces were found to process." msgstr "" "No se encontraron interfaces|No hay interfaces WireGuard para procesar." + +#~ msgid "Global TOTP Before Authentication" +#~ msgstr "TOTP global antes de la autenticación" diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index f8e8d09..1d04d7d 100644 Binary files a/locale/fr/LC_MESSAGES/django.mo and b/locale/fr/LC_MESSAGES/django.mo differ diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index a8827b7..0d2e2bd 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-14 11:54-0300\n" +"POT-Creation-Date: 2026-03-15 17:20-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,12 +38,12 @@ msgstr "Retour" #: templates/app_gateway/application_details.html:125 #: templates/firewall/manage_firewall_rule.html:382 #: templates/firewall/manage_redirect_rule.html:86 -#: templates/gatekeeper/gatekeeper_list.html:77 -#: templates/gatekeeper/gatekeeper_list.html:120 -#: templates/gatekeeper/gatekeeper_list.html:165 -#: templates/gatekeeper/gatekeeper_list.html:213 -#: templates/gatekeeper/gatekeeper_list.html:230 -#: templates/gatekeeper/gatekeeper_list.html:282 +#: templates/gatekeeper/gatekeeper_list.html:93 +#: templates/gatekeeper/gatekeeper_list.html:136 +#: templates/gatekeeper/gatekeeper_list.html:181 +#: templates/gatekeeper/gatekeeper_list.html:229 +#: templates/gatekeeper/gatekeeper_list.html:246 +#: templates/gatekeeper/gatekeeper_list.html:298 #: templates/scheduler/scheduleprofile_form.html:127 #: templates/scheduler/scheduleprofile_list.html:29 #: templates/wireguard/peer_list/peer_preview_modal.html:109 @@ -65,11 +65,11 @@ msgstr "" "fonctionner immédiatement." #: api_v2/forms.py:63 app_gateway/forms.py:40 app_gateway/forms.py:92 -#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:226 -#: app_gateway/forms.py:267 cluster/forms.py:67 cluster/forms.py:124 -#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:41 -#: gatekeeper/forms.py:75 gatekeeper/forms.py:139 gatekeeper/forms.py:226 -#: gatekeeper/forms.py:256 gatekeeper/forms.py:287 +#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:237 +#: app_gateway/forms.py:278 cluster/forms.py:67 cluster/forms.py:124 +#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:70 +#: gatekeeper/forms.py:150 gatekeeper/forms.py:212 gatekeeper/forms.py:299 +#: gatekeeper/forms.py:329 gatekeeper/forms.py:360 #: routing_templates/forms.py:71 scheduler/forms.py:102 #: templates/firewall/manage_firewall_rule.html:379 #: templates/firewall/manage_firewall_settings.html:59 @@ -83,13 +83,13 @@ msgid "Save" msgstr "Enregistrer" #: api_v2/models.py:10 app_gateway/forms.py:18 app_gateway/forms.py:106 -#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:99 +#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:174 #: routing_templates/forms.py:28 templates/api_v2/api_documentation.html:47 #: templates/api_v2/list.html:8 templates/app_gateway/app_gateway_list.html:58 #: templates/app_gateway/app_gateway_list.html:138 #: templates/app_gateway/application_details.html:26 #: templates/cluster/workers_list.html:8 templates/dns/static_host_list.html:68 -#: templates/gatekeeper/gatekeeper_list.html:149 +#: templates/gatekeeper/gatekeeper_list.html:165 #: templates/routing_templates/list.html:8 #: templates/scheduler/scheduleprofile_list.html:13 #: templates/user_manager/peer_group_list.html:8 @@ -133,10 +133,10 @@ msgstr "Activé" #: app_gateway/views.py:293 app_gateway/views.py:328 app_gateway/views.py:354 #: app_gateway/views.py:404 app_gateway/views.py:432 cluster/views.py:18 #: cluster/views.py:45 cluster/views.py:114 gatekeeper/views.py:23 -#: gatekeeper/views.py:48 gatekeeper/views.py:78 gatekeeper/views.py:101 -#: gatekeeper/views.py:131 gatekeeper/views.py:154 gatekeeper/views.py:202 -#: gatekeeper/views.py:261 gatekeeper/views.py:291 gatekeeper/views.py:314 -#: gatekeeper/views.py:344 gatekeeper/views.py:367 gatekeeper/views.py:416 +#: gatekeeper/views.py:48 gatekeeper/views.py:98 gatekeeper/views.py:121 +#: gatekeeper/views.py:151 gatekeeper/views.py:174 gatekeeper/views.py:222 +#: gatekeeper/views.py:281 gatekeeper/views.py:311 gatekeeper/views.py:334 +#: gatekeeper/views.py:364 gatekeeper/views.py:387 gatekeeper/views.py:436 #: templates/access_denied.html:9 msgid "Access Denied" msgstr "Accès refusé" @@ -217,9 +217,9 @@ msgid "Upstream" msgstr "Upstream" #: app_gateway/forms.py:41 app_gateway/forms.py:93 app_gateway/forms.py:137 -#: app_gateway/forms.py:155 app_gateway/forms.py:227 app_gateway/forms.py:268 -#: gatekeeper/forms.py:42 gatekeeper/forms.py:76 gatekeeper/forms.py:140 -#: gatekeeper/forms.py:227 gatekeeper/forms.py:257 gatekeeper/forms.py:288 +#: app_gateway/forms.py:155 app_gateway/forms.py:238 app_gateway/forms.py:279 +#: gatekeeper/forms.py:71 gatekeeper/forms.py:151 gatekeeper/forms.py:213 +#: gatekeeper/forms.py:300 gatekeeper/forms.py:330 gatekeeper/forms.py:361 #: scheduler/forms.py:103 #: templates/app_gateway/access_policy_type_select.html:50 #: templates/generic_delete_confirmation.html:19 @@ -263,20 +263,28 @@ msgstr "Groupes autorisés" msgid "Authentication Methods" msgstr "Méthodes d'authentification" -#: app_gateway/forms.py:185 +#: app_gateway/forms.py:188 msgid "Cannot select more than one Local Password authentication method." msgstr "" "Impossible de sélectionner plus d'une méthode d'authentification par mot de " "passe local." -#: app_gateway/forms.py:189 +#: app_gateway/forms.py:192 msgid "" "Cannot select more than one OpenID Connect (OIDC) authentication method." msgstr "" "Impossible de sélectionner plus d'une méthode d'authentification OpenID " "Connect (OIDC)." -#: app_gateway/forms.py:193 +#: app_gateway/forms.py:196 +#, fuzzy +#| msgid "Cannot select more than one Local Password authentication method." +msgid "Cannot select more than one TOTP authentication method." +msgstr "" +"Impossible de sélectionner plus d'une méthode d'authentification par mot de " +"passe local." + +#: app_gateway/forms.py:200 msgid "" "Cannot select both Local Password and OpenID Connect (OIDC) authentication " "methods." @@ -284,7 +292,19 @@ msgstr "" "Impossible de sélectionner à la fois les méthodes d'authentification par mot " "de passe local et OpenID Connect (OIDC)." -#: app_gateway/forms.py:197 +#: app_gateway/forms.py:204 +#, fuzzy +#| msgid "" +#| "Cannot select both Local Password and OpenID Connect (OIDC) " +#| "authentication methods." +msgid "" +"TOTP must be combined with a Local Password or OpenID Connect authentication " +"method." +msgstr "" +"Impossible de sélectionner à la fois les méthodes d'authentification par mot " +"de passe local et OpenID Connect (OIDC)." + +#: app_gateway/forms.py:208 msgid "" "At least one user group must be selected when using Local Password " "authentication." @@ -292,31 +312,31 @@ msgstr "" "Au moins un groupe d'utilisateurs doit être sélectionné lors de " "l'utilisation de l'authentification par mot de passe local." -#: app_gateway/forms.py:201 +#: app_gateway/forms.py:212 msgid "User groups can only be used with Local Password authentication." msgstr "" "Les groupes d'utilisateurs ne peuvent être utilisés qu'avec " "l'authentification par mot de passe local." -#: app_gateway/forms.py:211 templates/app_gateway/app_gateway_list.html:62 +#: app_gateway/forms.py:222 templates/app_gateway/app_gateway_list.html:62 #: templates/app_gateway/application_details.html:31 #: templates/firewall/firewall_nav_tabs.html:15 msgid "Default Policy" msgstr "Politique par défaut" -#: app_gateway/forms.py:240 templates/app_gateway/application_details.html:105 +#: app_gateway/forms.py:251 templates/app_gateway/application_details.html:105 msgid "Route Name" msgstr "Nom de la route" -#: app_gateway/forms.py:241 templates/app_gateway/application_details.html:106 +#: app_gateway/forms.py:252 templates/app_gateway/application_details.html:106 msgid "Path Prefix" msgstr "Préfixe de chemin" -#: app_gateway/forms.py:242 templates/app_gateway/application_details.html:107 +#: app_gateway/forms.py:253 templates/app_gateway/application_details.html:107 msgid "Policy" msgstr "Politique" -#: app_gateway/forms.py:243 templates/app_gateway/application_details.html:108 +#: app_gateway/forms.py:254 templates/app_gateway/application_details.html:108 msgid "Order" msgstr "Ordre" @@ -334,9 +354,9 @@ msgstr "Public" msgid "Protected" msgstr "Protégé" -#: app_gateway/models.py:45 gatekeeper/models.py:110 +#: app_gateway/models.py:45 gatekeeper/models.py:108 #: templates/app_gateway/access_policy_type_select.html:41 -#: templates/gatekeeper/gatekeeper_list.html:272 +#: templates/gatekeeper/gatekeeper_list.html:288 msgid "Deny" msgstr "Refuser" @@ -624,11 +644,11 @@ msgstr "Supprimer la route d'application" msgid "Are you sure you want to delete the route \"%(name)s\" (%(path)s)?" msgstr "Êtes-vous sûr de vouloir supprimer la route \"%(name)s\" (%(path)s) ?" -#: app_gateway/views.py:444 +#: app_gateway/views.py:443 msgid "Configuration exported successfully." msgstr "Configuration exportée avec succès." -#: app_gateway/views.py:446 +#: app_gateway/views.py:445 msgid "" "Caddy is not active. Configuration files were exported for debugging " "purposes." @@ -640,13 +660,13 @@ msgstr "" msgid "IP Lock" msgstr "Verrouillage IP" -#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:198 +#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:271 #: templates/cluster/workers_list.html:10 #: templates/dns/static_host_list.html:18 #: templates/firewall/manage_redirect_rule.html:43 #: templates/firewall/manage_redirect_rule.html:67 #: templates/firewall/manage_redirect_rule.html:68 -#: templates/gatekeeper/gatekeeper_list.html:256 +#: templates/gatekeeper/gatekeeper_list.html:272 #: templates/wireguard/wireguard_status.html:45 msgid "IP Address" msgstr "Adresse IP" @@ -922,7 +942,7 @@ msgstr "DNS statique" msgid "Invalid hostname." msgstr "Nom d'hôte invalide." -#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:201 +#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:274 #: templates/api_v2/api_documentation.html:51 #: templates/dns/static_host_list.html:69 #: templates/firewall/manage_redirect_rule.html:18 @@ -1256,43 +1276,29 @@ msgstr "Gérer les paramètres du pare‑feu" msgid "Firewall settings saved successfully" msgstr "Paramètres du pare‑feu enregistrés avec succès" -#: gatekeeper/forms.py:17 templates/accounts/login.html:14 -#: templates/gatekeeper/gatekeeper_list.html:61 -#: templates/user_manager/list.html:8 user_manager/forms.py:13 -#: vpn_invite/forms.py:281 -msgid "Username" -msgstr "Nom d’utilisateur" - -#: gatekeeper/forms.py:18 gatekeeper/forms.py:271 -#: templates/gatekeeper/gatekeeper_list.html:62 -#: templates/gatekeeper/gatekeeper_list.html:204 -#: templates/wireguard/peer_list/peer_preview_modal.html:103 -msgid "Email" -msgstr "E‑mail" - -#: gatekeeper/forms.py:19 templates/accounts/login.html:23 +#: gatekeeper/forms.py:17 templates/accounts/login.html:23 #: templates/vpn_invite/invite_settings.html:19 user_manager/forms.py:14 #: vpn_invite/forms.py:282 msgid "Password" msgstr "Mot de passe" #: gatekeeper/forms.py:20 -msgid "TOTP Secret" -msgstr "Secret TOTP" +msgid "" +"Minimum 8 characters, with at least one uppercase letter, one lowercase " +"letter, and one number." +msgstr "" -#: gatekeeper/forms.py:55 templates/gatekeeper/gatekeeper_list.html:104 -msgid "Group Name" -msgstr "Nom du groupe" +#: gatekeeper/forms.py:23 +#, fuzzy +#| msgid "Random Password" +msgid "Confirm Password" +msgstr "Mot de passe aléatoire" -#: gatekeeper/forms.py:56 templates/gatekeeper/gatekeeper_list.html:105 -msgid "Members" -msgstr "Membres" - -#: gatekeeper/forms.py:86 +#: gatekeeper/forms.py:28 gatekeeper/forms.py:161 msgid "TOTP Validation PIN" msgstr "Code de validation TOTP" -#: gatekeeper/forms.py:89 +#: gatekeeper/forms.py:31 gatekeeper/forms.py:164 msgid "" "Enter a 6-digit PIN generated by your authenticator app to validate the " "secret." @@ -1300,97 +1306,153 @@ msgstr "" "Saisissez un code à 6 chiffres généré par votre application " "d'authentification pour valider le secret." -#: gatekeeper/forms.py:100 +#: gatekeeper/forms.py:38 templates/accounts/login.html:14 +#: templates/gatekeeper/gatekeeper_list.html:61 +#: templates/user_manager/list.html:8 user_manager/forms.py:13 +#: vpn_invite/forms.py:281 +msgid "Username" +msgstr "Nom d’utilisateur" + +#: gatekeeper/forms.py:39 gatekeeper/forms.py:344 +#: templates/gatekeeper/gatekeeper_list.html:62 +#: templates/gatekeeper/gatekeeper_list.html:220 +#: templates/wireguard/peer_list/peer_preview_modal.html:103 +msgid "Email" +msgstr "E‑mail" + +#: gatekeeper/forms.py:40 +msgid "TOTP Secret" +msgstr "Secret TOTP" + +#: gatekeeper/forms.py:87 +#, fuzzy +#| msgid "Port is required." +msgid "Password is required." +msgstr "Le port est obligatoire." + +#: gatekeeper/forms.py:90 user_manager/forms.py:127 +msgid "Password must be at least 8 characters long." +msgstr "Le mot de passe doit comporter au moins 8 caractères." + +#: gatekeeper/forms.py:92 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one lowercase letter." +msgstr "Le mot de passe doit comporter au moins 8 caractères." + +#: gatekeeper/forms.py:94 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one uppercase letter." +msgstr "Le mot de passe doit comporter au moins 8 caractères." + +#: gatekeeper/forms.py:96 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one number." +msgstr "Le mot de passe doit comporter au moins 8 caractères." + +#: gatekeeper/forms.py:98 +#, fuzzy +#| msgid "Password Confirmation" +msgid "Passwords do not match." +msgstr "Confirmation du mot de passe" + +#: gatekeeper/forms.py:103 gatekeeper/forms.py:249 +msgid "Please provide a PIN to validate the TOTP secret." +msgstr "Veuillez fournir un code pour valider le secret TOTP." + +#: gatekeeper/forms.py:108 gatekeeper/forms.py:254 +msgid "Invalid TOTP PIN." +msgstr "Code TOTP invalide." + +#: gatekeeper/forms.py:110 gatekeeper/forms.py:256 +msgid "Invalid TOTP secret format. Must be a valid Base32 string." +msgstr "Format du secret TOTP invalide. Doit être une chaîne Base32 valide." + +#: gatekeeper/forms.py:130 templates/gatekeeper/gatekeeper_list.html:120 +msgid "Group Name" +msgstr "Nom du groupe" + +#: gatekeeper/forms.py:131 templates/gatekeeper/gatekeeper_list.html:121 +msgid "Members" +msgstr "Membres" + +#: gatekeeper/forms.py:175 msgid "Authentication Type" msgstr "Type d'authentification" -#: gatekeeper/forms.py:101 +#: gatekeeper/forms.py:176 msgid "Global TOTP Secret" msgstr "Secret TOTP mondial" -#: gatekeeper/forms.py:102 -msgid "Global TOTP Before Authentication" -msgstr "TOTP global avant l'authentification" - -#: gatekeeper/forms.py:103 +#: gatekeeper/forms.py:177 msgid "OIDC Provider URL" msgstr "URL du fournisseur OIDC" -#: gatekeeper/forms.py:104 +#: gatekeeper/forms.py:178 msgid "OIDC Client ID" msgstr "ID client OIDC" -#: gatekeeper/forms.py:105 +#: gatekeeper/forms.py:179 msgid "OIDC Client Secret" msgstr "Secret client OIDC" -#: gatekeeper/forms.py:157 +#: gatekeeper/forms.py:230 msgid "TOTP secret must be empty for Local Password authentication." msgstr "" "Le secret TOTP doit être vide pour l'authentification par mot de passe local." -#: gatekeeper/forms.py:159 +#: gatekeeper/forms.py:232 msgid "TOTP validation PIN must be empty for Local Password authentication." msgstr "" "Le code de validation TOTP doit être vide pour l'authentification par mot de " "passe local." -#: gatekeeper/forms.py:161 +#: gatekeeper/forms.py:234 msgid "OIDC fields must be empty for Local Password authentication." msgstr "" "Les champs OIDC doivent être vides pour l'authentification par mot de passe " "local." -#: gatekeeper/forms.py:167 +#: gatekeeper/forms.py:240 msgid "Only one Local Password authentication method can be configured." msgstr "" "Un seul système d'authentification par mot de passe local peut être " "configuré." -#: gatekeeper/forms.py:170 +#: gatekeeper/forms.py:243 msgid "OIDC fields must be empty for TOTP authentication." msgstr "Les champs OIDC doivent être vides pour l'authentification TOTP." -#: gatekeeper/forms.py:172 +#: gatekeeper/forms.py:245 msgid "TOTP secret is required for TOTP authentication." msgstr "Le secret TOTP est requis pour l'authentification TOTP." -#: gatekeeper/forms.py:176 -msgid "Please provide a PIN to validate the TOTP secret." -msgstr "Veuillez fournir un code pour valider le secret TOTP." - -#: gatekeeper/forms.py:181 -msgid "Invalid TOTP PIN." -msgstr "Code TOTP invalide." - -#: gatekeeper/forms.py:183 -msgid "Invalid TOTP secret format. Must be a valid Base32 string." -msgstr "Format du secret TOTP invalide. Doit être une chaîne Base32 valide." - -#: gatekeeper/forms.py:186 +#: gatekeeper/forms.py:259 msgid "TOTP secret must be empty for OIDC authentication." msgstr "Le secret TOTP doit être vide pour l'authentification OIDC." -#: gatekeeper/forms.py:188 +#: gatekeeper/forms.py:261 msgid "TOTP validation PIN must be empty for OIDC authentication." msgstr "" "Le code de validation TOTP doit être vide pour l'authentification OIDC." -#: gatekeeper/forms.py:197 gatekeeper/forms.py:239 gatekeeper/forms.py:270 +#: gatekeeper/forms.py:270 gatekeeper/forms.py:312 gatekeeper/forms.py:343 msgid "Authentication Method" msgstr "Méthode d'authentification" -#: gatekeeper/forms.py:199 templates/gatekeeper/gatekeeper_list.html:257 +#: gatekeeper/forms.py:272 templates/gatekeeper/gatekeeper_list.html:273 msgid "Prefix Length" msgstr "Longueur du préfixe" -#: gatekeeper/forms.py:200 templates/firewall/firewall_rule_list.html:47 +#: gatekeeper/forms.py:273 templates/firewall/firewall_rule_list.html:47 #: templates/firewall/manage_firewall_rule.html:360 -#: templates/gatekeeper/gatekeeper_list.html:258 +#: templates/gatekeeper/gatekeeper_list.html:274 msgid "Action" msgstr "Action" -#: gatekeeper/forms.py:240 templates/gatekeeper/gatekeeper_list.html:221 +#: gatekeeper/forms.py:313 templates/gatekeeper/gatekeeper_list.html:237 msgid "Domain" msgstr "Domaine" @@ -1414,17 +1476,17 @@ msgstr "Liste d'adresses IP" msgid "Shared/global TOTP secret key" msgstr "Clé secrète TOTP partagée/globale" -#: gatekeeper/models.py:69 +#: gatekeeper/models.py:68 msgid "Password for local authentication (leave blank if not using)" msgstr "" "Mot de passe pour l'authentification locale (laissez vide si vous ne " "l'utilisez pas)" -#: gatekeeper/models.py:71 +#: gatekeeper/models.py:69 msgid "Per-user TOTP secret key" msgstr "Clé secrète TOTP par utilisateur" -#: gatekeeper/models.py:110 templates/gatekeeper/gatekeeper_list.html:270 +#: gatekeeper/models.py:108 templates/gatekeeper/gatekeeper_list.html:286 msgid "Allow" msgstr "Autoriser" @@ -1440,57 +1502,102 @@ msgstr "Créer un utilisateur Gatekeeper" msgid "Gatekeeper User saved successfully." msgstr "Utilisateur Gatekeeper enregistré avec succès." -#: gatekeeper/views.py:86 +#: gatekeeper/views.py:69 +msgid "" +"\n" +"

Gatekeeper User

\n" +"

Gatekeeper users are used for authenticating against protected " +"applications managed by this gateway.

\n" +"\n" +"
Password
\n" +"

Required when creating a user. When editing, leave both password " +"fields blank to keep the current password.\n" +" Passwords are stored using Argon2id hashing.

\n" +"\n" +"
TOTP Secret
\n" +"

Optional per-user TOTP secret. When set, this user will " +"authenticate using their own secret instead of the\n" +" global TOTP secret configured on the Authentication Method. Use the " +"buttons below the field to generate a\n" +" random secret and scan the QR code with your authenticator app. " +"Validate the secret by entering the current\n" +" 6-digit PIN before saving.

\n" +" " +msgstr "" + +#: gatekeeper/views.py:106 msgid "Gatekeeper User deleted successfully." msgstr "Utilisateur Gatekeeper supprimé avec succès." -#: gatekeeper/views.py:91 +#: gatekeeper/views.py:111 msgid "Delete Gatekeeper User" msgstr "Supprimer l'utilisateur Gatekeeper" -#: gatekeeper/views.py:93 +#: gatekeeper/views.py:113 #, python-format msgid "Are you sure you want to delete the user \"%(username)s\"?" msgstr "Êtes-vous sûr de vouloir supprimer l'utilisateur \"%(username)s\" ?" -#: gatekeeper/views.py:107 +#: gatekeeper/views.py:127 msgid "Edit Gatekeeper Group" msgstr "Modifier le groupe Gatekeeper" -#: gatekeeper/views.py:110 +#: gatekeeper/views.py:130 msgid "Create Gatekeeper Group" msgstr "Créer un groupe Gatekeeper" -#: gatekeeper/views.py:117 +#: gatekeeper/views.py:137 msgid "Gatekeeper Group saved successfully." msgstr "Groupe Gatekeeper enregistré avec succès." -#: gatekeeper/views.py:139 +#: gatekeeper/views.py:159 msgid "Gatekeeper Group deleted successfully." msgstr "Groupe Gatekeeper supprimé avec succès." -#: gatekeeper/views.py:144 +#: gatekeeper/views.py:164 msgid "Delete Gatekeeper Group" msgstr "Supprimer le groupe Gatekeeper" -#: gatekeeper/views.py:146 +#: gatekeeper/views.py:166 #, python-format msgid "Are you sure you want to delete the group \"%(name)s\"?" msgstr "Êtes-vous sûr de vouloir supprimer le groupe \"%(name)s\" ?" -#: gatekeeper/views.py:160 +#: gatekeeper/views.py:180 msgid "Edit Authentication Method" msgstr "Modifier la méthode d'authentification" -#: gatekeeper/views.py:163 +#: gatekeeper/views.py:183 msgid "Create Authentication Method" msgstr "Créer une méthode d'authentification" -#: gatekeeper/views.py:170 +#: gatekeeper/views.py:190 msgid "Authentication Method saved successfully." msgstr "Méthode d'authentification enregistrée avec succès." -#: gatekeeper/views.py:175 +#: gatekeeper/views.py:195 +#, fuzzy +#| msgid "" +#| "\n" +#| "

Authentication Types

\n" +#| "

Select how users will authenticate through this method.

\n" +#| " \n" +#| "
Local Password
\n" +#| "

Users will authenticate using a standard username and password " +#| "stored locally. Only one of this type can be created.

\n" +#| " \n" +#| "
OIDC (OpenID Connect)
\n" +#| "

Users will authenticate via an external identity provider " +#| "(like Keycloak, Google, or Authelia). Requires Provider URL, Client ID, " +#| "and Client Secret.

\n" +#| " \n" +#| "
TOTP (Time-Based One-Time Password)
\n" +#| "

Users will need to enter a rotating token from an " +#| "authenticator app. Requires setting a Global TOTP Secret.
If " +#| "Global TOTP Before Authentication is enabled, the PIN is " +#| "required before the username and password to help combat bruteforce " +#| "attacks.

\n" +#| " " msgid "" "\n" "

Authentication Types

\n" @@ -1507,9 +1614,8 @@ msgid "" " \n" "
TOTP (Time-Based One-Time Password)
\n" "

Users will need to enter a rotating token from an authenticator " -"app. Requires setting a Global TOTP Secret.
If Global TOTP " -"Before Authentication is enabled, the PIN is required before the " -"username and password to help combat bruteforce attacks.

\n" +"app. If a user does not have a personal TOTP configured, the Global " +"TOTP Secret will be used instead.

\n" " " msgstr "" "\n" @@ -1535,86 +1641,86 @@ msgstr "" "pour aider à lutter contre les attaques par force brute.

\n" " " -#: gatekeeper/views.py:210 +#: gatekeeper/views.py:230 msgid "Authentication Method deleted successfully." msgstr "Méthode d'authentification supprimée avec succès." -#: gatekeeper/views.py:215 +#: gatekeeper/views.py:235 msgid "Delete Authentication Method" msgstr "Supprimer la méthode d'authentification" -#: gatekeeper/views.py:217 +#: gatekeeper/views.py:237 #, python-format msgid "Are you sure you want to delete the authentication method \"%(name)s\"?" msgstr "" "Êtes-vous sûr de vouloir supprimer la méthode d'authentification " "\"%(name)s\" ?" -#: gatekeeper/views.py:267 +#: gatekeeper/views.py:287 msgid "Edit Allowed Domain" msgstr "Modifier le domaine autorisé" -#: gatekeeper/views.py:270 templates/gatekeeper/gatekeeper_list.html:186 +#: gatekeeper/views.py:290 templates/gatekeeper/gatekeeper_list.html:202 msgid "Add Allowed Domain" msgstr "Ajouter un domaine autorisé" -#: gatekeeper/views.py:277 +#: gatekeeper/views.py:297 msgid "Allowed Domain saved successfully." msgstr "Domaine autorisé enregistré avec succès." -#: gatekeeper/views.py:299 +#: gatekeeper/views.py:319 msgid "Allowed Domain deleted successfully." msgstr "Domaine autorisé supprimé avec succès." -#: gatekeeper/views.py:304 +#: gatekeeper/views.py:324 msgid "Delete Allowed Domain" msgstr "Supprimer le domaine autorisé" -#: gatekeeper/views.py:306 +#: gatekeeper/views.py:326 #, python-format msgid "Are you sure you want to delete the allowed domain \"%(domain)s\"?" msgstr "" "Êtes-vous sûr de vouloir supprimer le domaine autorisé \"%(domain)s\" ?" -#: gatekeeper/views.py:320 +#: gatekeeper/views.py:340 msgid "Edit Allowed Email" msgstr "Modifier l'e-mail autorisé" -#: gatekeeper/views.py:323 templates/gatekeeper/gatekeeper_list.html:183 +#: gatekeeper/views.py:343 templates/gatekeeper/gatekeeper_list.html:199 msgid "Add Allowed Email" msgstr "Ajouter un e-mail autorisé" -#: gatekeeper/views.py:330 +#: gatekeeper/views.py:350 msgid "Allowed Email saved successfully." msgstr "E-mail autorisé enregistré avec succès." -#: gatekeeper/views.py:352 +#: gatekeeper/views.py:372 msgid "Allowed Email deleted successfully." msgstr "E-mail autorisé supprimé avec succès." -#: gatekeeper/views.py:357 +#: gatekeeper/views.py:377 msgid "Delete Allowed Email" msgstr "Supprimer l'e-mail autorisé" -#: gatekeeper/views.py:359 +#: gatekeeper/views.py:379 #, python-format msgid "Are you sure you want to delete the allowed email \"%(email)s\"?" msgstr "Êtes-vous sûr de vouloir supprimer l'e-mail autorisé \"%(email)s\" ?" -#: gatekeeper/views.py:373 +#: gatekeeper/views.py:393 msgid "Edit IP Address" msgstr "Modifier l'adresse IP" -#: gatekeeper/views.py:376 templates/gatekeeper/gatekeeper_list.html:247 +#: gatekeeper/views.py:396 templates/gatekeeper/gatekeeper_list.html:263 #: templates/wireguard/wireguard_manage_peer.html:171 msgid "Add IP Address" msgstr "Ajouter une adresse IP" -#: gatekeeper/views.py:383 +#: gatekeeper/views.py:403 msgid "IP Address saved successfully." msgstr "Adresse IP enregistrée avec succès." -#: gatekeeper/views.py:388 +#: gatekeeper/views.py:408 msgid "" "\n" "
IP Address List
\n" @@ -1661,15 +1767,15 @@ msgstr "" "\"Réseau de bureau\", \"Attaquant bloqué\").

\n" " " -#: gatekeeper/views.py:424 +#: gatekeeper/views.py:444 msgid "IP Address deleted successfully." msgstr "Adresse IP supprimée avec succès." -#: gatekeeper/views.py:429 +#: gatekeeper/views.py:449 msgid "Delete IP Address" msgstr "Supprimer l'adresse IP" -#: gatekeeper/views.py:431 +#: gatekeeper/views.py:451 #, python-format msgid "Are you sure you want to delete the IP address \"%(address)s\"?" msgstr "Êtes-vous sûr de vouloir supprimer l'adresse IP \"%(address)s\" ?" @@ -2034,8 +2140,8 @@ msgid "In" msgstr "Entrée" #: templates/api_v2/api_documentation.html:49 -#: templates/gatekeeper/gatekeeper_list.html:150 -#: templates/gatekeeper/gatekeeper_list.html:195 +#: templates/gatekeeper/gatekeeper_list.html:166 +#: templates/gatekeeper/gatekeeper_list.html:211 #: templates/wireguard/apply_route_template.html:27 msgid "Type" msgstr "Type" @@ -2045,11 +2151,13 @@ msgid "Required" msgstr "Obligatoire" #: templates/api_v2/api_documentation.html:62 +#: templates/gatekeeper/gatekeeper_list.html:75 #: templates/scheduler/scheduleprofile_form.html:175 msgid "Yes" msgstr "Oui" #: templates/api_v2/api_documentation.html:64 +#: templates/gatekeeper/gatekeeper_list.html:77 #: templates/scheduler/scheduleprofile_form.html:177 msgid "No" msgstr "Non" @@ -2094,12 +2202,12 @@ msgstr "Désactivé" #: templates/app_gateway/application_details.html:121 #: templates/cluster/workers_list.html:77 #: templates/dns/static_host_list.html:74 -#: templates/gatekeeper/gatekeeper_list.html:73 -#: templates/gatekeeper/gatekeeper_list.html:116 -#: templates/gatekeeper/gatekeeper_list.html:161 -#: templates/gatekeeper/gatekeeper_list.html:209 -#: templates/gatekeeper/gatekeeper_list.html:226 -#: templates/gatekeeper/gatekeeper_list.html:278 +#: templates/gatekeeper/gatekeeper_list.html:89 +#: templates/gatekeeper/gatekeeper_list.html:132 +#: templates/gatekeeper/gatekeeper_list.html:177 +#: templates/gatekeeper/gatekeeper_list.html:225 +#: templates/gatekeeper/gatekeeper_list.html:242 +#: templates/gatekeeper/gatekeeper_list.html:294 #: templates/routing_templates/list.html:29 #: templates/scheduler/scheduleprofile_form.html:123 #: templates/scheduler/scheduleprofile_list.html:25 @@ -2182,6 +2290,7 @@ msgstr "Ajouter une politique d'accès" #: templates/app_gateway/app_gateway_list.html:140 #: templates/gatekeeper/gatekeeper_list.html:43 +#: templates/gatekeeper/gatekeeper_list.html:64 msgid "Groups" msgstr "Groupes" @@ -2192,10 +2301,10 @@ msgstr "Méthodes d'authentification" #: templates/app_gateway/app_gateway_list.html:142 #: templates/app_gateway/application_details.html:62 #: templates/app_gateway/application_details.html:109 -#: templates/gatekeeper/gatekeeper_list.html:63 -#: templates/gatekeeper/gatekeeper_list.html:106 -#: templates/gatekeeper/gatekeeper_list.html:151 -#: templates/gatekeeper/gatekeeper_list.html:198 +#: templates/gatekeeper/gatekeeper_list.html:65 +#: templates/gatekeeper/gatekeeper_list.html:122 +#: templates/gatekeeper/gatekeeper_list.html:167 +#: templates/gatekeeper/gatekeeper_list.html:214 #: templates/scheduler/scheduleprofile_form.html:111 #: templates/scheduler/scheduleprofile_list.html:15 #: templates/wireguard/apply_route_template.html:28 @@ -2746,10 +2855,19 @@ msgid "Create Port forwarding Rule" msgstr "Créer une règle de redirection de port" #: templates/gatekeeper/gatekeeper_auth_method_form.html:63 +#: templates/gatekeeper/gatekeeper_user_form.html:43 msgid "View QR Code" msgstr "Voir le code QR" -#: templates/gatekeeper/gatekeeper_auth_method_form.html:74 +#: templates/gatekeeper/gatekeeper_auth_method_form.html:64 +#: templates/gatekeeper/gatekeeper_user_form.html:44 +#, fuzzy +#| msgid "Global TOTP Secret" +msgid "Generate TOTP Secret" +msgstr "Secret TOTP mondial" + +#: templates/gatekeeper/gatekeeper_auth_method_form.html:93 +#: templates/gatekeeper/gatekeeper_user_form.html:73 msgid "Please enter a TOTP Secret first to generate the QR code." msgstr "Veuillez d'abord saisir un secret TOTP pour générer le code QR." @@ -2775,44 +2893,48 @@ msgstr "Utilisateurs" msgid "Add User" msgstr "Ajouter un utilisateur" -#: templates/gatekeeper/gatekeeper_list.html:88 +#: templates/gatekeeper/gatekeeper_list.html:63 +msgid "TOTP" +msgstr "" + +#: templates/gatekeeper/gatekeeper_list.html:104 msgid "No Gatekeeper Users found." msgstr "Aucun utilisateur Gatekeeper trouvé." -#: templates/gatekeeper/gatekeeper_list.html:95 +#: templates/gatekeeper/gatekeeper_list.html:111 msgid "Add Group" msgstr "Ajouter un groupe" -#: templates/gatekeeper/gatekeeper_list.html:131 +#: templates/gatekeeper/gatekeeper_list.html:147 msgid "No Gatekeeper Groups found." msgstr "Aucun groupe Gatekeeper trouvé." -#: templates/gatekeeper/gatekeeper_list.html:140 +#: templates/gatekeeper/gatekeeper_list.html:156 msgid "Add Auth Method" msgstr "Ajouter une méthode d'authentification" -#: templates/gatekeeper/gatekeeper_list.html:176 +#: templates/gatekeeper/gatekeeper_list.html:192 msgid "No Authentication Methods found." msgstr "Aucune méthode d'authentification trouvée." -#: templates/gatekeeper/gatekeeper_list.html:196 +#: templates/gatekeeper/gatekeeper_list.html:212 msgid "Identity" msgstr "Identité" -#: templates/gatekeeper/gatekeeper_list.html:197 -#: templates/gatekeeper/gatekeeper_list.html:259 +#: templates/gatekeeper/gatekeeper_list.html:213 +#: templates/gatekeeper/gatekeeper_list.html:275 msgid "Auth Method" msgstr "Méthode d'authentification" -#: templates/gatekeeper/gatekeeper_list.html:241 +#: templates/gatekeeper/gatekeeper_list.html:257 msgid "No Allowed Emails or Domains found." msgstr "Aucun e-mail ou domaine autorisé trouvé." -#: templates/gatekeeper/gatekeeper_list.html:260 +#: templates/gatekeeper/gatekeeper_list.html:276 msgid "Manage" msgstr "Gérer" -#: templates/gatekeeper/gatekeeper_list.html:293 +#: templates/gatekeeper/gatekeeper_list.html:309 msgid "No IP Addresses found." msgstr "Aucune adresse IP trouvée." @@ -3650,10 +3772,6 @@ msgstr "" msgid "The two password fields didn't match." msgstr "Les deux champs de mot de passe ne correspondent pas." -#: user_manager/forms.py:127 -msgid "Password must be at least 8 characters long." -msgstr "Le mot de passe doit comporter au moins 8 caractères." - #: user_manager/forms.py:220 msgid "A peer group with that name already exists." msgstr "Un groupe de peers portant ce nom existe déjà." @@ -4429,3 +4547,6 @@ msgstr "" #: wireguard_tools/views.py:374 msgid "No interfaces found|No WireGuard interfaces were found to process." msgstr "Aucune interface trouvée | Aucune interface WireGuard à traiter." + +#~ msgid "Global TOTP Before Authentication" +#~ msgstr "TOTP global avant l'authentification" diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index 53a14d4..1073d4b 100644 Binary files a/locale/pt_BR/LC_MESSAGES/django.mo and b/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index f0675e6..9381a19 100644 --- a/locale/pt_BR/LC_MESSAGES/django.po +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-14 11:54-0300\n" +"POT-Creation-Date: 2026-03-15 17:20-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,12 +38,12 @@ msgstr "Voltar" #: templates/app_gateway/application_details.html:125 #: templates/firewall/manage_firewall_rule.html:382 #: templates/firewall/manage_redirect_rule.html:86 -#: templates/gatekeeper/gatekeeper_list.html:77 -#: templates/gatekeeper/gatekeeper_list.html:120 -#: templates/gatekeeper/gatekeeper_list.html:165 -#: templates/gatekeeper/gatekeeper_list.html:213 -#: templates/gatekeeper/gatekeeper_list.html:230 -#: templates/gatekeeper/gatekeeper_list.html:282 +#: templates/gatekeeper/gatekeeper_list.html:93 +#: templates/gatekeeper/gatekeeper_list.html:136 +#: templates/gatekeeper/gatekeeper_list.html:181 +#: templates/gatekeeper/gatekeeper_list.html:229 +#: templates/gatekeeper/gatekeeper_list.html:246 +#: templates/gatekeeper/gatekeeper_list.html:298 #: templates/scheduler/scheduleprofile_form.html:127 #: templates/scheduler/scheduleprofile_list.html:29 #: templates/wireguard/peer_list/peer_preview_modal.html:109 @@ -65,11 +65,11 @@ msgstr "" "funcionar imediatamente." #: api_v2/forms.py:63 app_gateway/forms.py:40 app_gateway/forms.py:92 -#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:226 -#: app_gateway/forms.py:267 cluster/forms.py:67 cluster/forms.py:124 -#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:41 -#: gatekeeper/forms.py:75 gatekeeper/forms.py:139 gatekeeper/forms.py:226 -#: gatekeeper/forms.py:256 gatekeeper/forms.py:287 +#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:237 +#: app_gateway/forms.py:278 cluster/forms.py:67 cluster/forms.py:124 +#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:70 +#: gatekeeper/forms.py:150 gatekeeper/forms.py:212 gatekeeper/forms.py:299 +#: gatekeeper/forms.py:329 gatekeeper/forms.py:360 #: routing_templates/forms.py:71 scheduler/forms.py:102 #: templates/firewall/manage_firewall_rule.html:379 #: templates/firewall/manage_firewall_settings.html:59 @@ -83,13 +83,13 @@ msgid "Save" msgstr "Salvar" #: api_v2/models.py:10 app_gateway/forms.py:18 app_gateway/forms.py:106 -#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:99 +#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:174 #: routing_templates/forms.py:28 templates/api_v2/api_documentation.html:47 #: templates/api_v2/list.html:8 templates/app_gateway/app_gateway_list.html:58 #: templates/app_gateway/app_gateway_list.html:138 #: templates/app_gateway/application_details.html:26 #: templates/cluster/workers_list.html:8 templates/dns/static_host_list.html:68 -#: templates/gatekeeper/gatekeeper_list.html:149 +#: templates/gatekeeper/gatekeeper_list.html:165 #: templates/routing_templates/list.html:8 #: templates/scheduler/scheduleprofile_list.html:13 #: templates/user_manager/peer_group_list.html:8 @@ -133,10 +133,10 @@ msgstr "Habilitado" #: app_gateway/views.py:293 app_gateway/views.py:328 app_gateway/views.py:354 #: app_gateway/views.py:404 app_gateway/views.py:432 cluster/views.py:18 #: cluster/views.py:45 cluster/views.py:114 gatekeeper/views.py:23 -#: gatekeeper/views.py:48 gatekeeper/views.py:78 gatekeeper/views.py:101 -#: gatekeeper/views.py:131 gatekeeper/views.py:154 gatekeeper/views.py:202 -#: gatekeeper/views.py:261 gatekeeper/views.py:291 gatekeeper/views.py:314 -#: gatekeeper/views.py:344 gatekeeper/views.py:367 gatekeeper/views.py:416 +#: gatekeeper/views.py:48 gatekeeper/views.py:98 gatekeeper/views.py:121 +#: gatekeeper/views.py:151 gatekeeper/views.py:174 gatekeeper/views.py:222 +#: gatekeeper/views.py:281 gatekeeper/views.py:311 gatekeeper/views.py:334 +#: gatekeeper/views.py:364 gatekeeper/views.py:387 gatekeeper/views.py:436 #: templates/access_denied.html:9 msgid "Access Denied" msgstr "Acesso Negado" @@ -217,9 +217,9 @@ msgid "Upstream" msgstr "Upstream" #: app_gateway/forms.py:41 app_gateway/forms.py:93 app_gateway/forms.py:137 -#: app_gateway/forms.py:155 app_gateway/forms.py:227 app_gateway/forms.py:268 -#: gatekeeper/forms.py:42 gatekeeper/forms.py:76 gatekeeper/forms.py:140 -#: gatekeeper/forms.py:227 gatekeeper/forms.py:257 gatekeeper/forms.py:288 +#: app_gateway/forms.py:155 app_gateway/forms.py:238 app_gateway/forms.py:279 +#: gatekeeper/forms.py:71 gatekeeper/forms.py:151 gatekeeper/forms.py:213 +#: gatekeeper/forms.py:300 gatekeeper/forms.py:330 gatekeeper/forms.py:361 #: scheduler/forms.py:103 #: templates/app_gateway/access_policy_type_select.html:50 #: templates/generic_delete_confirmation.html:19 @@ -263,19 +263,26 @@ msgstr "Grupos Permitidos" msgid "Authentication Methods" msgstr "Métodos de Autenticação" -#: app_gateway/forms.py:185 +#: app_gateway/forms.py:188 msgid "Cannot select more than one Local Password authentication method." msgstr "" "Não é possível selecionar mais de um método de autenticação por Senha Local." -#: app_gateway/forms.py:189 +#: app_gateway/forms.py:192 msgid "" "Cannot select more than one OpenID Connect (OIDC) authentication method." msgstr "" "Não é possível selecionar mais de um método de autenticação OpenID Connect " "(OIDC)." -#: app_gateway/forms.py:193 +#: app_gateway/forms.py:196 +#, fuzzy +#| msgid "Cannot select more than one Local Password authentication method." +msgid "Cannot select more than one TOTP authentication method." +msgstr "" +"Não é possível selecionar mais de um método de autenticação por Senha Local." + +#: app_gateway/forms.py:200 msgid "" "Cannot select both Local Password and OpenID Connect (OIDC) authentication " "methods." @@ -283,7 +290,19 @@ msgstr "" "Não é possível selecionar simultaneamente os métodos de autenticação por " "Senha Local e OpenID Connect (OIDC)." -#: app_gateway/forms.py:197 +#: app_gateway/forms.py:204 +#, fuzzy +#| msgid "" +#| "Cannot select both Local Password and OpenID Connect (OIDC) " +#| "authentication methods." +msgid "" +"TOTP must be combined with a Local Password or OpenID Connect authentication " +"method." +msgstr "" +"Não é possível selecionar simultaneamente os métodos de autenticação por " +"Senha Local e OpenID Connect (OIDC)." + +#: app_gateway/forms.py:208 msgid "" "At least one user group must be selected when using Local Password " "authentication." @@ -291,30 +310,30 @@ msgstr "" "Pelo menos um grupo de usuários deve ser selecionado ao usar a autenticação " "por Senha Local." -#: app_gateway/forms.py:201 +#: app_gateway/forms.py:212 msgid "User groups can only be used with Local Password authentication." msgstr "" "Grupos de usuários só podem ser usados com autenticação por Senha Local." -#: app_gateway/forms.py:211 templates/app_gateway/app_gateway_list.html:62 +#: app_gateway/forms.py:222 templates/app_gateway/app_gateway_list.html:62 #: templates/app_gateway/application_details.html:31 #: templates/firewall/firewall_nav_tabs.html:15 msgid "Default Policy" msgstr "Política Padrão" -#: app_gateway/forms.py:240 templates/app_gateway/application_details.html:105 +#: app_gateway/forms.py:251 templates/app_gateway/application_details.html:105 msgid "Route Name" msgstr "Nome da Rota" -#: app_gateway/forms.py:241 templates/app_gateway/application_details.html:106 +#: app_gateway/forms.py:252 templates/app_gateway/application_details.html:106 msgid "Path Prefix" msgstr "Prefixo do Caminho" -#: app_gateway/forms.py:242 templates/app_gateway/application_details.html:107 +#: app_gateway/forms.py:253 templates/app_gateway/application_details.html:107 msgid "Policy" msgstr "Política" -#: app_gateway/forms.py:243 templates/app_gateway/application_details.html:108 +#: app_gateway/forms.py:254 templates/app_gateway/application_details.html:108 msgid "Order" msgstr "Ordem" @@ -332,9 +351,9 @@ msgstr "Público" msgid "Protected" msgstr "Protegido" -#: app_gateway/models.py:45 gatekeeper/models.py:110 +#: app_gateway/models.py:45 gatekeeper/models.py:108 #: templates/app_gateway/access_policy_type_select.html:41 -#: templates/gatekeeper/gatekeeper_list.html:272 +#: templates/gatekeeper/gatekeeper_list.html:288 msgid "Deny" msgstr "Negar" @@ -615,11 +634,11 @@ msgstr "Excluir Rota da Aplicação" msgid "Are you sure you want to delete the route \"%(name)s\" (%(path)s)?" msgstr "Tem certeza de que deseja excluir a rota \"%(name)s\" (%(path)s)?" -#: app_gateway/views.py:444 +#: app_gateway/views.py:443 msgid "Configuration exported successfully." msgstr "Configuração exportada com sucesso." -#: app_gateway/views.py:446 +#: app_gateway/views.py:445 msgid "" "Caddy is not active. Configuration files were exported for debugging " "purposes." @@ -631,13 +650,13 @@ msgstr "" msgid "IP Lock" msgstr "Bloqueio de IP" -#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:198 +#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:271 #: templates/cluster/workers_list.html:10 #: templates/dns/static_host_list.html:18 #: templates/firewall/manage_redirect_rule.html:43 #: templates/firewall/manage_redirect_rule.html:67 #: templates/firewall/manage_redirect_rule.html:68 -#: templates/gatekeeper/gatekeeper_list.html:256 +#: templates/gatekeeper/gatekeeper_list.html:272 #: templates/wireguard/wireguard_status.html:45 msgid "IP Address" msgstr "Endereço IP" @@ -912,7 +931,7 @@ msgstr "DNS Estático" msgid "Invalid hostname." msgstr "Nome de host inválido." -#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:201 +#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:274 #: templates/api_v2/api_documentation.html:51 #: templates/dns/static_host_list.html:69 #: templates/firewall/manage_redirect_rule.html:18 @@ -1247,43 +1266,29 @@ msgstr "Gerenciar Configurações de Firewall" msgid "Firewall settings saved successfully" msgstr "Configurações de Firewall salvas com sucesso" -#: gatekeeper/forms.py:17 templates/accounts/login.html:14 -#: templates/gatekeeper/gatekeeper_list.html:61 -#: templates/user_manager/list.html:8 user_manager/forms.py:13 -#: vpn_invite/forms.py:281 -msgid "Username" -msgstr "Usuário" - -#: gatekeeper/forms.py:18 gatekeeper/forms.py:271 -#: templates/gatekeeper/gatekeeper_list.html:62 -#: templates/gatekeeper/gatekeeper_list.html:204 -#: templates/wireguard/peer_list/peer_preview_modal.html:103 -msgid "Email" -msgstr "Email" - -#: gatekeeper/forms.py:19 templates/accounts/login.html:23 +#: gatekeeper/forms.py:17 templates/accounts/login.html:23 #: templates/vpn_invite/invite_settings.html:19 user_manager/forms.py:14 #: vpn_invite/forms.py:282 msgid "Password" msgstr "Senha" #: gatekeeper/forms.py:20 -msgid "TOTP Secret" -msgstr "Segredo TOTP" +msgid "" +"Minimum 8 characters, with at least one uppercase letter, one lowercase " +"letter, and one number." +msgstr "" -#: gatekeeper/forms.py:55 templates/gatekeeper/gatekeeper_list.html:104 -msgid "Group Name" -msgstr "Nome do Grupo" +#: gatekeeper/forms.py:23 +#, fuzzy +#| msgid "Random Password" +msgid "Confirm Password" +msgstr "Senha Aleatória" -#: gatekeeper/forms.py:56 templates/gatekeeper/gatekeeper_list.html:105 -msgid "Members" -msgstr "Membros" - -#: gatekeeper/forms.py:86 +#: gatekeeper/forms.py:28 gatekeeper/forms.py:161 msgid "TOTP Validation PIN" msgstr "PIN de Validação TOTP" -#: gatekeeper/forms.py:89 +#: gatekeeper/forms.py:31 gatekeeper/forms.py:164 msgid "" "Enter a 6-digit PIN generated by your authenticator app to validate the " "secret." @@ -1291,90 +1296,146 @@ msgstr "" "Insira um PIN de 6 dígitos gerado pelo seu aplicativo autenticador para " "validar o segredo." -#: gatekeeper/forms.py:100 +#: gatekeeper/forms.py:38 templates/accounts/login.html:14 +#: templates/gatekeeper/gatekeeper_list.html:61 +#: templates/user_manager/list.html:8 user_manager/forms.py:13 +#: vpn_invite/forms.py:281 +msgid "Username" +msgstr "Usuário" + +#: gatekeeper/forms.py:39 gatekeeper/forms.py:344 +#: templates/gatekeeper/gatekeeper_list.html:62 +#: templates/gatekeeper/gatekeeper_list.html:220 +#: templates/wireguard/peer_list/peer_preview_modal.html:103 +msgid "Email" +msgstr "Email" + +#: gatekeeper/forms.py:40 +msgid "TOTP Secret" +msgstr "Segredo TOTP" + +#: gatekeeper/forms.py:87 +#, fuzzy +#| msgid "Port is required." +msgid "Password is required." +msgstr "Porta é obrigatória." + +#: gatekeeper/forms.py:90 user_manager/forms.py:127 +msgid "Password must be at least 8 characters long." +msgstr "Senha deve ter pelo menos 8 caracteres." + +#: gatekeeper/forms.py:92 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one lowercase letter." +msgstr "Senha deve ter pelo menos 8 caracteres." + +#: gatekeeper/forms.py:94 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one uppercase letter." +msgstr "Senha deve ter pelo menos 8 caracteres." + +#: gatekeeper/forms.py:96 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one number." +msgstr "Senha deve ter pelo menos 8 caracteres." + +#: gatekeeper/forms.py:98 +#, fuzzy +#| msgid "Password Confirmation" +msgid "Passwords do not match." +msgstr "Confirmação de Senha" + +#: gatekeeper/forms.py:103 gatekeeper/forms.py:249 +msgid "Please provide a PIN to validate the TOTP secret." +msgstr "Por favor, forneça um PIN para validar o segredo TOTP." + +#: gatekeeper/forms.py:108 gatekeeper/forms.py:254 +msgid "Invalid TOTP PIN." +msgstr "PIN TOTP inválido." + +#: gatekeeper/forms.py:110 gatekeeper/forms.py:256 +msgid "Invalid TOTP secret format. Must be a valid Base32 string." +msgstr "Formato de segredo TOTP inválido. Deve ser uma string Base32 válida." + +#: gatekeeper/forms.py:130 templates/gatekeeper/gatekeeper_list.html:120 +msgid "Group Name" +msgstr "Nome do Grupo" + +#: gatekeeper/forms.py:131 templates/gatekeeper/gatekeeper_list.html:121 +msgid "Members" +msgstr "Membros" + +#: gatekeeper/forms.py:175 msgid "Authentication Type" msgstr "Tipo de Autenticação" -#: gatekeeper/forms.py:101 +#: gatekeeper/forms.py:176 msgid "Global TOTP Secret" msgstr "Segredo TOTP Global" -#: gatekeeper/forms.py:102 -msgid "Global TOTP Before Authentication" -msgstr "TOTP Global Antes da Autenticação" - -#: gatekeeper/forms.py:103 +#: gatekeeper/forms.py:177 msgid "OIDC Provider URL" msgstr "URL do Provedor OIDC" -#: gatekeeper/forms.py:104 +#: gatekeeper/forms.py:178 msgid "OIDC Client ID" msgstr "ID do Cliente OIDC" -#: gatekeeper/forms.py:105 +#: gatekeeper/forms.py:179 msgid "OIDC Client Secret" msgstr "Segredo do Cliente OIDC" -#: gatekeeper/forms.py:157 +#: gatekeeper/forms.py:230 msgid "TOTP secret must be empty for Local Password authentication." msgstr "O segredo TOTP deve estar vazio para autenticação por Senha Local." -#: gatekeeper/forms.py:159 +#: gatekeeper/forms.py:232 msgid "TOTP validation PIN must be empty for Local Password authentication." msgstr "" "O PIN de validação TOTP deve estar vazio para autenticação por Senha Local." -#: gatekeeper/forms.py:161 +#: gatekeeper/forms.py:234 msgid "OIDC fields must be empty for Local Password authentication." msgstr "Os campos OIDC devem estar vazios para autenticação por Senha Local." -#: gatekeeper/forms.py:167 +#: gatekeeper/forms.py:240 msgid "Only one Local Password authentication method can be configured." msgstr "Apenas um método de autenticação por Senha Local pode ser configurado." -#: gatekeeper/forms.py:170 +#: gatekeeper/forms.py:243 msgid "OIDC fields must be empty for TOTP authentication." msgstr "Os campos OIDC devem estar vazios para autenticação por TOTP." -#: gatekeeper/forms.py:172 +#: gatekeeper/forms.py:245 msgid "TOTP secret is required for TOTP authentication." msgstr "O segredo TOTP é obrigatório para autenticação por TOTP." -#: gatekeeper/forms.py:176 -msgid "Please provide a PIN to validate the TOTP secret." -msgstr "Por favor, forneça um PIN para validar o segredo TOTP." - -#: gatekeeper/forms.py:181 -msgid "Invalid TOTP PIN." -msgstr "PIN TOTP inválido." - -#: gatekeeper/forms.py:183 -msgid "Invalid TOTP secret format. Must be a valid Base32 string." -msgstr "Formato de segredo TOTP inválido. Deve ser uma string Base32 válida." - -#: gatekeeper/forms.py:186 +#: gatekeeper/forms.py:259 msgid "TOTP secret must be empty for OIDC authentication." msgstr "O segredo TOTP deve estar vazio para autenticação por OIDC." -#: gatekeeper/forms.py:188 +#: gatekeeper/forms.py:261 msgid "TOTP validation PIN must be empty for OIDC authentication." msgstr "O PIN de validação TOTP deve estar vazio para autenticação por OIDC." -#: gatekeeper/forms.py:197 gatekeeper/forms.py:239 gatekeeper/forms.py:270 +#: gatekeeper/forms.py:270 gatekeeper/forms.py:312 gatekeeper/forms.py:343 msgid "Authentication Method" msgstr "Método de Autenticação" -#: gatekeeper/forms.py:199 templates/gatekeeper/gatekeeper_list.html:257 +#: gatekeeper/forms.py:272 templates/gatekeeper/gatekeeper_list.html:273 msgid "Prefix Length" msgstr "Comprimento do Prefixo" -#: gatekeeper/forms.py:200 templates/firewall/firewall_rule_list.html:47 +#: gatekeeper/forms.py:273 templates/firewall/firewall_rule_list.html:47 #: templates/firewall/manage_firewall_rule.html:360 -#: templates/gatekeeper/gatekeeper_list.html:258 +#: templates/gatekeeper/gatekeeper_list.html:274 msgid "Action" msgstr "Ação" -#: gatekeeper/forms.py:240 templates/gatekeeper/gatekeeper_list.html:221 +#: gatekeeper/forms.py:313 templates/gatekeeper/gatekeeper_list.html:237 msgid "Domain" msgstr "Domínio" @@ -1398,15 +1459,15 @@ msgstr "Lista de Endereços IP" msgid "Shared/global TOTP secret key" msgstr "Chave secreta TOTP compartilhada/global" -#: gatekeeper/models.py:69 +#: gatekeeper/models.py:68 msgid "Password for local authentication (leave blank if not using)" msgstr "Senha para autenticação local (deixe em branco se não estiver usando)" -#: gatekeeper/models.py:71 +#: gatekeeper/models.py:69 msgid "Per-user TOTP secret key" msgstr "Chave secreta TOTP por usuário" -#: gatekeeper/models.py:110 templates/gatekeeper/gatekeeper_list.html:270 +#: gatekeeper/models.py:108 templates/gatekeeper/gatekeeper_list.html:286 msgid "Allow" msgstr "Permitir" @@ -1422,57 +1483,102 @@ msgstr "Criar Usuário Gatekeeper" msgid "Gatekeeper User saved successfully." msgstr "Usuário Gatekeeper salvo com sucesso." -#: gatekeeper/views.py:86 +#: gatekeeper/views.py:69 +msgid "" +"\n" +"

Gatekeeper User

\n" +"

Gatekeeper users are used for authenticating against protected " +"applications managed by this gateway.

\n" +"\n" +"
Password
\n" +"

Required when creating a user. When editing, leave both password " +"fields blank to keep the current password.\n" +" Passwords are stored using Argon2id hashing.

\n" +"\n" +"
TOTP Secret
\n" +"

Optional per-user TOTP secret. When set, this user will " +"authenticate using their own secret instead of the\n" +" global TOTP secret configured on the Authentication Method. Use the " +"buttons below the field to generate a\n" +" random secret and scan the QR code with your authenticator app. " +"Validate the secret by entering the current\n" +" 6-digit PIN before saving.

\n" +" " +msgstr "" + +#: gatekeeper/views.py:106 msgid "Gatekeeper User deleted successfully." msgstr "Usuário Gatekeeper excluído com sucesso." -#: gatekeeper/views.py:91 +#: gatekeeper/views.py:111 msgid "Delete Gatekeeper User" msgstr "Excluir Usuário Gatekeeper" -#: gatekeeper/views.py:93 +#: gatekeeper/views.py:113 #, python-format msgid "Are you sure you want to delete the user \"%(username)s\"?" msgstr "Tem certeza de que deseja excluir o usuário \"%(username)s\"?" -#: gatekeeper/views.py:107 +#: gatekeeper/views.py:127 msgid "Edit Gatekeeper Group" msgstr "Editar Grupo Gatekeeper" -#: gatekeeper/views.py:110 +#: gatekeeper/views.py:130 msgid "Create Gatekeeper Group" msgstr "Criar Grupo Gatekeeper" -#: gatekeeper/views.py:117 +#: gatekeeper/views.py:137 msgid "Gatekeeper Group saved successfully." msgstr "Grupo Gatekeeper salvo com sucesso." -#: gatekeeper/views.py:139 +#: gatekeeper/views.py:159 msgid "Gatekeeper Group deleted successfully." msgstr "Grupo Gatekeeper excluído com sucesso." -#: gatekeeper/views.py:144 +#: gatekeeper/views.py:164 msgid "Delete Gatekeeper Group" msgstr "Excluir Grupo Gatekeeper" -#: gatekeeper/views.py:146 +#: gatekeeper/views.py:166 #, python-format msgid "Are you sure you want to delete the group \"%(name)s\"?" msgstr "Tem certeza de que deseja excluir o grupo \"%(name)s\"?" -#: gatekeeper/views.py:160 +#: gatekeeper/views.py:180 msgid "Edit Authentication Method" msgstr "Editar Método de Autenticação" -#: gatekeeper/views.py:163 +#: gatekeeper/views.py:183 msgid "Create Authentication Method" msgstr "Criar Método de Autenticação" -#: gatekeeper/views.py:170 +#: gatekeeper/views.py:190 msgid "Authentication Method saved successfully." msgstr "Método de Autenticação salvo com sucesso." -#: gatekeeper/views.py:175 +#: gatekeeper/views.py:195 +#, fuzzy +#| msgid "" +#| "\n" +#| "

Authentication Types

\n" +#| "

Select how users will authenticate through this method.

\n" +#| " \n" +#| "
Local Password
\n" +#| "

Users will authenticate using a standard username and password " +#| "stored locally. Only one of this type can be created.

\n" +#| " \n" +#| "
OIDC (OpenID Connect)
\n" +#| "

Users will authenticate via an external identity provider " +#| "(like Keycloak, Google, or Authelia). Requires Provider URL, Client ID, " +#| "and Client Secret.

\n" +#| " \n" +#| "
TOTP (Time-Based One-Time Password)
\n" +#| "

Users will need to enter a rotating token from an " +#| "authenticator app. Requires setting a Global TOTP Secret.
If " +#| "Global TOTP Before Authentication is enabled, the PIN is " +#| "required before the username and password to help combat bruteforce " +#| "attacks.

\n" +#| " " msgid "" "\n" "

Authentication Types

\n" @@ -1489,9 +1595,8 @@ msgid "" " \n" "
TOTP (Time-Based One-Time Password)
\n" "

Users will need to enter a rotating token from an authenticator " -"app. Requires setting a Global TOTP Secret.
If Global TOTP " -"Before Authentication is enabled, the PIN is required before the " -"username and password to help combat bruteforce attacks.

\n" +"app. If a user does not have a personal TOTP configured, the Global " +"TOTP Secret will be used instead.

\n" " " msgstr "" "\n" @@ -1516,84 +1621,84 @@ msgstr "" "força bruta.

\n" " " -#: gatekeeper/views.py:210 +#: gatekeeper/views.py:230 msgid "Authentication Method deleted successfully." msgstr "Método de Autenticação excluído com sucesso." -#: gatekeeper/views.py:215 +#: gatekeeper/views.py:235 msgid "Delete Authentication Method" msgstr "Excluir Método de Autenticação" -#: gatekeeper/views.py:217 +#: gatekeeper/views.py:237 #, python-format msgid "Are you sure you want to delete the authentication method \"%(name)s\"?" msgstr "" "Tem certeza de que deseja excluir o método de autenticação \"%(name)s\"?" -#: gatekeeper/views.py:267 +#: gatekeeper/views.py:287 msgid "Edit Allowed Domain" msgstr "Editar Domínio Permitido" -#: gatekeeper/views.py:270 templates/gatekeeper/gatekeeper_list.html:186 +#: gatekeeper/views.py:290 templates/gatekeeper/gatekeeper_list.html:202 msgid "Add Allowed Domain" msgstr "Adicionar Domínio Permitido" -#: gatekeeper/views.py:277 +#: gatekeeper/views.py:297 msgid "Allowed Domain saved successfully." msgstr "Domínio Permitido salvo com sucesso." -#: gatekeeper/views.py:299 +#: gatekeeper/views.py:319 msgid "Allowed Domain deleted successfully." msgstr "Domínio Permitido excluído com sucesso." -#: gatekeeper/views.py:304 +#: gatekeeper/views.py:324 msgid "Delete Allowed Domain" msgstr "Excluir Domínio Permitido" -#: gatekeeper/views.py:306 +#: gatekeeper/views.py:326 #, python-format msgid "Are you sure you want to delete the allowed domain \"%(domain)s\"?" msgstr "Tem certeza de que deseja excluir o domínio permitido \"%(domain)s\"?" -#: gatekeeper/views.py:320 +#: gatekeeper/views.py:340 msgid "Edit Allowed Email" msgstr "Editar E-mail Permitido" -#: gatekeeper/views.py:323 templates/gatekeeper/gatekeeper_list.html:183 +#: gatekeeper/views.py:343 templates/gatekeeper/gatekeeper_list.html:199 msgid "Add Allowed Email" msgstr "Adicionar E-mail Permitido" -#: gatekeeper/views.py:330 +#: gatekeeper/views.py:350 msgid "Allowed Email saved successfully." msgstr "E-mail Permitido salvo com sucesso." -#: gatekeeper/views.py:352 +#: gatekeeper/views.py:372 msgid "Allowed Email deleted successfully." msgstr "E-mail Permitido excluído com sucesso." -#: gatekeeper/views.py:357 +#: gatekeeper/views.py:377 msgid "Delete Allowed Email" msgstr "Excluir E-mail Permitido" -#: gatekeeper/views.py:359 +#: gatekeeper/views.py:379 #, python-format msgid "Are you sure you want to delete the allowed email \"%(email)s\"?" msgstr "Tem certeza de que deseja excluir o e-mail permitido \"%(email)s\"?" -#: gatekeeper/views.py:373 +#: gatekeeper/views.py:393 msgid "Edit IP Address" msgstr "Editar Endereço IP" -#: gatekeeper/views.py:376 templates/gatekeeper/gatekeeper_list.html:247 +#: gatekeeper/views.py:396 templates/gatekeeper/gatekeeper_list.html:263 #: templates/wireguard/wireguard_manage_peer.html:171 msgid "Add IP Address" msgstr "Adicionar IP" -#: gatekeeper/views.py:383 +#: gatekeeper/views.py:403 msgid "IP Address saved successfully." msgstr "Endereço IP salvo com sucesso." -#: gatekeeper/views.py:388 +#: gatekeeper/views.py:408 msgid "" "\n" "
IP Address List
\n" @@ -1640,15 +1745,15 @@ msgstr "" "\"Rede do Escritório\", \"Atacante Bloqueado\").

\n" " " -#: gatekeeper/views.py:424 +#: gatekeeper/views.py:444 msgid "IP Address deleted successfully." msgstr "Endereço IP excluído com sucesso." -#: gatekeeper/views.py:429 +#: gatekeeper/views.py:449 msgid "Delete IP Address" msgstr "Excluir Endereço IP" -#: gatekeeper/views.py:431 +#: gatekeeper/views.py:451 #, python-format msgid "Are you sure you want to delete the IP address \"%(address)s\"?" msgstr "Tem certeza de que deseja excluir o endereço IP \"%(address)s\"?" @@ -2016,8 +2121,8 @@ msgid "In" msgstr "Entrada" #: templates/api_v2/api_documentation.html:49 -#: templates/gatekeeper/gatekeeper_list.html:150 -#: templates/gatekeeper/gatekeeper_list.html:195 +#: templates/gatekeeper/gatekeeper_list.html:166 +#: templates/gatekeeper/gatekeeper_list.html:211 #: templates/wireguard/apply_route_template.html:27 msgid "Type" msgstr "Tipo" @@ -2027,11 +2132,13 @@ msgid "Required" msgstr "Obrigatório" #: templates/api_v2/api_documentation.html:62 +#: templates/gatekeeper/gatekeeper_list.html:75 #: templates/scheduler/scheduleprofile_form.html:175 msgid "Yes" msgstr "Sim" #: templates/api_v2/api_documentation.html:64 +#: templates/gatekeeper/gatekeeper_list.html:77 #: templates/scheduler/scheduleprofile_form.html:177 msgid "No" msgstr "Não" @@ -2076,12 +2183,12 @@ msgstr "Desabilitado" #: templates/app_gateway/application_details.html:121 #: templates/cluster/workers_list.html:77 #: templates/dns/static_host_list.html:74 -#: templates/gatekeeper/gatekeeper_list.html:73 -#: templates/gatekeeper/gatekeeper_list.html:116 -#: templates/gatekeeper/gatekeeper_list.html:161 -#: templates/gatekeeper/gatekeeper_list.html:209 -#: templates/gatekeeper/gatekeeper_list.html:226 -#: templates/gatekeeper/gatekeeper_list.html:278 +#: templates/gatekeeper/gatekeeper_list.html:89 +#: templates/gatekeeper/gatekeeper_list.html:132 +#: templates/gatekeeper/gatekeeper_list.html:177 +#: templates/gatekeeper/gatekeeper_list.html:225 +#: templates/gatekeeper/gatekeeper_list.html:242 +#: templates/gatekeeper/gatekeeper_list.html:294 #: templates/routing_templates/list.html:29 #: templates/scheduler/scheduleprofile_form.html:123 #: templates/scheduler/scheduleprofile_list.html:25 @@ -2163,6 +2270,7 @@ msgstr "Adicionar Política de Acesso" #: templates/app_gateway/app_gateway_list.html:140 #: templates/gatekeeper/gatekeeper_list.html:43 +#: templates/gatekeeper/gatekeeper_list.html:64 msgid "Groups" msgstr "Grupos" @@ -2173,10 +2281,10 @@ msgstr "Métodos de Autenticação" #: templates/app_gateway/app_gateway_list.html:142 #: templates/app_gateway/application_details.html:62 #: templates/app_gateway/application_details.html:109 -#: templates/gatekeeper/gatekeeper_list.html:63 -#: templates/gatekeeper/gatekeeper_list.html:106 -#: templates/gatekeeper/gatekeeper_list.html:151 -#: templates/gatekeeper/gatekeeper_list.html:198 +#: templates/gatekeeper/gatekeeper_list.html:65 +#: templates/gatekeeper/gatekeeper_list.html:122 +#: templates/gatekeeper/gatekeeper_list.html:167 +#: templates/gatekeeper/gatekeeper_list.html:214 #: templates/scheduler/scheduleprofile_form.html:111 #: templates/scheduler/scheduleprofile_list.html:15 #: templates/wireguard/apply_route_template.html:28 @@ -2734,10 +2842,19 @@ msgid "Create Port forwarding Rule" msgstr "Criar Regra de Encaminhamento de Porta" #: templates/gatekeeper/gatekeeper_auth_method_form.html:63 +#: templates/gatekeeper/gatekeeper_user_form.html:43 msgid "View QR Code" msgstr "Ver Código QR" -#: templates/gatekeeper/gatekeeper_auth_method_form.html:74 +#: templates/gatekeeper/gatekeeper_auth_method_form.html:64 +#: templates/gatekeeper/gatekeeper_user_form.html:44 +#, fuzzy +#| msgid "Global TOTP Secret" +msgid "Generate TOTP Secret" +msgstr "Segredo TOTP Global" + +#: templates/gatekeeper/gatekeeper_auth_method_form.html:93 +#: templates/gatekeeper/gatekeeper_user_form.html:73 msgid "Please enter a TOTP Secret first to generate the QR code." msgstr "Por favor, insira um Segredo TOTP primeiro para gerar o código QR." @@ -2763,44 +2880,48 @@ msgstr "Usuários" msgid "Add User" msgstr "Adicionar Usuário" -#: templates/gatekeeper/gatekeeper_list.html:88 +#: templates/gatekeeper/gatekeeper_list.html:63 +msgid "TOTP" +msgstr "" + +#: templates/gatekeeper/gatekeeper_list.html:104 msgid "No Gatekeeper Users found." msgstr "Nenhum Usuário Gatekeeper encontrado." -#: templates/gatekeeper/gatekeeper_list.html:95 +#: templates/gatekeeper/gatekeeper_list.html:111 msgid "Add Group" msgstr "Adicionar Grupo" -#: templates/gatekeeper/gatekeeper_list.html:131 +#: templates/gatekeeper/gatekeeper_list.html:147 msgid "No Gatekeeper Groups found." msgstr "Nenhum Grupo Gatekeeper encontrado." -#: templates/gatekeeper/gatekeeper_list.html:140 +#: templates/gatekeeper/gatekeeper_list.html:156 msgid "Add Auth Method" msgstr "Adicionar Método de Autenticação" -#: templates/gatekeeper/gatekeeper_list.html:176 +#: templates/gatekeeper/gatekeeper_list.html:192 msgid "No Authentication Methods found." msgstr "Nenhum Método de Autenticação encontrado." -#: templates/gatekeeper/gatekeeper_list.html:196 +#: templates/gatekeeper/gatekeeper_list.html:212 msgid "Identity" msgstr "Identidade" -#: templates/gatekeeper/gatekeeper_list.html:197 -#: templates/gatekeeper/gatekeeper_list.html:259 +#: templates/gatekeeper/gatekeeper_list.html:213 +#: templates/gatekeeper/gatekeeper_list.html:275 msgid "Auth Method" msgstr "Método de Autenticação" -#: templates/gatekeeper/gatekeeper_list.html:241 +#: templates/gatekeeper/gatekeeper_list.html:257 msgid "No Allowed Emails or Domains found." msgstr "Nenhum E-mail ou Domínio Permitido encontrado." -#: templates/gatekeeper/gatekeeper_list.html:260 +#: templates/gatekeeper/gatekeeper_list.html:276 msgid "Manage" msgstr "Gerenciar" -#: templates/gatekeeper/gatekeeper_list.html:293 +#: templates/gatekeeper/gatekeeper_list.html:309 msgid "No IP Addresses found." msgstr "Nenhum Endereço IP encontrado." @@ -3638,10 +3759,6 @@ msgstr "Confirmação de senha é obrigatória para novos usuários." msgid "The two password fields didn't match." msgstr "As duas senhas não coincidem." -#: user_manager/forms.py:127 -msgid "Password must be at least 8 characters long." -msgstr "Senha deve ter pelo menos 8 caracteres." - #: user_manager/forms.py:220 msgid "A peer group with that name already exists." msgstr "Um grupo de peers com esse nome já existe." @@ -4410,3 +4527,6 @@ msgid "No interfaces found|No WireGuard interfaces were found to process." msgstr "" "Nenhuma interface encontrada|Nenhuma interface WireGuard foi encontrada para " "processar." + +#~ msgid "Global TOTP Before Authentication" +#~ msgstr "TOTP Global Antes da Autenticação" diff --git a/locale/sk/LC_MESSAGES/django.mo b/locale/sk/LC_MESSAGES/django.mo index bf739f9..29c1d42 100644 Binary files a/locale/sk/LC_MESSAGES/django.mo and b/locale/sk/LC_MESSAGES/django.mo differ diff --git a/locale/sk/LC_MESSAGES/django.po b/locale/sk/LC_MESSAGES/django.po index 29765fa..15add00 100644 --- a/locale/sk/LC_MESSAGES/django.po +++ b/locale/sk/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-14 11:54-0300\n" +"POT-Creation-Date: 2026-03-15 17:20-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -39,12 +39,12 @@ msgstr "Späť" #: templates/app_gateway/application_details.html:125 #: templates/firewall/manage_firewall_rule.html:382 #: templates/firewall/manage_redirect_rule.html:86 -#: templates/gatekeeper/gatekeeper_list.html:77 -#: templates/gatekeeper/gatekeeper_list.html:120 -#: templates/gatekeeper/gatekeeper_list.html:165 -#: templates/gatekeeper/gatekeeper_list.html:213 -#: templates/gatekeeper/gatekeeper_list.html:230 -#: templates/gatekeeper/gatekeeper_list.html:282 +#: templates/gatekeeper/gatekeeper_list.html:93 +#: templates/gatekeeper/gatekeeper_list.html:136 +#: templates/gatekeeper/gatekeeper_list.html:181 +#: templates/gatekeeper/gatekeeper_list.html:229 +#: templates/gatekeeper/gatekeeper_list.html:246 +#: templates/gatekeeper/gatekeeper_list.html:298 #: templates/scheduler/scheduleprofile_form.html:127 #: templates/scheduler/scheduleprofile_list.html:29 #: templates/wireguard/peer_list/peer_preview_modal.html:109 @@ -65,11 +65,11 @@ msgstr "" "Naozaj chcete regenerovať token? Starý token okamžite prestane fungovať." #: api_v2/forms.py:63 app_gateway/forms.py:40 app_gateway/forms.py:92 -#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:226 -#: app_gateway/forms.py:267 cluster/forms.py:67 cluster/forms.py:124 -#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:41 -#: gatekeeper/forms.py:75 gatekeeper/forms.py:139 gatekeeper/forms.py:226 -#: gatekeeper/forms.py:256 gatekeeper/forms.py:287 +#: app_gateway/forms.py:136 app_gateway/forms.py:154 app_gateway/forms.py:237 +#: app_gateway/forms.py:278 cluster/forms.py:67 cluster/forms.py:124 +#: dns/forms.py:37 dns/forms.py:84 dns/forms.py:153 gatekeeper/forms.py:70 +#: gatekeeper/forms.py:150 gatekeeper/forms.py:212 gatekeeper/forms.py:299 +#: gatekeeper/forms.py:329 gatekeeper/forms.py:360 #: routing_templates/forms.py:71 scheduler/forms.py:102 #: templates/firewall/manage_firewall_rule.html:379 #: templates/firewall/manage_firewall_settings.html:59 @@ -83,13 +83,13 @@ msgid "Save" msgstr "Uložiť" #: api_v2/models.py:10 app_gateway/forms.py:18 app_gateway/forms.py:106 -#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:99 +#: cluster/forms.py:18 dns/forms.py:130 gatekeeper/forms.py:174 #: routing_templates/forms.py:28 templates/api_v2/api_documentation.html:47 #: templates/api_v2/list.html:8 templates/app_gateway/app_gateway_list.html:58 #: templates/app_gateway/app_gateway_list.html:138 #: templates/app_gateway/application_details.html:26 #: templates/cluster/workers_list.html:8 templates/dns/static_host_list.html:68 -#: templates/gatekeeper/gatekeeper_list.html:149 +#: templates/gatekeeper/gatekeeper_list.html:165 #: templates/routing_templates/list.html:8 #: templates/scheduler/scheduleprofile_list.html:13 #: templates/user_manager/peer_group_list.html:8 @@ -133,10 +133,10 @@ msgstr "Povolené" #: app_gateway/views.py:293 app_gateway/views.py:328 app_gateway/views.py:354 #: app_gateway/views.py:404 app_gateway/views.py:432 cluster/views.py:18 #: cluster/views.py:45 cluster/views.py:114 gatekeeper/views.py:23 -#: gatekeeper/views.py:48 gatekeeper/views.py:78 gatekeeper/views.py:101 -#: gatekeeper/views.py:131 gatekeeper/views.py:154 gatekeeper/views.py:202 -#: gatekeeper/views.py:261 gatekeeper/views.py:291 gatekeeper/views.py:314 -#: gatekeeper/views.py:344 gatekeeper/views.py:367 gatekeeper/views.py:416 +#: gatekeeper/views.py:48 gatekeeper/views.py:98 gatekeeper/views.py:121 +#: gatekeeper/views.py:151 gatekeeper/views.py:174 gatekeeper/views.py:222 +#: gatekeeper/views.py:281 gatekeeper/views.py:311 gatekeeper/views.py:334 +#: gatekeeper/views.py:364 gatekeeper/views.py:387 gatekeeper/views.py:436 #: templates/access_denied.html:9 msgid "Access Denied" msgstr "Prístup zamietnutý" @@ -217,9 +217,9 @@ msgid "Upstream" msgstr "Upstream" #: app_gateway/forms.py:41 app_gateway/forms.py:93 app_gateway/forms.py:137 -#: app_gateway/forms.py:155 app_gateway/forms.py:227 app_gateway/forms.py:268 -#: gatekeeper/forms.py:42 gatekeeper/forms.py:76 gatekeeper/forms.py:140 -#: gatekeeper/forms.py:227 gatekeeper/forms.py:257 gatekeeper/forms.py:288 +#: app_gateway/forms.py:155 app_gateway/forms.py:238 app_gateway/forms.py:279 +#: gatekeeper/forms.py:71 gatekeeper/forms.py:151 gatekeeper/forms.py:213 +#: gatekeeper/forms.py:300 gatekeeper/forms.py:330 gatekeeper/forms.py:361 #: scheduler/forms.py:103 #: templates/app_gateway/access_policy_type_select.html:50 #: templates/generic_delete_confirmation.html:19 @@ -264,17 +264,23 @@ msgstr "Povolené skupiny" msgid "Authentication Methods" msgstr "Metódy autentifikácie" -#: app_gateway/forms.py:185 +#: app_gateway/forms.py:188 msgid "Cannot select more than one Local Password authentication method." msgstr "Nemožno vybrať viac ako jednu metódu autentifikácie lokálnym heslom." -#: app_gateway/forms.py:189 +#: app_gateway/forms.py:192 msgid "" "Cannot select more than one OpenID Connect (OIDC) authentication method." msgstr "" "Nemožno vybrať viac ako jednu metódu autentifikácie OpenID Connect (OIDC)." -#: app_gateway/forms.py:193 +#: app_gateway/forms.py:196 +#, fuzzy +#| msgid "Cannot select more than one Local Password authentication method." +msgid "Cannot select more than one TOTP authentication method." +msgstr "Nemožno vybrať viac ako jednu metódu autentifikácie lokálnym heslom." + +#: app_gateway/forms.py:200 msgid "" "Cannot select both Local Password and OpenID Connect (OIDC) authentication " "methods." @@ -282,7 +288,19 @@ msgstr "" "Nemožno vybrať súčasne metódy autentifikácie lokálnym heslom a OpenID " "Connect (OIDC)." -#: app_gateway/forms.py:197 +#: app_gateway/forms.py:204 +#, fuzzy +#| msgid "" +#| "Cannot select both Local Password and OpenID Connect (OIDC) " +#| "authentication methods." +msgid "" +"TOTP must be combined with a Local Password or OpenID Connect authentication " +"method." +msgstr "" +"Nemožno vybrať súčasne metódy autentifikácie lokálnym heslom a OpenID " +"Connect (OIDC)." + +#: app_gateway/forms.py:208 msgid "" "At least one user group must be selected when using Local Password " "authentication." @@ -290,30 +308,30 @@ msgstr "" "Pri použití autentifikácie lokálnym heslom musí byť vybraná aspoň jedna " "skupina používateľov." -#: app_gateway/forms.py:201 +#: app_gateway/forms.py:212 msgid "User groups can only be used with Local Password authentication." msgstr "" "Skupiny používateľov možno použiť len s autentifikáciou lokálnym heslom." -#: app_gateway/forms.py:211 templates/app_gateway/app_gateway_list.html:62 +#: app_gateway/forms.py:222 templates/app_gateway/app_gateway_list.html:62 #: templates/app_gateway/application_details.html:31 #: templates/firewall/firewall_nav_tabs.html:15 msgid "Default Policy" msgstr "Predvolená politika" -#: app_gateway/forms.py:240 templates/app_gateway/application_details.html:105 +#: app_gateway/forms.py:251 templates/app_gateway/application_details.html:105 msgid "Route Name" msgstr "Názov trasy" -#: app_gateway/forms.py:241 templates/app_gateway/application_details.html:106 +#: app_gateway/forms.py:252 templates/app_gateway/application_details.html:106 msgid "Path Prefix" msgstr "Prefix cesty" -#: app_gateway/forms.py:242 templates/app_gateway/application_details.html:107 +#: app_gateway/forms.py:253 templates/app_gateway/application_details.html:107 msgid "Policy" msgstr "Politika" -#: app_gateway/forms.py:243 templates/app_gateway/application_details.html:108 +#: app_gateway/forms.py:254 templates/app_gateway/application_details.html:108 msgid "Order" msgstr "Poradie" @@ -331,9 +349,9 @@ msgstr "Verejné" msgid "Protected" msgstr "Chránené" -#: app_gateway/models.py:45 gatekeeper/models.py:110 +#: app_gateway/models.py:45 gatekeeper/models.py:108 #: templates/app_gateway/access_policy_type_select.html:41 -#: templates/gatekeeper/gatekeeper_list.html:272 +#: templates/gatekeeper/gatekeeper_list.html:288 msgid "Deny" msgstr "Odmietnuť" @@ -614,11 +632,11 @@ msgstr "Odstrániť trasu aplikácie" msgid "Are you sure you want to delete the route \"%(name)s\" (%(path)s)?" msgstr "Naozaj chcete odstrániť trasu \"%(name)s\" (%(path)s)?" -#: app_gateway/views.py:444 +#: app_gateway/views.py:443 msgid "Configuration exported successfully." msgstr "Konfigurácia bola úspešne exportovaná." -#: app_gateway/views.py:446 +#: app_gateway/views.py:445 msgid "" "Caddy is not active. Configuration files were exported for debugging " "purposes." @@ -629,13 +647,13 @@ msgstr "" msgid "IP Lock" msgstr "IP zámok" -#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:198 +#: cluster/forms.py:21 dns/forms.py:67 gatekeeper/forms.py:271 #: templates/cluster/workers_list.html:10 #: templates/dns/static_host_list.html:18 #: templates/firewall/manage_redirect_rule.html:43 #: templates/firewall/manage_redirect_rule.html:67 #: templates/firewall/manage_redirect_rule.html:68 -#: templates/gatekeeper/gatekeeper_list.html:256 +#: templates/gatekeeper/gatekeeper_list.html:272 #: templates/wireguard/wireguard_status.html:45 msgid "IP Address" msgstr "IP adresa" @@ -906,7 +924,7 @@ msgstr "Statický DNS" msgid "Invalid hostname." msgstr "Neplatný názov hostiteľa." -#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:201 +#: dns/forms.py:131 firewall/forms.py:111 gatekeeper/forms.py:274 #: templates/api_v2/api_documentation.html:51 #: templates/dns/static_host_list.html:69 #: templates/firewall/manage_redirect_rule.html:18 @@ -1237,43 +1255,29 @@ msgstr "Spravovať nastavenia firewall" msgid "Firewall settings saved successfully" msgstr "Nastavenia firewall boli úspešne uložené" -#: gatekeeper/forms.py:17 templates/accounts/login.html:14 -#: templates/gatekeeper/gatekeeper_list.html:61 -#: templates/user_manager/list.html:8 user_manager/forms.py:13 -#: vpn_invite/forms.py:281 -msgid "Username" -msgstr "Používateľské meno" - -#: gatekeeper/forms.py:18 gatekeeper/forms.py:271 -#: templates/gatekeeper/gatekeeper_list.html:62 -#: templates/gatekeeper/gatekeeper_list.html:204 -#: templates/wireguard/peer_list/peer_preview_modal.html:103 -msgid "Email" -msgstr "E-mail" - -#: gatekeeper/forms.py:19 templates/accounts/login.html:23 +#: gatekeeper/forms.py:17 templates/accounts/login.html:23 #: templates/vpn_invite/invite_settings.html:19 user_manager/forms.py:14 #: vpn_invite/forms.py:282 msgid "Password" msgstr "Heslo" #: gatekeeper/forms.py:20 -msgid "TOTP Secret" -msgstr "TOTP tajomstvo" +msgid "" +"Minimum 8 characters, with at least one uppercase letter, one lowercase " +"letter, and one number." +msgstr "" -#: gatekeeper/forms.py:55 templates/gatekeeper/gatekeeper_list.html:104 -msgid "Group Name" -msgstr "Názov skupiny" +#: gatekeeper/forms.py:23 +#, fuzzy +#| msgid "Random Password" +msgid "Confirm Password" +msgstr "Náhodné heslo" -#: gatekeeper/forms.py:56 templates/gatekeeper/gatekeeper_list.html:105 -msgid "Members" -msgstr "Členovia" - -#: gatekeeper/forms.py:86 +#: gatekeeper/forms.py:28 gatekeeper/forms.py:161 msgid "TOTP Validation PIN" msgstr "Validačný PIN TOTP" -#: gatekeeper/forms.py:89 +#: gatekeeper/forms.py:31 gatekeeper/forms.py:164 msgid "" "Enter a 6-digit PIN generated by your authenticator app to validate the " "secret." @@ -1281,91 +1285,147 @@ msgstr "" "Zadajte 6-miestny PIN vygenerovaný vašou autentifikačnou aplikáciou na " "overenie tajomstva." -#: gatekeeper/forms.py:100 +#: gatekeeper/forms.py:38 templates/accounts/login.html:14 +#: templates/gatekeeper/gatekeeper_list.html:61 +#: templates/user_manager/list.html:8 user_manager/forms.py:13 +#: vpn_invite/forms.py:281 +msgid "Username" +msgstr "Používateľské meno" + +#: gatekeeper/forms.py:39 gatekeeper/forms.py:344 +#: templates/gatekeeper/gatekeeper_list.html:62 +#: templates/gatekeeper/gatekeeper_list.html:220 +#: templates/wireguard/peer_list/peer_preview_modal.html:103 +msgid "Email" +msgstr "E-mail" + +#: gatekeeper/forms.py:40 +msgid "TOTP Secret" +msgstr "TOTP tajomstvo" + +#: gatekeeper/forms.py:87 +#, fuzzy +#| msgid "Port is required." +msgid "Password is required." +msgstr "Port je povinný." + +#: gatekeeper/forms.py:90 user_manager/forms.py:127 +msgid "Password must be at least 8 characters long." +msgstr "Heslo musí mať aspoň 8 znakov." + +#: gatekeeper/forms.py:92 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one lowercase letter." +msgstr "Heslo musí mať aspoň 8 znakov." + +#: gatekeeper/forms.py:94 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one uppercase letter." +msgstr "Heslo musí mať aspoň 8 znakov." + +#: gatekeeper/forms.py:96 +#, fuzzy +#| msgid "Password must be at least 8 characters long." +msgid "Password must contain at least one number." +msgstr "Heslo musí mať aspoň 8 znakov." + +#: gatekeeper/forms.py:98 +#, fuzzy +#| msgid "Password Confirmation" +msgid "Passwords do not match." +msgstr "Potvrdenie hesla" + +#: gatekeeper/forms.py:103 gatekeeper/forms.py:249 +msgid "Please provide a PIN to validate the TOTP secret." +msgstr "Na overenie tajomstva TOTP zadajte PIN." + +#: gatekeeper/forms.py:108 gatekeeper/forms.py:254 +msgid "Invalid TOTP PIN." +msgstr "Neplatný PIN TOTP." + +#: gatekeeper/forms.py:110 gatekeeper/forms.py:256 +msgid "Invalid TOTP secret format. Must be a valid Base32 string." +msgstr "Neplatný formát tajomstva TOTP. Musí to byť platný reťazec Base32." + +#: gatekeeper/forms.py:130 templates/gatekeeper/gatekeeper_list.html:120 +msgid "Group Name" +msgstr "Názov skupiny" + +#: gatekeeper/forms.py:131 templates/gatekeeper/gatekeeper_list.html:121 +msgid "Members" +msgstr "Členovia" + +#: gatekeeper/forms.py:175 msgid "Authentication Type" msgstr "Typ autentifikácie" -#: gatekeeper/forms.py:101 +#: gatekeeper/forms.py:176 msgid "Global TOTP Secret" msgstr "Globálne TOTP tajomstvo" -#: gatekeeper/forms.py:102 -msgid "Global TOTP Before Authentication" -msgstr "Globálne TOTP pred autentifikáciou" - -#: gatekeeper/forms.py:103 +#: gatekeeper/forms.py:177 msgid "OIDC Provider URL" msgstr "URL poskytovateľa OIDC" -#: gatekeeper/forms.py:104 +#: gatekeeper/forms.py:178 msgid "OIDC Client ID" msgstr "ID klienta OIDC" -#: gatekeeper/forms.py:105 +#: gatekeeper/forms.py:179 msgid "OIDC Client Secret" msgstr "Secret klienta OIDC" -#: gatekeeper/forms.py:157 +#: gatekeeper/forms.py:230 msgid "TOTP secret must be empty for Local Password authentication." msgstr "TOTP tajomstvo musí byť prázdne pre autentifikáciu miestnym heslom." -#: gatekeeper/forms.py:159 +#: gatekeeper/forms.py:232 msgid "TOTP validation PIN must be empty for Local Password authentication." msgstr "" "Validačný PIN TOTP musí byť prázdny pre autentifikáciu miestnym heslom." -#: gatekeeper/forms.py:161 +#: gatekeeper/forms.py:234 msgid "OIDC fields must be empty for Local Password authentication." msgstr "Polia OIDC musia byť prázdne pre autentifikáciu miestnym heslom." -#: gatekeeper/forms.py:167 +#: gatekeeper/forms.py:240 msgid "Only one Local Password authentication method can be configured." msgstr "" "Je možné nakonfigurovať iba jednu metódu autentifikácie miestnym heslom." -#: gatekeeper/forms.py:170 +#: gatekeeper/forms.py:243 msgid "OIDC fields must be empty for TOTP authentication." msgstr "Polia OIDC musia byť prázdne pre autentifikáciu TOTP." -#: gatekeeper/forms.py:172 +#: gatekeeper/forms.py:245 msgid "TOTP secret is required for TOTP authentication." msgstr "TOTP tajomstvo je povinné pre autentifikáciu TOTP." -#: gatekeeper/forms.py:176 -msgid "Please provide a PIN to validate the TOTP secret." -msgstr "Na overenie tajomstva TOTP zadajte PIN." - -#: gatekeeper/forms.py:181 -msgid "Invalid TOTP PIN." -msgstr "Neplatný PIN TOTP." - -#: gatekeeper/forms.py:183 -msgid "Invalid TOTP secret format. Must be a valid Base32 string." -msgstr "Neplatný formát tajomstva TOTP. Musí to byť platný reťazec Base32." - -#: gatekeeper/forms.py:186 +#: gatekeeper/forms.py:259 msgid "TOTP secret must be empty for OIDC authentication." msgstr "TOTP tajomstvo musí byť prázdne pre autentifikáciu OIDC." -#: gatekeeper/forms.py:188 +#: gatekeeper/forms.py:261 msgid "TOTP validation PIN must be empty for OIDC authentication." msgstr "Validačný PIN TOTP musí byť prázdny pre autentifikáciu OIDC." -#: gatekeeper/forms.py:197 gatekeeper/forms.py:239 gatekeeper/forms.py:270 +#: gatekeeper/forms.py:270 gatekeeper/forms.py:312 gatekeeper/forms.py:343 msgid "Authentication Method" msgstr "Metóda autentifikácie" -#: gatekeeper/forms.py:199 templates/gatekeeper/gatekeeper_list.html:257 +#: gatekeeper/forms.py:272 templates/gatekeeper/gatekeeper_list.html:273 msgid "Prefix Length" msgstr "Dĺžka prefixu" -#: gatekeeper/forms.py:200 templates/firewall/firewall_rule_list.html:47 +#: gatekeeper/forms.py:273 templates/firewall/firewall_rule_list.html:47 #: templates/firewall/manage_firewall_rule.html:360 -#: templates/gatekeeper/gatekeeper_list.html:258 +#: templates/gatekeeper/gatekeeper_list.html:274 msgid "Action" msgstr "Akcia" -#: gatekeeper/forms.py:240 templates/gatekeeper/gatekeeper_list.html:221 +#: gatekeeper/forms.py:313 templates/gatekeeper/gatekeeper_list.html:237 msgid "Domain" msgstr "Doména" @@ -1389,15 +1449,15 @@ msgstr "Zoznam IP adries" msgid "Shared/global TOTP secret key" msgstr "Zdieľaný/globálny tajný kľúč TOTP" -#: gatekeeper/models.py:69 +#: gatekeeper/models.py:68 msgid "Password for local authentication (leave blank if not using)" msgstr "Heslo pre miestnu autentifikáciu (ak nepoužívate, nechajte prázdne)" -#: gatekeeper/models.py:71 +#: gatekeeper/models.py:69 msgid "Per-user TOTP secret key" msgstr "Tajný kľúč TOTP pre jednotlivých používateľov" -#: gatekeeper/models.py:110 templates/gatekeeper/gatekeeper_list.html:270 +#: gatekeeper/models.py:108 templates/gatekeeper/gatekeeper_list.html:286 msgid "Allow" msgstr "Povoliť" @@ -1413,57 +1473,102 @@ msgstr "Vytvoriť používateľa Gatekeeper" msgid "Gatekeeper User saved successfully." msgstr "Používateľ Gatekeeper bol úspešne uložený." -#: gatekeeper/views.py:86 +#: gatekeeper/views.py:69 +msgid "" +"\n" +"

Gatekeeper User

\n" +"

Gatekeeper users are used for authenticating against protected " +"applications managed by this gateway.

\n" +"\n" +"
Password
\n" +"

Required when creating a user. When editing, leave both password " +"fields blank to keep the current password.\n" +" Passwords are stored using Argon2id hashing.

\n" +"\n" +"
TOTP Secret
\n" +"

Optional per-user TOTP secret. When set, this user will " +"authenticate using their own secret instead of the\n" +" global TOTP secret configured on the Authentication Method. Use the " +"buttons below the field to generate a\n" +" random secret and scan the QR code with your authenticator app. " +"Validate the secret by entering the current\n" +" 6-digit PIN before saving.

\n" +" " +msgstr "" + +#: gatekeeper/views.py:106 msgid "Gatekeeper User deleted successfully." msgstr "Používateľ Gatekeeper bol úspešne odstránený." -#: gatekeeper/views.py:91 +#: gatekeeper/views.py:111 msgid "Delete Gatekeeper User" msgstr "Odstrániť používateľa Gatekeeper" -#: gatekeeper/views.py:93 +#: gatekeeper/views.py:113 #, python-format msgid "Are you sure you want to delete the user \"%(username)s\"?" msgstr "Naozaj chcete odstrániť používateľa \"%(username)s\"?" -#: gatekeeper/views.py:107 +#: gatekeeper/views.py:127 msgid "Edit Gatekeeper Group" msgstr "Upraviť skupinu Gatekeeper" -#: gatekeeper/views.py:110 +#: gatekeeper/views.py:130 msgid "Create Gatekeeper Group" msgstr "Vytvoriť skupinu Gatekeeper" -#: gatekeeper/views.py:117 +#: gatekeeper/views.py:137 msgid "Gatekeeper Group saved successfully." msgstr "Skupina Gatekeeper bola úspešne uložená." -#: gatekeeper/views.py:139 +#: gatekeeper/views.py:159 msgid "Gatekeeper Group deleted successfully." msgstr "Skupina Gatekeeper bola úspešne odstránená." -#: gatekeeper/views.py:144 +#: gatekeeper/views.py:164 msgid "Delete Gatekeeper Group" msgstr "Odstrániť skupinu Gatekeeper" -#: gatekeeper/views.py:146 +#: gatekeeper/views.py:166 #, python-format msgid "Are you sure you want to delete the group \"%(name)s\"?" msgstr "Naozaj chcete odstrániť skupinu \"%(name)s\"?" -#: gatekeeper/views.py:160 +#: gatekeeper/views.py:180 msgid "Edit Authentication Method" msgstr "Upraviť metódu autentifikácie" -#: gatekeeper/views.py:163 +#: gatekeeper/views.py:183 msgid "Create Authentication Method" msgstr "Vytvoriť metódu autentifikácie" -#: gatekeeper/views.py:170 +#: gatekeeper/views.py:190 msgid "Authentication Method saved successfully." msgstr "Metóda autentifikácie bola úspešne uložená." -#: gatekeeper/views.py:175 +#: gatekeeper/views.py:195 +#, fuzzy +#| msgid "" +#| "\n" +#| "

Authentication Types

\n" +#| "

Select how users will authenticate through this method.

\n" +#| " \n" +#| "
Local Password
\n" +#| "

Users will authenticate using a standard username and password " +#| "stored locally. Only one of this type can be created.

\n" +#| " \n" +#| "
OIDC (OpenID Connect)
\n" +#| "

Users will authenticate via an external identity provider " +#| "(like Keycloak, Google, or Authelia). Requires Provider URL, Client ID, " +#| "and Client Secret.

\n" +#| " \n" +#| "
TOTP (Time-Based One-Time Password)
\n" +#| "

Users will need to enter a rotating token from an " +#| "authenticator app. Requires setting a Global TOTP Secret.
If " +#| "Global TOTP Before Authentication is enabled, the PIN is " +#| "required before the username and password to help combat bruteforce " +#| "attacks.

\n" +#| " " msgid "" "\n" "

Authentication Types

\n" @@ -1480,9 +1585,8 @@ msgid "" " \n" "
TOTP (Time-Based One-Time Password)
\n" "

Users will need to enter a rotating token from an authenticator " -"app. Requires setting a Global TOTP Secret.
If Global TOTP " -"Before Authentication is enabled, the PIN is required before the " -"username and password to help combat bruteforce attacks.

\n" +"app. If a user does not have a personal TOTP configured, the Global " +"TOTP Secret will be used instead.

\n" " " msgstr "" "\n" @@ -1508,83 +1612,83 @@ msgstr "" "p>\n" " " -#: gatekeeper/views.py:210 +#: gatekeeper/views.py:230 msgid "Authentication Method deleted successfully." msgstr "Metóda autentifikácie bola úspešne odstránená." -#: gatekeeper/views.py:215 +#: gatekeeper/views.py:235 msgid "Delete Authentication Method" msgstr "Odstrániť metódu autentifikácie" -#: gatekeeper/views.py:217 +#: gatekeeper/views.py:237 #, python-format msgid "Are you sure you want to delete the authentication method \"%(name)s\"?" msgstr "Naozaj chcete odstrániť metódu autentifikácie \"%(name)s\"?" -#: gatekeeper/views.py:267 +#: gatekeeper/views.py:287 msgid "Edit Allowed Domain" msgstr "Upraviť povolenú doménu" -#: gatekeeper/views.py:270 templates/gatekeeper/gatekeeper_list.html:186 +#: gatekeeper/views.py:290 templates/gatekeeper/gatekeeper_list.html:202 msgid "Add Allowed Domain" msgstr "Pridať povolenú doménu" -#: gatekeeper/views.py:277 +#: gatekeeper/views.py:297 msgid "Allowed Domain saved successfully." msgstr "Povolená doména bola úspešne uložená." -#: gatekeeper/views.py:299 +#: gatekeeper/views.py:319 msgid "Allowed Domain deleted successfully." msgstr "Povolená doména bola úspešne odstránená." -#: gatekeeper/views.py:304 +#: gatekeeper/views.py:324 msgid "Delete Allowed Domain" msgstr "Odstrániť povolenú doménu" -#: gatekeeper/views.py:306 +#: gatekeeper/views.py:326 #, python-format msgid "Are you sure you want to delete the allowed domain \"%(domain)s\"?" msgstr "Naozaj chcete odstrániť povolenú doménu \"%(domain)s\"?" -#: gatekeeper/views.py:320 +#: gatekeeper/views.py:340 msgid "Edit Allowed Email" msgstr "Upraviť povolený e-mail" -#: gatekeeper/views.py:323 templates/gatekeeper/gatekeeper_list.html:183 +#: gatekeeper/views.py:343 templates/gatekeeper/gatekeeper_list.html:199 msgid "Add Allowed Email" msgstr "Pridať povolený e-mail" -#: gatekeeper/views.py:330 +#: gatekeeper/views.py:350 msgid "Allowed Email saved successfully." msgstr "Povolený e-mail bol úspešne uložený." -#: gatekeeper/views.py:352 +#: gatekeeper/views.py:372 msgid "Allowed Email deleted successfully." msgstr "Povolený e-mail bol úspešne odstránený." -#: gatekeeper/views.py:357 +#: gatekeeper/views.py:377 msgid "Delete Allowed Email" msgstr "Odstrániť povolený e-mail" -#: gatekeeper/views.py:359 +#: gatekeeper/views.py:379 #, python-format msgid "Are you sure you want to delete the allowed email \"%(email)s\"?" msgstr "Naozaj chcete odstrániť povolený e-mail \"%(email)s\"?" -#: gatekeeper/views.py:373 +#: gatekeeper/views.py:393 msgid "Edit IP Address" msgstr "Upraviť IP adresu" -#: gatekeeper/views.py:376 templates/gatekeeper/gatekeeper_list.html:247 +#: gatekeeper/views.py:396 templates/gatekeeper/gatekeeper_list.html:263 #: templates/wireguard/wireguard_manage_peer.html:171 msgid "Add IP Address" msgstr "Pridať IP adresu" -#: gatekeeper/views.py:383 +#: gatekeeper/views.py:403 msgid "IP Address saved successfully." msgstr "IP adresa bola úspešne uložená." -#: gatekeeper/views.py:388 +#: gatekeeper/views.py:408 msgid "" "\n" "
IP Address List
\n" @@ -1631,15 +1735,15 @@ msgstr "" "(napr. „Kancelárska sieť“, „Blokovaný útočník“).

\n" " " -#: gatekeeper/views.py:424 +#: gatekeeper/views.py:444 msgid "IP Address deleted successfully." msgstr "IP adresa bola úspešne odstránená." -#: gatekeeper/views.py:429 +#: gatekeeper/views.py:449 msgid "Delete IP Address" msgstr "Odstrániť IP adresu" -#: gatekeeper/views.py:431 +#: gatekeeper/views.py:451 #, python-format msgid "Are you sure you want to delete the IP address \"%(address)s\"?" msgstr "Naozaj chcete odstrániť IP adresu \"%(address)s\"?" @@ -1993,8 +2097,8 @@ msgid "In" msgstr "Vstup" #: templates/api_v2/api_documentation.html:49 -#: templates/gatekeeper/gatekeeper_list.html:150 -#: templates/gatekeeper/gatekeeper_list.html:195 +#: templates/gatekeeper/gatekeeper_list.html:166 +#: templates/gatekeeper/gatekeeper_list.html:211 #: templates/wireguard/apply_route_template.html:27 msgid "Type" msgstr "Typ" @@ -2004,11 +2108,13 @@ msgid "Required" msgstr "Povinné" #: templates/api_v2/api_documentation.html:62 +#: templates/gatekeeper/gatekeeper_list.html:75 #: templates/scheduler/scheduleprofile_form.html:175 msgid "Yes" msgstr "Áno" #: templates/api_v2/api_documentation.html:64 +#: templates/gatekeeper/gatekeeper_list.html:77 #: templates/scheduler/scheduleprofile_form.html:177 msgid "No" msgstr "Nie" @@ -2053,12 +2159,12 @@ msgstr "Zakázané" #: templates/app_gateway/application_details.html:121 #: templates/cluster/workers_list.html:77 #: templates/dns/static_host_list.html:74 -#: templates/gatekeeper/gatekeeper_list.html:73 -#: templates/gatekeeper/gatekeeper_list.html:116 -#: templates/gatekeeper/gatekeeper_list.html:161 -#: templates/gatekeeper/gatekeeper_list.html:209 -#: templates/gatekeeper/gatekeeper_list.html:226 -#: templates/gatekeeper/gatekeeper_list.html:278 +#: templates/gatekeeper/gatekeeper_list.html:89 +#: templates/gatekeeper/gatekeeper_list.html:132 +#: templates/gatekeeper/gatekeeper_list.html:177 +#: templates/gatekeeper/gatekeeper_list.html:225 +#: templates/gatekeeper/gatekeeper_list.html:242 +#: templates/gatekeeper/gatekeeper_list.html:294 #: templates/routing_templates/list.html:29 #: templates/scheduler/scheduleprofile_form.html:123 #: templates/scheduler/scheduleprofile_list.html:25 @@ -2140,6 +2246,7 @@ msgstr "Pridať politiku prístupu" #: templates/app_gateway/app_gateway_list.html:140 #: templates/gatekeeper/gatekeeper_list.html:43 +#: templates/gatekeeper/gatekeeper_list.html:64 msgid "Groups" msgstr "Skupiny" @@ -2150,10 +2257,10 @@ msgstr "Metódy autentifikácie" #: templates/app_gateway/app_gateway_list.html:142 #: templates/app_gateway/application_details.html:62 #: templates/app_gateway/application_details.html:109 -#: templates/gatekeeper/gatekeeper_list.html:63 -#: templates/gatekeeper/gatekeeper_list.html:106 -#: templates/gatekeeper/gatekeeper_list.html:151 -#: templates/gatekeeper/gatekeeper_list.html:198 +#: templates/gatekeeper/gatekeeper_list.html:65 +#: templates/gatekeeper/gatekeeper_list.html:122 +#: templates/gatekeeper/gatekeeper_list.html:167 +#: templates/gatekeeper/gatekeeper_list.html:214 #: templates/scheduler/scheduleprofile_form.html:111 #: templates/scheduler/scheduleprofile_list.html:15 #: templates/wireguard/apply_route_template.html:28 @@ -2707,10 +2814,19 @@ msgid "Create Port forwarding Rule" msgstr "Vytvoriť pravidlo presmerovania portov" #: templates/gatekeeper/gatekeeper_auth_method_form.html:63 +#: templates/gatekeeper/gatekeeper_user_form.html:43 msgid "View QR Code" msgstr "Zobraziť QR kód" -#: templates/gatekeeper/gatekeeper_auth_method_form.html:74 +#: templates/gatekeeper/gatekeeper_auth_method_form.html:64 +#: templates/gatekeeper/gatekeeper_user_form.html:44 +#, fuzzy +#| msgid "Global TOTP Secret" +msgid "Generate TOTP Secret" +msgstr "Globálne TOTP tajomstvo" + +#: templates/gatekeeper/gatekeeper_auth_method_form.html:93 +#: templates/gatekeeper/gatekeeper_user_form.html:73 msgid "Please enter a TOTP Secret first to generate the QR code." msgstr "Najprv zadajte TOTP tajomstvo, aby ste vygenerovali QR kód." @@ -2736,44 +2852,48 @@ msgstr "Používatelia" msgid "Add User" msgstr "Pridať používateľa" -#: templates/gatekeeper/gatekeeper_list.html:88 +#: templates/gatekeeper/gatekeeper_list.html:63 +msgid "TOTP" +msgstr "" + +#: templates/gatekeeper/gatekeeper_list.html:104 msgid "No Gatekeeper Users found." msgstr "Nenašli sa žiadni používatelia Gatekeeper." -#: templates/gatekeeper/gatekeeper_list.html:95 +#: templates/gatekeeper/gatekeeper_list.html:111 msgid "Add Group" msgstr "Pridať skupinu" -#: templates/gatekeeper/gatekeeper_list.html:131 +#: templates/gatekeeper/gatekeeper_list.html:147 msgid "No Gatekeeper Groups found." msgstr "Nenašli sa žiadne skupiny Gatekeeper." -#: templates/gatekeeper/gatekeeper_list.html:140 +#: templates/gatekeeper/gatekeeper_list.html:156 msgid "Add Auth Method" msgstr "Pridať metódu autentifikácie" -#: templates/gatekeeper/gatekeeper_list.html:176 +#: templates/gatekeeper/gatekeeper_list.html:192 msgid "No Authentication Methods found." msgstr "Nenašli sa žiadne metódy autentifikácie." -#: templates/gatekeeper/gatekeeper_list.html:196 +#: templates/gatekeeper/gatekeeper_list.html:212 msgid "Identity" msgstr "Identita" -#: templates/gatekeeper/gatekeeper_list.html:197 -#: templates/gatekeeper/gatekeeper_list.html:259 +#: templates/gatekeeper/gatekeeper_list.html:213 +#: templates/gatekeeper/gatekeeper_list.html:275 msgid "Auth Method" msgstr "Metóda autentifikácie" -#: templates/gatekeeper/gatekeeper_list.html:241 +#: templates/gatekeeper/gatekeeper_list.html:257 msgid "No Allowed Emails or Domains found." msgstr "Nenašli sa žiadne povolené e-maily ani domény." -#: templates/gatekeeper/gatekeeper_list.html:260 +#: templates/gatekeeper/gatekeeper_list.html:276 msgid "Manage" msgstr "Spravovať" -#: templates/gatekeeper/gatekeeper_list.html:293 +#: templates/gatekeeper/gatekeeper_list.html:309 msgid "No IP Addresses found." msgstr "Nenašli sa žiadne IP adresy." @@ -3611,10 +3731,6 @@ msgstr "Potvrdenie hesla je povinné pre nových používateľov." msgid "The two password fields didn't match." msgstr "Heslá sa nezhodujú." -#: user_manager/forms.py:127 -msgid "Password must be at least 8 characters long." -msgstr "Heslo musí mať aspoň 8 znakov." - #: user_manager/forms.py:220 msgid "A peer group with that name already exists." msgstr "Peer skupina s týmto názvom už existuje." @@ -4377,3 +4493,6 @@ msgid "No interfaces found|No WireGuard interfaces were found to process." msgstr "" "Neboli nájdené rozhrania|Neboli nájdené žiadne WireGuard rozhrania na " "spracovanie." + +#~ msgid "Global TOTP Before Authentication" +#~ msgstr "Globálne TOTP pred autentifikáciou"