diff --git a/debian/changelog b/debian/changelog index 2904dc24b..7ee930881 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,32 @@ +freedombox (26.9) unstable; urgency=medium + + [ Sunil Mohan Adapa ] + * syncthing: Use systemd-sysusers for creating a system user account + * infinoted: Use systemd-sysusers for creating a system user account + * bepasty: Don't remove old system user and group + + [ Luca Boccassi ] + * Stop deleting system user on remove/purge + * Install and use sysusers.d/tmpfiles.d config files + + [ Hosted Weblate user 151773 ] + * Translated using Weblate (German) + + [ jay ] + * Translated using Weblate (Dutch) + + [ Frederico Gomes ] + * wireguard: Auto-generate client keypairs + * wireguard: Provide download and QR code for client config + * wireguard: Enable connection to a server using IPv6 + + [ James Valleroy ] + * debian/control: Add !nocheck for python3-segno + * locale: Update translation strings + * doc: Fetch latest manual + + -- James Valleroy Mon, 01 Jun 2026 21:17:46 -0400 + freedombox (26.8~bpo13+1) trixie-backports; urgency=medium * Rebuild for trixie-backports. diff --git a/debian/control b/debian/control index 2ca205254..5cccb5b8f 100644 --- a/debian/control +++ b/debian/control @@ -11,6 +11,7 @@ Uploaders: James Valleroy , Build-Depends: debhelper-compat (= 13), + dh-sequence-installsysusers, dblatex, dh-python, docbook-xsl, @@ -51,6 +52,7 @@ Build-Depends: python3-pytest-runner , python3-requests, python3-ruamel.yaml, + python3-segno , python3-setuptools, python3-systemd, python3-typeshed , @@ -74,7 +76,6 @@ Depends: ${python3:Depends}, ${misc:Depends}, ${freedombox:Depends}, - adduser, augeas-tools, bind9-dnsutils, curl, diff --git a/debian/freedombox.postinst b/debian/freedombox.postinst index c824606f7..ff6bc2a58 100755 --- a/debian/freedombox.postinst +++ b/debian/freedombox.postinst @@ -13,21 +13,9 @@ sed -i 's+-:ALL EXCEPT root fbx (admin) (sudo):ALL+-:ALL EXCEPT root fbx plinth case "$1" in configure) - if ! getent group plinth >/dev/null; then - addgroup --system --quiet plinth - fi - - if ! getent passwd plinth >/dev/null; then - adduser --system --quiet --ingroup plinth --no-create-home --home /var/lib/plinth plinth - fi - - chown plinth: /var/lib/plinth - chown plinth: /var/lib/plinth/sessions - if [ ! -e '/var/lib/freedombox/is-freedombox-disk-image' ]; then umask 377 base64 < /dev/urandom | head -c 16 | sed -e 's+$+\n+' > /var/lib/plinth/firstboot-wizard-secret - chown plinth:plinth /var/lib/plinth/firstboot-wizard-secret db_subst plinth/firstboot_wizard_secret secret $(cat /var/lib/plinth/firstboot-wizard-secret) db_input high plinth/firstboot_wizard_secret || true db_go diff --git a/debian/freedombox.postrm b/debian/freedombox.postrm index 244f5736e..6e535c19e 100755 --- a/debian/freedombox.postrm +++ b/debian/freedombox.postrm @@ -4,7 +4,6 @@ set -e case "$1" in purge) - deluser --system --quiet plinth || true rm -rf /var/lib/plinth # Remove legacy directory too diff --git a/debian/freedombox.sysusers b/debian/freedombox.sysusers new file mode 100644 index 000000000..d79adecfc --- /dev/null +++ b/debian/freedombox.sysusers @@ -0,0 +1 @@ +u! plinth - "FreedomBox service" /var/lib/plinth diff --git a/debian/freedombox.tmpfiles b/debian/freedombox.tmpfiles new file mode 100644 index 000000000..6a93eb87c --- /dev/null +++ b/debian/freedombox.tmpfiles @@ -0,0 +1,3 @@ +d /var/lib/plinth 0755 plinth plinth +d /var/lib/plinth/sessions 0755 plinth plinth +Z /var/lib/plinth/firstboot-wizard-secret 0400 plinth plinth diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index ece424158..435cdd125 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,23 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.9 (2026-06-01) == + +=== Highlights === + + * wireguard: Auto-generate client keypairs + * wireguard: Provide download and QR code for client config + +=== Other Changes === + + * bepasty: Don't remove old system user and group + * debian: Install and use sysusers.d/tmpfiles.d config files + * debian: Stop deleting system user on remove/purge + * infinoted: Use systemd-sysusers for creating a system user account + * locale: Update translations for Dutch, German + * syncthing: Use systemd-sysusers for creating a system user account + * wireguard: Enable !FreedomBox to connect to a server using IPv6 + == FreedomBox 26.8 (2026-05-11) == * locale: Update translations for German, Italian diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index ece424158..435cdd125 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,23 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 26.9 (2026-06-01) == + +=== Highlights === + + * wireguard: Auto-generate client keypairs + * wireguard: Provide download and QR code for client config + +=== Other Changes === + + * bepasty: Don't remove old system user and group + * debian: Install and use sysusers.d/tmpfiles.d config files + * debian: Stop deleting system user on remove/purge + * infinoted: Use systemd-sysusers for creating a system user account + * locale: Update translations for Dutch, German + * syncthing: Use systemd-sysusers for creating a system user account + * wireguard: Enable !FreedomBox to connect to a server using IPv6 + == FreedomBox 26.8 (2026-05-11) == * locale: Update translations for German, Italian diff --git a/plinth/__init__.py b/plinth/__init__.py index f2decbcfa..89fd60a6b 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '26.8' +__version__ = '26.9' diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index 931f236d5..d6c3ec852 100644 --- a/plinth/locale/ar/LC_MESSAGES/django.po +++ b/plinth/locale/ar/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-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2025-04-16 02:28+0000\n" "Last-Translator: MohammedSaalif <2300031323@kluniversity.in>\n" "Language-Team: Arabic \n" "Language-Team: Arabic (Saudi Arabia) \n" @@ -2072,6 +2072,7 @@ msgid "Last update" msgstr "Последно обновяване" #: plinth/modules/dynamicdns/templates/dynamicdns.html:29 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:22 msgid "IP Address" msgstr "Адрес по IP" @@ -5647,6 +5648,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_list.html:20 #: plinth/modules/networks/views.py:420 #: plinth/modules/wireguard/templates/wireguard_add_server.html:19 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:71 msgid "Add Connection" msgstr "" @@ -9259,6 +9261,7 @@ msgstr "Премахване на потребител" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:73 msgid "Cancel" msgstr "Отказ" @@ -9379,65 +9382,62 @@ msgstr "" #: plinth/modules/wireguard/forms.py:63 #, fuzzy #| msgid "Enter a valid username." -msgid "Enter a valid IPv4 address." +msgid "Not a valid IP address." msgstr "Въведете съществуващо потребителско име." -#: plinth/modules/wireguard/forms.py:65 -msgid "Enter a valid network prefix or net mask." -msgstr "" - -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:69 #: plinth/modules/wireguard/templates/wireguard.html:29 #: plinth/modules/wireguard/templates/wireguard.html:57 -#: plinth/modules/wireguard/templates/wireguard.html:119 +#: plinth/modules/wireguard/templates/wireguard.html:125 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:72 +#: plinth/modules/wireguard/forms.py:70 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:80 +#: plinth/modules/wireguard/forms.py:83 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:81 +#: plinth/modules/wireguard/forms.py:84 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:86 +#: plinth/modules/wireguard/forms.py:89 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:87 +#: plinth/modules/wireguard/forms.py:90 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:92 +#: plinth/modules/wireguard/forms.py:95 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:94 +#: plinth/modules/wireguard/forms.py:97 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10. You can also specify the network. This will allow reaching " -"machines in the network. Examples: 10.68.12.43/24 or " -"10.68.12.43/255.255.255.0." +"192.168.0.10 or 2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also " +"specify the network. This will allow reaching machines in the network. " +"Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:102 +#: plinth/modules/wireguard/forms.py:106 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:103 +#: plinth/modules/wireguard/forms.py:107 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9445,22 +9445,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:111 +#: plinth/modules/wireguard/forms.py:115 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:112 +#: plinth/modules/wireguard/forms.py:116 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:118 +#: plinth/modules/wireguard/forms.py:122 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:120 +#: plinth/modules/wireguard/forms.py:124 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9511,7 +9511,7 @@ msgid "Allowed IPs" msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:59 -#: plinth/modules/wireguard/templates/wireguard.html:120 +#: plinth/modules/wireguard/templates/wireguard.html:126 msgid "Last Connected Time" msgstr "" @@ -9521,49 +9521,58 @@ msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:88 -msgid "Add a new peer" +msgid "Auto add a new peer" msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:92 -#: plinth/modules/wireguard/views.py:59 +msgid "Add Client Automatically" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:94 +msgid "Add a new peer" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:98 +#: plinth/modules/wireguard/views.py:62 plinth/modules/wireguard/views.py:149 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:97 +#: plinth/modules/wireguard/templates/wireguard.html:103 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server not started yet." msgstr "Паролата е променена." -#: plinth/modules/wireguard/templates/wireguard.html:101 -#: plinth/modules/wireguard/templates/wireguard.html:103 +#: plinth/modules/wireguard/templates/wireguard.html:107 +#: plinth/modules/wireguard/templates/wireguard.html:109 msgid "Start WireGuard Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:109 +#: plinth/modules/wireguard/templates/wireguard.html:115 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:111 +#: plinth/modules/wireguard/templates/wireguard.html:117 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:118 +#: plinth/modules/wireguard/templates/wireguard.html:124 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:23 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:142 +#: plinth/modules/wireguard/templates/wireguard.html:148 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:152 +#: plinth/modules/wireguard/templates/wireguard.html:158 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:156 -#: plinth/modules/wireguard/views.py:178 +#: plinth/modules/wireguard/templates/wireguard.html:162 +#: plinth/modules/wireguard/views.py:301 msgid "Add Connection to Server" msgstr "" @@ -9575,6 +9584,58 @@ msgstr "" msgid "Add Client" msgstr "" +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:26 +#, fuzzy +#| msgid "Privacy" +msgid "Private Key" +msgstr "Поверителност" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:29 +msgid "Click to reveal" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:36 +msgid "Important:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:37 +msgid "Save the private key now. This page shows it only once!" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:41 +#, fuzzy +#| msgid "Configuration" +msgid "Client configuration file" +msgstr "Настройки" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:43 +msgid "" +"Download the configuration file (.conf) for manual import, or use the QR " +"code to import directly from your WireGuard mobile app." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:49 +#, fuzzy +#| msgid "warning" +msgid "Warning:" +msgstr "предупреждение" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:50 +msgid "" +"Treat this QR code like a password. Anyone who scans it can gain VPN access " +"if the connection is enabled." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:60 +msgid "Download config file" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:65 +#, fuzzy +#| msgid "Source Code" +msgid "Show QR Code" +msgstr "Изходен код" + #: plinth/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "" @@ -9663,69 +9724,79 @@ msgstr "" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: plinth/modules/wireguard/views.py:54 +#: plinth/modules/wireguard/views.py:57 plinth/modules/wireguard/views.py:144 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 +#: plinth/modules/wireguard/views.py:82 plinth/modules/wireguard/views.py:261 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:92 +#: plinth/modules/wireguard/views.py:199 +msgid "Session expired. Please try again." +msgstr "" + +#: plinth/modules/wireguard/views.py:202 +#, fuzzy +#| msgid "Domain already exists." +msgid "Client already exists" +msgstr "Домейнът вече съществува." + +#: plinth/modules/wireguard/views.py:215 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:114 +#: plinth/modules/wireguard/views.py:237 msgid "Updated client." msgstr "Настройките на клиентското приложение са променени." -#: plinth/modules/wireguard/views.py:119 +#: plinth/modules/wireguard/views.py:242 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:275 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:161 +#: plinth/modules/wireguard/views.py:284 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:163 +#: plinth/modules/wireguard/views.py:286 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:296 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:194 +#: plinth/modules/wireguard/views.py:317 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:212 +#: plinth/modules/wireguard/views.py:335 msgid "Updated server." msgstr "Настройките на сървъра са променени." -#: plinth/modules/wireguard/views.py:217 +#: plinth/modules/wireguard/views.py:340 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:255 +#: plinth/modules/wireguard/views.py:378 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:275 +#: plinth/modules/wireguard/views.py:398 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:287 +#: plinth/modules/wireguard/views.py:410 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Паролата е променена." -#: plinth/modules/wireguard/views.py:291 +#: plinth/modules/wireguard/views.py:414 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10538,9 +10609,6 @@ msgstr "Гуджарати" #~ msgid "Deleting LDAP user failed." #~ msgstr "Потребителят на LDAP не е премахнат." -#~ msgid "Source Code" -#~ msgstr "Изходен код" - #~ msgid "FreedomBox Foundation" #~ msgstr "Фондация FreedomBox" diff --git a/plinth/locale/bn/LC_MESSAGES/django.po b/plinth/locale/bn/LC_MESSAGES/django.po index 485da99df..d8209badd 100644 --- a/plinth/locale/bn/LC_MESSAGES/django.po +++ b/plinth/locale/bn/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-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2025-04-01 03:02+0000\n" "Last-Translator: MURALA SAI GANESH \n" "Language-Team: Bengali \n" "Language-Team: Catalan \n" "Language-Team: Czech \n" "Language-Team: Danish \n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" +"PO-Revision-Date: 2026-05-21 18:11+0000\n" +"Last-Translator: Hosted Weblate user 151773 \n" "Language-Team: German \n" "Language: de\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.17.1\n" +"X-Generator: Weblate 2026.6.dev0\n" #: plinth/config.py:103 #, python-brace-format @@ -2160,6 +2160,7 @@ msgid "Last update" msgstr "Letztes Update" #: plinth/modules/dynamicdns/templates/dynamicdns.html:29 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:22 msgid "IP Address" msgstr "IP-Adresse" @@ -3810,7 +3811,7 @@ msgstr "Heimautomatisierung" #: plinth/modules/homeassistant/manifest.py:63 msgid "IoT" -msgstr "" +msgstr "IdD" #: plinth/modules/homeassistant/manifest.py:64 #: plinth/modules/networks/manifest.py:8 @@ -6125,6 +6126,7 @@ msgstr "WLANs in der Nähe" #: plinth/modules/networks/templates/connections_list.html:20 #: plinth/modules/networks/views.py:420 #: plinth/modules/wireguard/templates/wireguard_add_server.html:19 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:71 msgid "Add Connection" msgstr "Verbindung hinzufügen" @@ -6722,7 +6724,7 @@ msgstr "" #: plinth/modules/oidc/__init__.py:56 msgid "OpenID Connect Provider" -msgstr "" +msgstr "OpenID Verbindungsanbieter" #: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14 msgid "Application" @@ -10089,6 +10091,7 @@ msgstr "Passkey löschen" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:73 msgid "Cancel" msgstr "Abbrechen" @@ -10210,22 +10213,21 @@ msgid "Invalid key." msgstr "Ungültiger Schlüssel." #: plinth/modules/wireguard/forms.py:63 -msgid "Enter a valid IPv4 address." +#, fuzzy +#| msgid "Enter a valid IPv4 address." +msgid "Not a valid IP address." msgstr "Eine gültige IPv4-Adresse eingeben." -#: plinth/modules/wireguard/forms.py:65 -msgid "Enter a valid network prefix or net mask." -msgstr "Geben Sie ein gültiges Netzwerkpräfix oder eine gültige Netzmaske ein." - -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:69 #: plinth/modules/wireguard/templates/wireguard.html:29 #: plinth/modules/wireguard/templates/wireguard.html:57 -#: plinth/modules/wireguard/templates/wireguard.html:119 +#: plinth/modules/wireguard/templates/wireguard.html:125 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Öffentlicher Schlüssel" -#: plinth/modules/wireguard/forms.py:72 +#: plinth/modules/wireguard/forms.py:70 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10233,11 +10235,11 @@ msgstr "" "Öffentlicher Schlüssel des Peers. Beispiel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:80 +#: plinth/modules/wireguard/forms.py:83 msgid "Endpoint of the server" msgstr "Endpunkt des Servers" -#: plinth/modules/wireguard/forms.py:81 +#: plinth/modules/wireguard/forms.py:84 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10245,11 +10247,11 @@ msgstr "" "Domänenname und Port in der Form \"ip:port\". Beispiel: " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:86 +#: plinth/modules/wireguard/forms.py:89 msgid "Public key of the server" msgstr "Öffentlicher Schlüssel des Servers" -#: plinth/modules/wireguard/forms.py:87 +#: plinth/modules/wireguard/forms.py:90 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10257,17 +10259,24 @@ msgstr "" "Vom Serveroperator bereitgestellt, eine lange Zeichenfolge. Beispiel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:92 +#: plinth/modules/wireguard/forms.py:95 msgid "Client IP address provided by server" msgstr "Vom Server bereitgestellte Client-IP-Adresse" -#: plinth/modules/wireguard/forms.py:94 +#: plinth/modules/wireguard/forms.py:97 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10. You can also specify the network. This will allow reaching " +#| "machines in the network. Examples: 10.68.12.43/24 or " +#| "10.68.12.43/255.255.255.0." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10. You can also specify the network. This will allow reaching " -"machines in the network. Examples: 10.68.12.43/24 or " -"10.68.12.43/255.255.255.0." +"192.168.0.10 or 2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also " +"specify the network. This will allow reaching machines in the network. " +"Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" "IP-Adresse, die diesem Computer auf dem VPN zugewiesen ist, nachdem eine " "Verbindung mit dem Endpunkt hergestellt wurde. Dieser Wert wird in der Regel " @@ -10275,11 +10284,11 @@ msgstr "" "das Netzwerk angeben. Dadurch können Sie auf Rechner im Netzwerk zugreifen. " "Beispiele: 10.68.12.43/24 oder 10.68.12.43/255.255.255.0." -#: plinth/modules/wireguard/forms.py:102 +#: plinth/modules/wireguard/forms.py:106 msgid "Private key of this machine" msgstr "Privater Schlüssel dieser Maschine" -#: plinth/modules/wireguard/forms.py:103 +#: plinth/modules/wireguard/forms.py:107 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10292,11 +10301,11 @@ msgstr "" "bestehen jedoch darauf, dies bereitzustellen. Beispiel: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:111 +#: plinth/modules/wireguard/forms.py:115 msgid "Pre-shared key" msgstr "Vorher geteilter Schlüssel" -#: plinth/modules/wireguard/forms.py:112 +#: plinth/modules/wireguard/forms.py:116 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10306,13 +10315,13 @@ msgstr "" "eine zusätzliche Sicherheitsebene hinzuzufügen. Füllen Sie nur aus, wenn " "dies vorgesehen ist. Beispiel: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:118 +#: plinth/modules/wireguard/forms.py:122 msgid "Use this connection to send all outgoing traffic" msgstr "" "Verwenden Sie diese Verbindung, um den gesamten ausgehenden Datenverkehr zu " "senden" -#: plinth/modules/wireguard/forms.py:120 +#: plinth/modules/wireguard/forms.py:124 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "In der Regel auf einem VPN-Dienst überprüft, über den der gesamte " @@ -10361,7 +10370,7 @@ msgid "Allowed IPs" msgstr "Zulässige IPs" #: plinth/modules/wireguard/templates/wireguard.html:59 -#: plinth/modules/wireguard/templates/wireguard.html:120 +#: plinth/modules/wireguard/templates/wireguard.html:126 msgid "Last Connected Time" msgstr "Letzte verbundene Zeit" @@ -10373,47 +10382,58 @@ msgstr "" "konfiguriert." #: plinth/modules/wireguard/templates/wireguard.html:88 -msgid "Add a new peer" +#, fuzzy +#| msgid "Add a new peer" +msgid "Auto add a new peer" msgstr "Hinzufügen eines neuen Peers" #: plinth/modules/wireguard/templates/wireguard.html:92 -#: plinth/modules/wireguard/views.py:59 +msgid "Add Client Automatically" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:94 +msgid "Add a new peer" +msgstr "Hinzufügen eines neuen Peers" + +#: plinth/modules/wireguard/templates/wireguard.html:98 +#: plinth/modules/wireguard/views.py:62 plinth/modules/wireguard/views.py:149 msgid "Add Allowed Client" msgstr "Zulässige Clients hinzufügen" -#: plinth/modules/wireguard/templates/wireguard.html:97 +#: plinth/modules/wireguard/templates/wireguard.html:103 msgid "WireGuard server not started yet." msgstr "WireGuard-Server wurde noch nicht gestartet." -#: plinth/modules/wireguard/templates/wireguard.html:101 -#: plinth/modules/wireguard/templates/wireguard.html:103 +#: plinth/modules/wireguard/templates/wireguard.html:107 +#: plinth/modules/wireguard/templates/wireguard.html:109 msgid "Start WireGuard Server" msgstr "WireGuard-Server starten" -#: plinth/modules/wireguard/templates/wireguard.html:109 +#: plinth/modules/wireguard/templates/wireguard.html:115 msgid "As a Client" msgstr "Als Client" -#: plinth/modules/wireguard/templates/wireguard.html:111 +#: plinth/modules/wireguard/templates/wireguard.html:117 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Server, mit denen %(box_name)s eine Verbindung herstellen:" -#: plinth/modules/wireguard/templates/wireguard.html:118 +#: plinth/modules/wireguard/templates/wireguard.html:124 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:23 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Endpunkt" -#: plinth/modules/wireguard/templates/wireguard.html:142 +#: plinth/modules/wireguard/templates/wireguard.html:148 msgid "No connections to remote servers are configured yet." msgstr "Es sind noch keine Verbindungen zu entfernten Servern konfiguriert." -#: plinth/modules/wireguard/templates/wireguard.html:152 +#: plinth/modules/wireguard/templates/wireguard.html:158 msgid "Add a new server" msgstr "Neuen Server hinzufügen" -#: plinth/modules/wireguard/templates/wireguard.html:156 -#: plinth/modules/wireguard/views.py:178 +#: plinth/modules/wireguard/templates/wireguard.html:162 +#: plinth/modules/wireguard/views.py:301 msgid "Add Connection to Server" msgstr "Verbindung zum Server hinzufügen" @@ -10425,6 +10445,62 @@ msgstr "IP-Adresse, die diesem Client zugewiesen wird" msgid "Add Client" msgstr "Client hinzufügen" +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:26 +#, fuzzy +#| msgid "Private key path" +msgid "Private Key" +msgstr "Pfad des privaten Schlüssels" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:29 +msgid "Click to reveal" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:36 +#, fuzzy +#| msgid "Key Import Date" +msgid "Important:" +msgstr "Schlüssel-Importdatum" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:37 +msgid "Save the private key now. This page shows it only once!" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:41 +#, fuzzy +#| msgid "configuration failed" +msgid "Client configuration file" +msgstr "Konfiguration gescheitert" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:43 +msgid "" +"Download the configuration file (.conf) for manual import, or use the QR " +"code to import directly from your WireGuard mobile app." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:49 +#, fuzzy +#| msgid "warning" +msgid "Warning:" +msgstr "Warnung" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:50 +msgid "" +"Treat this QR code like a password. Anyone who scans it can gain VPN access " +"if the connection is enabled." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:60 +#, fuzzy +#| msgid "Download my profile" +msgid "Download config file" +msgstr "Mein Profil herunterladen" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:65 +#, fuzzy +#| msgid "Source Code" +msgid "Show QR Code" +msgstr "Quellcode" + #: plinth/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "Möchten Sie diesen Client wirklich löschen?" @@ -10520,67 +10596,77 @@ msgid "All outgoing traffic is sent using this connection:" msgstr "" "Der gesamte ausgehende Datenverkehr wird über diese Verbindung gesendet:" -#: plinth/modules/wireguard/views.py:54 +#: plinth/modules/wireguard/views.py:57 plinth/modules/wireguard/views.py:144 msgid "Added new client." msgstr "Neuer Client wurde hinzugefügt." -#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 +#: plinth/modules/wireguard/views.py:82 plinth/modules/wireguard/views.py:261 msgid "Client with public key already exists" msgstr "Client mit öffentlichem Schlüssel ist bereits vorhanden" -#: plinth/modules/wireguard/views.py:92 +#: plinth/modules/wireguard/views.py:199 +msgid "Session expired. Please try again." +msgstr "" + +#: plinth/modules/wireguard/views.py:202 +#, fuzzy +#| msgid "Domain already exists." +msgid "Client already exists" +msgstr "Domain existiert bereits." + +#: plinth/modules/wireguard/views.py:215 msgid "Allowed Client" msgstr "Zulässiger Client" -#: plinth/modules/wireguard/views.py:114 +#: plinth/modules/wireguard/views.py:237 msgid "Updated client." msgstr "Aktualisierter Client." -#: plinth/modules/wireguard/views.py:119 +#: plinth/modules/wireguard/views.py:242 msgid "Modify Client" msgstr "Client bearbeiten" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:275 msgid "Delete Allowed Client" msgstr "Zulässigen Client löschen" -#: plinth/modules/wireguard/views.py:161 +#: plinth/modules/wireguard/views.py:284 msgid "Client deleted." msgstr "Client gelöscht." -#: plinth/modules/wireguard/views.py:163 +#: plinth/modules/wireguard/views.py:286 msgid "Client not found" msgstr "Client nicht gefunden" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:296 msgid "Added new server." msgstr "Neuer Server wurde hinzugefügt." -#: plinth/modules/wireguard/views.py:194 +#: plinth/modules/wireguard/views.py:317 msgid "Connection to Server" msgstr "Verbindung zum Server" -#: plinth/modules/wireguard/views.py:212 +#: plinth/modules/wireguard/views.py:335 msgid "Updated server." msgstr "Aktualisierter Server." -#: plinth/modules/wireguard/views.py:217 +#: plinth/modules/wireguard/views.py:340 msgid "Modify Connection to Server" msgstr "Ändern der Verbindung zum Server" -#: plinth/modules/wireguard/views.py:255 +#: plinth/modules/wireguard/views.py:378 msgid "Delete Connection to Server" msgstr "Verbindung zum Server löschen" -#: plinth/modules/wireguard/views.py:275 +#: plinth/modules/wireguard/views.py:398 msgid "Server deleted." msgstr "Server gelöscht." -#: plinth/modules/wireguard/views.py:287 +#: plinth/modules/wireguard/views.py:410 msgid "WireGuard server started successfully." msgstr "Der WireGuard-Server wurde erfolgreich gestartet." -#: plinth/modules/wireguard/views.py:291 +#: plinth/modules/wireguard/views.py:414 msgid "Failed to start WireGuard server: {}" msgstr "Starten des WireGuard-Servers fehlgeschlagen: {}" @@ -11275,6 +11361,10 @@ msgstr "vor der Deinstallation von {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "Enter a valid network prefix or net mask." +#~ msgstr "" +#~ "Geben Sie ein gültiges Netzwerkpräfix oder eine gültige Netzmaske ein." + #~ msgid "Debian:" #~ msgstr "Debian:" @@ -11678,9 +11768,6 @@ msgstr "Gujarati" #~ "freie Software, die unter der GNU Affero General Public License, Version " #~ "3 oder höher, vertrieben wird." -#~ msgid "Source Code" -#~ msgstr "Quellcode" - #~ msgid "FreedomBox Foundation" #~ msgstr "FreedomBox Stiftung" @@ -12285,9 +12372,6 @@ msgstr "Gujarati" #~ msgid "OpenPGP User IDs" #~ msgstr "OpenPGP-Benutzer-IDs" -#~ msgid "Key Import Date" -#~ msgstr "Schlüssel-Importdatum" - #~ msgid "SSH Key Type" #~ msgstr "SSH-Schlüsseltyp" @@ -12452,9 +12536,6 @@ msgstr "Gujarati" #~ msgid "Certificate path" #~ msgstr "Zertifikatspfad" -#~ msgid "Private key path" -#~ msgstr "Pfad des privaten Schlüssels" - #~ msgid "Use system default" #~ msgstr "Systemstandard verwenden" diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot index de73e6428..56f0276d1 100644 --- a/plinth/locale/django.pot +++ b/plinth/locale/django.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1945,6 +1945,7 @@ msgid "Last update" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:29 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:22 msgid "IP Address" msgstr "" @@ -5332,6 +5333,7 @@ msgstr "" #: plinth/modules/networks/templates/connections_list.html:20 #: plinth/modules/networks/views.py:420 #: plinth/modules/wireguard/templates/wireguard_add_server.html:19 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:71 msgid "Add Connection" msgstr "" @@ -8676,6 +8678,7 @@ msgstr "" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:73 msgid "Cancel" msgstr "" @@ -8783,65 +8786,62 @@ msgid "Invalid key." msgstr "" #: plinth/modules/wireguard/forms.py:63 -msgid "Enter a valid IPv4 address." +msgid "Not a valid IP address." msgstr "" -#: plinth/modules/wireguard/forms.py:65 -msgid "Enter a valid network prefix or net mask." -msgstr "" - -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:69 #: plinth/modules/wireguard/templates/wireguard.html:29 #: plinth/modules/wireguard/templates/wireguard.html:57 -#: plinth/modules/wireguard/templates/wireguard.html:119 +#: plinth/modules/wireguard/templates/wireguard.html:125 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" -#: plinth/modules/wireguard/forms.py:72 +#: plinth/modules/wireguard/forms.py:70 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:80 +#: plinth/modules/wireguard/forms.py:83 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:81 +#: plinth/modules/wireguard/forms.py:84 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:86 +#: plinth/modules/wireguard/forms.py:89 msgid "Public key of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:87 +#: plinth/modules/wireguard/forms.py:90 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:92 +#: plinth/modules/wireguard/forms.py:95 msgid "Client IP address provided by server" msgstr "" -#: plinth/modules/wireguard/forms.py:94 +#: plinth/modules/wireguard/forms.py:97 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10. You can also specify the network. This will allow reaching " -"machines in the network. Examples: 10.68.12.43/24 or " -"10.68.12.43/255.255.255.0." +"192.168.0.10 or 2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also " +"specify the network. This will allow reaching machines in the network. " +"Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:102 +#: plinth/modules/wireguard/forms.py:106 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:103 +#: plinth/modules/wireguard/forms.py:107 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -8849,22 +8849,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:111 +#: plinth/modules/wireguard/forms.py:115 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:112 +#: plinth/modules/wireguard/forms.py:116 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:118 +#: plinth/modules/wireguard/forms.py:122 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:120 +#: plinth/modules/wireguard/forms.py:124 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -8911,7 +8911,7 @@ msgid "Allowed IPs" msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:59 -#: plinth/modules/wireguard/templates/wireguard.html:120 +#: plinth/modules/wireguard/templates/wireguard.html:126 msgid "Last Connected Time" msgstr "" @@ -8921,47 +8921,56 @@ msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:88 -msgid "Add a new peer" +msgid "Auto add a new peer" msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:92 -#: plinth/modules/wireguard/views.py:59 +msgid "Add Client Automatically" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:94 +msgid "Add a new peer" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:98 +#: plinth/modules/wireguard/views.py:62 plinth/modules/wireguard/views.py:149 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:97 +#: plinth/modules/wireguard/templates/wireguard.html:103 msgid "WireGuard server not started yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:101 -#: plinth/modules/wireguard/templates/wireguard.html:103 +#: plinth/modules/wireguard/templates/wireguard.html:107 +#: plinth/modules/wireguard/templates/wireguard.html:109 msgid "Start WireGuard Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:109 +#: plinth/modules/wireguard/templates/wireguard.html:115 msgid "As a Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:111 +#: plinth/modules/wireguard/templates/wireguard.html:117 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:118 +#: plinth/modules/wireguard/templates/wireguard.html:124 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:23 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:142 +#: plinth/modules/wireguard/templates/wireguard.html:148 msgid "No connections to remote servers are configured yet." msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:152 +#: plinth/modules/wireguard/templates/wireguard.html:158 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:156 -#: plinth/modules/wireguard/views.py:178 +#: plinth/modules/wireguard/templates/wireguard.html:162 +#: plinth/modules/wireguard/views.py:301 msgid "Add Connection to Server" msgstr "" @@ -8973,6 +8982,50 @@ msgstr "" msgid "Add Client" msgstr "" +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:26 +msgid "Private Key" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:29 +msgid "Click to reveal" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:36 +msgid "Important:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:37 +msgid "Save the private key now. This page shows it only once!" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:41 +msgid "Client configuration file" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:43 +msgid "" +"Download the configuration file (.conf) for manual import, or use the QR " +"code to import directly from your WireGuard mobile app." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:49 +msgid "Warning:" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:50 +msgid "" +"Treat this QR code like a password. Anyone who scans it can gain VPN access " +"if the connection is enabled." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:60 +msgid "Download config file" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:65 +msgid "Show QR Code" +msgstr "" + #: plinth/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "" @@ -9061,67 +9114,75 @@ msgstr "" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: plinth/modules/wireguard/views.py:54 +#: plinth/modules/wireguard/views.py:57 plinth/modules/wireguard/views.py:144 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 +#: plinth/modules/wireguard/views.py:82 plinth/modules/wireguard/views.py:261 msgid "Client with public key already exists" msgstr "" -#: plinth/modules/wireguard/views.py:92 +#: plinth/modules/wireguard/views.py:199 +msgid "Session expired. Please try again." +msgstr "" + +#: plinth/modules/wireguard/views.py:202 +msgid "Client already exists" +msgstr "" + +#: plinth/modules/wireguard/views.py:215 msgid "Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:114 +#: plinth/modules/wireguard/views.py:237 msgid "Updated client." msgstr "" -#: plinth/modules/wireguard/views.py:119 +#: plinth/modules/wireguard/views.py:242 msgid "Modify Client" msgstr "" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:275 msgid "Delete Allowed Client" msgstr "" -#: plinth/modules/wireguard/views.py:161 +#: plinth/modules/wireguard/views.py:284 msgid "Client deleted." msgstr "" -#: plinth/modules/wireguard/views.py:163 +#: plinth/modules/wireguard/views.py:286 msgid "Client not found" msgstr "" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:296 msgid "Added new server." msgstr "" -#: plinth/modules/wireguard/views.py:194 +#: plinth/modules/wireguard/views.py:317 msgid "Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:212 +#: plinth/modules/wireguard/views.py:335 msgid "Updated server." msgstr "" -#: plinth/modules/wireguard/views.py:217 +#: plinth/modules/wireguard/views.py:340 msgid "Modify Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:255 +#: plinth/modules/wireguard/views.py:378 msgid "Delete Connection to Server" msgstr "" -#: plinth/modules/wireguard/views.py:275 +#: plinth/modules/wireguard/views.py:398 msgid "Server deleted." msgstr "" -#: plinth/modules/wireguard/views.py:287 +#: plinth/modules/wireguard/views.py:410 msgid "WireGuard server started successfully." msgstr "" -#: plinth/modules/wireguard/views.py:291 +#: plinth/modules/wireguard/views.py:414 msgid "Failed to start WireGuard server: {}" msgstr "" diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po index 39260fb47..6b5184bbf 100644 --- a/plinth/locale/el/LC_MESSAGES/django.po +++ b/plinth/locale/el/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-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2026-02-22 13:17+0000\n" "Last-Translator: James Valleroy \n" "Language-Team: Greek \n" "Language-Team: Spanish \n" "Language-Team: Estonian \n" "Language-Team: Persian ویکی %(box_name)s را ببینید." -#~ msgid "Source Code" -#~ msgstr "کد منبع" - #, fuzzy #~ msgid "FreedomBox Foundation" #~ msgstr "FreedomBox" @@ -11203,9 +11273,6 @@ msgstr "" #~ msgid "OpenPGP User IDs" #~ msgstr "شناسه‌های کاربری OpenPGP" -#~ msgid "Key Import Date" -#~ msgstr "تاریخ درون‌ریزی کلید" - #~ msgid "SSH Key Type" #~ msgstr "نوع کلید SSH" @@ -11297,11 +11364,6 @@ msgstr "" #~ msgid "Certificate path" #~ msgstr "وضعیت گواهی دیجیتال" -#, fuzzy -#~| msgid "Create Connection" -#~ msgid "Private key path" -#~ msgstr "ساختن اتصال" - #, fuzzy #~| msgid "Enabled" #~ msgid "Enabled aliases" @@ -11501,11 +11563,6 @@ msgstr "" #~ "Pagekite setup finished. The HTTP and HTTPS services are activated now." #~ msgstr "راه‌اندازی Pagekite پایان یافت. سرویس‌های HTTP و HTTPS فعال هستند." -#, fuzzy -#~| msgid "{box_name} Manual" -#~ msgid "Download Manual" -#~ msgstr "کتاب راهنمای {box_name}" - #, fuzzy #~ msgid "Dynamic DNS Service" #~ msgstr "برنامهٔ DNS متغیر (Dynamic DNS Client)" diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po index 75d7bf687..3376913b2 100644 --- a/plinth/locale/fake/LC_MESSAGES/django.po +++ b/plinth/locale/fake/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinth 0.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers \n" "Language-Team: French \n" "Language-Team: Galician \n" "Language-Team: Gujarati \n" "Language-Team: Hindi \n" @@ -2254,6 +2254,7 @@ msgid "Last update" msgstr "Legutolsó frissítés" #: plinth/modules/dynamicdns/templates/dynamicdns.html:29 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:22 msgid "IP Address" msgstr "IP-cím" @@ -6280,6 +6281,7 @@ msgstr "Wi-Fi hálózatok a közelben" #: plinth/modules/networks/templates/connections_list.html:20 #: plinth/modules/networks/views.py:420 #: plinth/modules/wireguard/templates/wireguard_add_server.html:19 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:71 msgid "Add Connection" msgstr "Kapcsolat hozzáadása" @@ -10294,6 +10296,7 @@ msgstr "Felhasználó törlése" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:73 msgid "Cancel" msgstr "Mégse" @@ -10419,22 +10422,19 @@ msgstr "Érvénytelen kulcs." #: plinth/modules/wireguard/forms.py:63 #, fuzzy #| msgid "Enter a valid username." -msgid "Enter a valid IPv4 address." +msgid "Not a valid IP address." msgstr "Adj meg egy érvényes felhasználónevet." -#: plinth/modules/wireguard/forms.py:65 -msgid "Enter a valid network prefix or net mask." -msgstr "" - -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:69 #: plinth/modules/wireguard/templates/wireguard.html:29 #: plinth/modules/wireguard/templates/wireguard.html:57 -#: plinth/modules/wireguard/templates/wireguard.html:119 +#: plinth/modules/wireguard/templates/wireguard.html:125 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Nyilvános kulcs" -#: plinth/modules/wireguard/forms.py:72 +#: plinth/modules/wireguard/forms.py:70 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10442,22 +10442,22 @@ msgstr "" "A partner nyilvános kulcsa. Például: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:80 +#: plinth/modules/wireguard/forms.py:83 msgid "Endpoint of the server" msgstr "A szerver végpontja" -#: plinth/modules/wireguard/forms.py:81 +#: plinth/modules/wireguard/forms.py:84 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" "Domainnév és port \"ip:port\" formában. Például: demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:86 +#: plinth/modules/wireguard/forms.py:89 msgid "Public key of the server" msgstr "A szerver nyilvános kulcsa" -#: plinth/modules/wireguard/forms.py:87 +#: plinth/modules/wireguard/forms.py:90 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10465,11 +10465,11 @@ msgstr "" "A szerver üzemeltetője által megadott hosszú karakterlánc. Például: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:92 +#: plinth/modules/wireguard/forms.py:95 msgid "Client IP address provided by server" msgstr "A szerver által megadott kliens IP-cím" -#: plinth/modules/wireguard/forms.py:94 +#: plinth/modules/wireguard/forms.py:97 #, fuzzy #| msgid "" #| "IP address assigned to this machine on the VPN after connecting to the " @@ -10478,19 +10478,19 @@ msgstr "A szerver által megadott kliens IP-cím" msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10. You can also specify the network. This will allow reaching " -"machines in the network. Examples: 10.68.12.43/24 or " -"10.68.12.43/255.255.255.0." +"192.168.0.10 or 2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also " +"specify the network. This will allow reaching machines in the network. " +"Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" "A gépnek a VPN-en a végponthoz való csatlakozást követően kijelölt IP-cím. " "Ezt az értéket általában a szerver üzemeltetője adja meg. Például: " "192.168.0.10." -#: plinth/modules/wireguard/forms.py:102 +#: plinth/modules/wireguard/forms.py:106 msgid "Private key of this machine" msgstr "A gép privát kulcsa" -#: plinth/modules/wireguard/forms.py:103 +#: plinth/modules/wireguard/forms.py:107 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10502,11 +10502,11 @@ msgstr "" "módszer. Egyes szerverüzemeltetők azonban ragaszkodnak ennek megadásához. " "Például: MConEJFIg6+DFHgg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:111 +#: plinth/modules/wireguard/forms.py:115 msgid "Pre-shared key" msgstr "Előre megosztott kulcs" -#: plinth/modules/wireguard/forms.py:112 +#: plinth/modules/wireguard/forms.py:116 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10516,11 +10516,11 @@ msgstr "" "további biztonsági szintet biztosít. Csak akkor töltsd ki, ha rendelkezésre " "áll. Például: MConEJFIg6+DFHgg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:118 +#: plinth/modules/wireguard/forms.py:122 msgid "Use this connection to send all outgoing traffic" msgstr "Használja ezt a kapcsolatot az összes kimenő forgalom küldésére" -#: plinth/modules/wireguard/forms.py:120 +#: plinth/modules/wireguard/forms.py:124 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Jellemzően olyan VPN-szolgáltatásnál van bejelölve, amelyen keresztül az " @@ -10575,7 +10575,7 @@ msgid "Allowed IPs" msgstr "Engedélyezett IP-címek" #: plinth/modules/wireguard/templates/wireguard.html:59 -#: plinth/modules/wireguard/templates/wireguard.html:120 +#: plinth/modules/wireguard/templates/wireguard.html:126 msgid "Last Connected Time" msgstr "Utolsó csatlakozási idő" @@ -10585,49 +10585,60 @@ msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Ehhez a %(box_name)shoz még nincs partner konfigurálva." #: plinth/modules/wireguard/templates/wireguard.html:88 -msgid "Add a new peer" +#, fuzzy +#| msgid "Add a new peer" +msgid "Auto add a new peer" msgstr "Új társ hozzáadása" #: plinth/modules/wireguard/templates/wireguard.html:92 -#: plinth/modules/wireguard/views.py:59 +msgid "Add Client Automatically" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:94 +msgid "Add a new peer" +msgstr "Új társ hozzáadása" + +#: plinth/modules/wireguard/templates/wireguard.html:98 +#: plinth/modules/wireguard/views.py:62 plinth/modules/wireguard/views.py:149 msgid "Add Allowed Client" msgstr "Engedélyezett kliens hozzáadása" -#: plinth/modules/wireguard/templates/wireguard.html:97 +#: plinth/modules/wireguard/templates/wireguard.html:103 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server not started yet." msgstr "A jelszó módosítása sikeres." -#: plinth/modules/wireguard/templates/wireguard.html:101 -#: plinth/modules/wireguard/templates/wireguard.html:103 +#: plinth/modules/wireguard/templates/wireguard.html:107 +#: plinth/modules/wireguard/templates/wireguard.html:109 msgid "Start WireGuard Server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:109 +#: plinth/modules/wireguard/templates/wireguard.html:115 msgid "As a Client" msgstr "Ügyfélként" -#: plinth/modules/wireguard/templates/wireguard.html:111 +#: plinth/modules/wireguard/templates/wireguard.html:117 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Szerverek, amelyekhez a %(box_name)s csatlakozni fog:" -#: plinth/modules/wireguard/templates/wireguard.html:118 +#: plinth/modules/wireguard/templates/wireguard.html:124 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:23 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Végpont" -#: plinth/modules/wireguard/templates/wireguard.html:142 +#: plinth/modules/wireguard/templates/wireguard.html:148 msgid "No connections to remote servers are configured yet." msgstr "A távoli szerverekhez még nincsenek konfigurálva kapcsolatok." -#: plinth/modules/wireguard/templates/wireguard.html:152 +#: plinth/modules/wireguard/templates/wireguard.html:158 msgid "Add a new server" msgstr "Új szerver hozzáadása" -#: plinth/modules/wireguard/templates/wireguard.html:156 -#: plinth/modules/wireguard/views.py:178 +#: plinth/modules/wireguard/templates/wireguard.html:162 +#: plinth/modules/wireguard/views.py:301 msgid "Add Connection to Server" msgstr "Kapcsolat hozzáadása a szerverhez" @@ -10641,6 +10652,62 @@ msgstr "A kliens által használt IP-cím:" msgid "Add Client" msgstr "Kliens hozzáadása" +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:26 +#, fuzzy +#| msgid "Private repository" +msgid "Private Key" +msgstr "Privát tároló" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:29 +msgid "Click to reveal" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:36 +#, fuzzy +#| msgid "Key Import Date" +msgid "Important:" +msgstr "Kulcs importálásának dátuma" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:37 +msgid "Save the private key now. This page shows it only once!" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:41 +#, fuzzy +#| msgid "configuration failed" +msgid "Client configuration file" +msgstr "konfiguráció sikertelen" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:43 +msgid "" +"Download the configuration file (.conf) for manual import, or use the QR " +"code to import directly from your WireGuard mobile app." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:49 +#, fuzzy +#| msgid "warning" +msgid "Warning:" +msgstr "figyelmeztetés" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:50 +msgid "" +"Treat this QR code like a password. Anyone who scans it can gain VPN access " +"if the connection is enabled." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:60 +#, fuzzy +#| msgid "Download my profile" +msgid "Download config file" +msgstr "Saját profilom letöltése" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:65 +#, fuzzy +#| msgid "Source Code" +msgid "Show QR Code" +msgstr "Forráskód" + #: plinth/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "Biztosan el szeretnéd távolítani ezt az klienst?" @@ -10734,69 +10801,79 @@ msgstr "A gép IP-címe:" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: plinth/modules/wireguard/views.py:54 +#: plinth/modules/wireguard/views.py:57 plinth/modules/wireguard/views.py:144 msgid "Added new client." msgstr "Új kliens hozzáadva." -#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 +#: plinth/modules/wireguard/views.py:82 plinth/modules/wireguard/views.py:261 msgid "Client with public key already exists" msgstr "Ezzel a nyilvános kulccsal már létezik kliens" -#: plinth/modules/wireguard/views.py:92 +#: plinth/modules/wireguard/views.py:199 +msgid "Session expired. Please try again." +msgstr "" + +#: plinth/modules/wireguard/views.py:202 +#, fuzzy +#| msgid "Client with public key already exists" +msgid "Client already exists" +msgstr "Ezzel a nyilvános kulccsal már létezik kliens" + +#: plinth/modules/wireguard/views.py:215 msgid "Allowed Client" msgstr "Engedélyezett kliens" -#: plinth/modules/wireguard/views.py:114 +#: plinth/modules/wireguard/views.py:237 msgid "Updated client." msgstr "Kliens frissítve." -#: plinth/modules/wireguard/views.py:119 +#: plinth/modules/wireguard/views.py:242 msgid "Modify Client" msgstr "Ügyfél módosítása" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:275 msgid "Delete Allowed Client" msgstr "Engedélyezett kliensek törlése" -#: plinth/modules/wireguard/views.py:161 +#: plinth/modules/wireguard/views.py:284 msgid "Client deleted." msgstr "Ügyfél törölve." -#: plinth/modules/wireguard/views.py:163 +#: plinth/modules/wireguard/views.py:286 msgid "Client not found" msgstr "Az ügyfél nem található" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:296 msgid "Added new server." msgstr "Új szerver hozzáadva." -#: plinth/modules/wireguard/views.py:194 +#: plinth/modules/wireguard/views.py:317 msgid "Connection to Server" msgstr "Kapcsolat a szerverhez" -#: plinth/modules/wireguard/views.py:212 +#: plinth/modules/wireguard/views.py:335 msgid "Updated server." msgstr "Szerver frissítve." -#: plinth/modules/wireguard/views.py:217 +#: plinth/modules/wireguard/views.py:340 msgid "Modify Connection to Server" msgstr "Szerverrel létesített kapcsolat módosítása" -#: plinth/modules/wireguard/views.py:255 +#: plinth/modules/wireguard/views.py:378 msgid "Delete Connection to Server" msgstr "Szerverrel létesített kapcsolat törlése" -#: plinth/modules/wireguard/views.py:275 +#: plinth/modules/wireguard/views.py:398 msgid "Server deleted." msgstr "Szerver törölve." -#: plinth/modules/wireguard/views.py:287 +#: plinth/modules/wireguard/views.py:410 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "A jelszó módosítása sikeres." -#: plinth/modules/wireguard/views.py:291 +#: plinth/modules/wireguard/views.py:414 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -11932,9 +12009,6 @@ msgstr "Gudzsaráti" #~ "Általános Nyilvános Licenc (3-as vagy újabb változat) alapján terjesztett " #~ "szabad szoftver." -#~ msgid "Source Code" -#~ msgstr "Forráskód" - #~ msgid "FreedomBox Foundation" #~ msgstr "FreedomBox Alapítvány" @@ -12531,9 +12605,6 @@ msgstr "Gudzsaráti" #~ msgid "OpenPGP User IDs" #~ msgstr "OpenPGP felhasználói azonosítók" -#~ msgid "Key Import Date" -#~ msgstr "Kulcs importálásának dátuma" - #~ msgid "SSH Key Type" #~ msgstr "SSH kulcs típusa" @@ -12689,11 +12760,6 @@ msgstr "Gudzsaráti" #~ msgid "Certificate path" #~ msgstr "Tanúsítvány állapot" -#, fuzzy -#~| msgid "Private repository" -#~ msgid "Private key path" -#~ msgstr "Privát tároló" - #, fuzzy #~| msgid "Enable damage" #~ msgid "Enabled aliases" diff --git a/plinth/locale/id/LC_MESSAGES/django.po b/plinth/locale/id/LC_MESSAGES/django.po index c4378eb8e..f122e6dde 100644 --- a/plinth/locale/id/LC_MESSAGES/django.po +++ b/plinth/locale/id/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Indonesian (FreedomBox)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Indonesian %(box_name)s wiki ." -#~ msgid "Source Code" -#~ msgstr "Kode Sumber" - #~ msgid "FreedomBox Foundation" #~ msgstr "FreedomBox Foundation" @@ -11373,9 +11447,6 @@ msgstr "Bahasa Gujarat" #~ msgid "OpenPGP User IDs" #~ msgstr "ID pengguna OpenPGP" -#~ msgid "Key Import Date" -#~ msgstr "Tanggal Impor Kunci" - #~ msgid "SSH Key Type" #~ msgstr "Tipe Kunci SSH" @@ -11470,11 +11541,6 @@ msgstr "Bahasa Gujarat" #~ msgid "Certificate path" #~ msgstr "Status Sertifikat" -#, fuzzy -#~| msgid "Private repository" -#~ msgid "Private key path" -#~ msgstr "Penyimpanan Pribadi" - #, fuzzy #~| msgid "Enable damage" #~ msgid "Enabled aliases" diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index 7964dd299..c1aa07698 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/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-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2026-05-05 17:11+0000\n" "Last-Translator: Pierfrancesco Passerini \n" "Language-Team: Italian ?" #: plinth/modules/users/templates/users_passkeys.html:145 msgid "You will need this passkey's device to add it back again." -msgstr "Avrai bisogno di questa passkey per aggiungere di nuovo il dispositivo." +msgstr "" +"Avrai bisogno di questa passkey per aggiungere di nuovo il dispositivo." #: plinth/modules/users/templates/users_passkeys.html:152 msgid "Delete passkey" @@ -9961,6 +9964,7 @@ msgstr "Cancella Passkey" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:73 msgid "Cancel" msgstr "Cancella" @@ -10080,22 +10084,21 @@ msgid "Invalid key." msgstr "Chiave non valida." #: plinth/modules/wireguard/forms.py:63 -msgid "Enter a valid IPv4 address." +#, fuzzy +#| msgid "Enter a valid IPv4 address." +msgid "Not a valid IP address." msgstr "Inserisci un indirizzo IPv4 valido." -#: plinth/modules/wireguard/forms.py:65 -msgid "Enter a valid network prefix or net mask." -msgstr "Inserisci un prefisso di rete od una netmask validi." - -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:69 #: plinth/modules/wireguard/templates/wireguard.html:29 #: plinth/modules/wireguard/templates/wireguard.html:57 -#: plinth/modules/wireguard/templates/wireguard.html:119 +#: plinth/modules/wireguard/templates/wireguard.html:125 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Chiave pubblico" -#: plinth/modules/wireguard/forms.py:72 +#: plinth/modules/wireguard/forms.py:70 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10103,11 +10106,11 @@ msgstr "" "Chiave pubblica del nodo. Esempio: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:80 +#: plinth/modules/wireguard/forms.py:83 msgid "Endpoint of the server" msgstr "Endpoint del server" -#: plinth/modules/wireguard/forms.py:81 +#: plinth/modules/wireguard/forms.py:84 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10115,11 +10118,11 @@ msgstr "" "Nome di dominio e porta nel formato \"ip:porta\". Esempio: " "demo.wireguard.com:12912" -#: plinth/modules/wireguard/forms.py:86 +#: plinth/modules/wireguard/forms.py:89 msgid "Public key of the server" msgstr "Chiave pubblica del server" -#: plinth/modules/wireguard/forms.py:87 +#: plinth/modules/wireguard/forms.py:90 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10127,17 +10130,24 @@ msgstr "" "Fornito dal gestore del server, una lunga sequenza di caratteri. Esempio: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:92 +#: plinth/modules/wireguard/forms.py:95 msgid "Client IP address provided by server" msgstr "Indirizzo IP client fornito dal server" -#: plinth/modules/wireguard/forms.py:94 +#: plinth/modules/wireguard/forms.py:97 +#, fuzzy +#| msgid "" +#| "IP address assigned to this machine on the VPN after connecting to the " +#| "endpoint. This value is usually provided by the server operator. Example: " +#| "192.168.0.10. You can also specify the network. This will allow reaching " +#| "machines in the network. Examples: 10.68.12.43/24 or " +#| "10.68.12.43/255.255.255.0." msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10. You can also specify the network. This will allow reaching " -"machines in the network. Examples: 10.68.12.43/24 or " -"10.68.12.43/255.255.255.0." +"192.168.0.10 or 2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also " +"specify the network. This will allow reaching machines in the network. " +"Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" "Indirizzo IP assegnato a questa macchina sulla VPN dopo la connessione " "all'endpoint. Questo valore è generalmente fornito dal gestore del server. " @@ -10145,11 +10155,11 @@ msgstr "" "consentirà di raggiungere le macchine nella rete. Esempi: 10.68.12.43/24 o " "10.68.12.43/255.255.255.0." -#: plinth/modules/wireguard/forms.py:102 +#: plinth/modules/wireguard/forms.py:106 msgid "Private key of this machine" msgstr "Chiave privata di questa macchina" -#: plinth/modules/wireguard/forms.py:103 +#: plinth/modules/wireguard/forms.py:107 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10161,11 +10171,11 @@ msgstr "" "metodo consigliato. Tuttavia, alcuni gestori del server insistono per " "fornirla. Esempio: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:111 +#: plinth/modules/wireguard/forms.py:115 msgid "Pre-shared key" msgstr "Chiave condivisa" -#: plinth/modules/wireguard/forms.py:112 +#: plinth/modules/wireguard/forms.py:116 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10175,11 +10185,11 @@ msgstr "" "ulteriore livello di sicurezza. Inserirla solo se vien fornita. Esempio: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=" -#: plinth/modules/wireguard/forms.py:118 +#: plinth/modules/wireguard/forms.py:122 msgid "Use this connection to send all outgoing traffic" msgstr "Usa questa connessione per veicolare tutto il traffico in uscita" -#: plinth/modules/wireguard/forms.py:120 +#: plinth/modules/wireguard/forms.py:124 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Solitamente selezionato per un servizio VPN attraverso cui viene inviato " @@ -10228,7 +10238,7 @@ msgid "Allowed IPs" msgstr "IP autorizzati" #: plinth/modules/wireguard/templates/wireguard.html:59 -#: plinth/modules/wireguard/templates/wireguard.html:120 +#: plinth/modules/wireguard/templates/wireguard.html:126 msgid "Last Connected Time" msgstr "Data dell'ultima connessione" @@ -10238,47 +10248,58 @@ msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Non ci sono nodi autorizzati a connettersi a %(box_name)s." #: plinth/modules/wireguard/templates/wireguard.html:88 -msgid "Add a new peer" +#, fuzzy +#| msgid "Add a new peer" +msgid "Auto add a new peer" msgstr "Aggiungi un nuovo nodo" #: plinth/modules/wireguard/templates/wireguard.html:92 -#: plinth/modules/wireguard/views.py:59 +msgid "Add Client Automatically" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:94 +msgid "Add a new peer" +msgstr "Aggiungi un nuovo nodo" + +#: plinth/modules/wireguard/templates/wireguard.html:98 +#: plinth/modules/wireguard/views.py:62 plinth/modules/wireguard/views.py:149 msgid "Add Allowed Client" msgstr "Aggiungi client autorizzato" -#: plinth/modules/wireguard/templates/wireguard.html:97 +#: plinth/modules/wireguard/templates/wireguard.html:103 msgid "WireGuard server not started yet." msgstr "Il server WireGuard non è stato ancora avviato." -#: plinth/modules/wireguard/templates/wireguard.html:101 -#: plinth/modules/wireguard/templates/wireguard.html:103 +#: plinth/modules/wireguard/templates/wireguard.html:107 +#: plinth/modules/wireguard/templates/wireguard.html:109 msgid "Start WireGuard Server" msgstr "Avvia WireGuard server" -#: plinth/modules/wireguard/templates/wireguard.html:109 +#: plinth/modules/wireguard/templates/wireguard.html:115 msgid "As a Client" msgstr "Come Client" -#: plinth/modules/wireguard/templates/wireguard.html:111 +#: plinth/modules/wireguard/templates/wireguard.html:117 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Server a cui %(box_name)s si connetterà:" -#: plinth/modules/wireguard/templates/wireguard.html:118 +#: plinth/modules/wireguard/templates/wireguard.html:124 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:23 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Endpoint" -#: plinth/modules/wireguard/templates/wireguard.html:142 +#: plinth/modules/wireguard/templates/wireguard.html:148 msgid "No connections to remote servers are configured yet." msgstr "Non sono configurate connessioni a server remoti." -#: plinth/modules/wireguard/templates/wireguard.html:152 +#: plinth/modules/wireguard/templates/wireguard.html:158 msgid "Add a new server" msgstr "Aggiungi un nuovo server" -#: plinth/modules/wireguard/templates/wireguard.html:156 -#: plinth/modules/wireguard/views.py:178 +#: plinth/modules/wireguard/templates/wireguard.html:162 +#: plinth/modules/wireguard/views.py:301 msgid "Add Connection to Server" msgstr "Aggiungi Connessione a Server" @@ -10290,6 +10311,60 @@ msgstr "Indirizzo IP che sarà assegnato al client" msgid "Add Client" msgstr "Aggiungere Client" +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:26 +#, fuzzy +#| msgid "Private key path" +msgid "Private Key" +msgstr "Percorso chiave privata" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:29 +msgid "Click to reveal" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:36 +#, fuzzy +#| msgid "Key Import Date" +msgid "Important:" +msgstr "Data Importazione Chiave" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:37 +msgid "Save the private key now. This page shows it only once!" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:41 +#, fuzzy +#| msgid "configuration failed" +msgid "Client configuration file" +msgstr "configurazione fallita" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:43 +msgid "" +"Download the configuration file (.conf) for manual import, or use the QR " +"code to import directly from your WireGuard mobile app." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:49 +#, fuzzy +#| msgid "warning" +msgid "Warning:" +msgstr "attenzione" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:50 +msgid "" +"Treat this QR code like a password. Anyone who scans it can gain VPN access " +"if the connection is enabled." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:60 +#, fuzzy +#| msgid "Download my profile" +msgid "Download config file" +msgstr "Download del profilo" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:65 +msgid "Show QR Code" +msgstr "" + #: plinth/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "Sei sicuro di voler eliminare questo client?" @@ -10383,67 +10458,77 @@ msgstr "Indirizzo IP di questa macchina:" msgid "All outgoing traffic is sent using this connection:" msgstr "Tutto il traffico in uscita utilizza questo collegamento:" -#: plinth/modules/wireguard/views.py:54 +#: plinth/modules/wireguard/views.py:57 plinth/modules/wireguard/views.py:144 msgid "Added new client." msgstr "Client aggiunto." -#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 +#: plinth/modules/wireguard/views.py:82 plinth/modules/wireguard/views.py:261 msgid "Client with public key already exists" msgstr "Il cliente con chiave pubblica esiste già" -#: plinth/modules/wireguard/views.py:92 +#: plinth/modules/wireguard/views.py:199 +msgid "Session expired. Please try again." +msgstr "" + +#: plinth/modules/wireguard/views.py:202 +#, fuzzy +#| msgid "Domain already exists." +msgid "Client already exists" +msgstr "Il dominio esiste già." + +#: plinth/modules/wireguard/views.py:215 msgid "Allowed Client" msgstr "Client autorizzato" -#: plinth/modules/wireguard/views.py:114 +#: plinth/modules/wireguard/views.py:237 msgid "Updated client." msgstr "Client aggiornato." -#: plinth/modules/wireguard/views.py:119 +#: plinth/modules/wireguard/views.py:242 msgid "Modify Client" msgstr "Modifica client" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:275 msgid "Delete Allowed Client" msgstr "Elimina client autorizzato" -#: plinth/modules/wireguard/views.py:161 +#: plinth/modules/wireguard/views.py:284 msgid "Client deleted." msgstr "Client cancellato." -#: plinth/modules/wireguard/views.py:163 +#: plinth/modules/wireguard/views.py:286 msgid "Client not found" msgstr "Cliente non trovato" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:296 msgid "Added new server." msgstr "Aggiunto nuovo server." -#: plinth/modules/wireguard/views.py:194 +#: plinth/modules/wireguard/views.py:317 msgid "Connection to Server" msgstr "Connessione al server" -#: plinth/modules/wireguard/views.py:212 +#: plinth/modules/wireguard/views.py:335 msgid "Updated server." msgstr "Aggiornato server." -#: plinth/modules/wireguard/views.py:217 +#: plinth/modules/wireguard/views.py:340 msgid "Modify Connection to Server" msgstr "Modifica Concessione a server" -#: plinth/modules/wireguard/views.py:255 +#: plinth/modules/wireguard/views.py:378 msgid "Delete Connection to Server" msgstr "Cancella Connessione a server" -#: plinth/modules/wireguard/views.py:275 +#: plinth/modules/wireguard/views.py:398 msgid "Server deleted." msgstr "Server cancellato." -#: plinth/modules/wireguard/views.py:287 +#: plinth/modules/wireguard/views.py:410 msgid "WireGuard server started successfully." msgstr "Il server WireGuard è stato correttamente avviato." -#: plinth/modules/wireguard/views.py:291 +#: plinth/modules/wireguard/views.py:414 msgid "Failed to start WireGuard server: {}" msgstr "Avvio del server WireGuard non riuscito: {}" @@ -11127,6 +11212,9 @@ msgstr "Prima della disinstallazione di {app_id}" msgid "Gujarati" msgstr "Gujarati" +#~ msgid "Enter a valid network prefix or net mask." +#~ msgstr "Inserisci un prefisso di rete od una netmask validi." + #~ msgid "Debian:" #~ msgstr "Debian:" @@ -11771,9 +11859,6 @@ msgstr "Gujarati" #~ msgid "OpenPGP User IDs" #~ msgstr "OpenPGP User ID" -#~ msgid "Key Import Date" -#~ msgstr "Data Importazione Chiave" - #~ msgid "SSH Key Type" #~ msgstr "Tipo Chiave SSH" @@ -11847,9 +11932,6 @@ msgstr "Gujarati" #~ msgid "Certificate path" #~ msgstr "Percorso del certificato" -#~ msgid "Private key path" -#~ msgstr "Percorso chiave privata" - #~ msgid "Enabled aliases" #~ msgstr "Alias abilitati" diff --git a/plinth/locale/ja/LC_MESSAGES/django.po b/plinth/locale/ja/LC_MESSAGES/django.po index b9d00a971..d803a7060 100644 --- a/plinth/locale/ja/LC_MESSAGES/django.po +++ b/plinth/locale/ja/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-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2025-10-24 16:02+0000\n" "Last-Translator: Jun Nogata \n" "Language-Team: Japanese \n" "Language-Team: Kannada \n" "Language-Team: Lithuanian \n" "Language-Team: Latvian \n" "Language-Team: Norwegian Bokmål \n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" +"PO-Revision-Date: 2026-05-21 18:11+0000\n" +"Last-Translator: jay \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.14-dev\n" +"X-Generator: Weblate 2026.6.dev0\n" "X-Language: nl_NL\n" "X-Source-Language: C\n" @@ -412,10 +412,8 @@ msgid "Passphrase" msgstr "Wachtwoordzin" #: plinth/modules/backups/forms.py:187 -#, fuzzy -#| msgid "Passphrase; Only needed when using encryption." msgid "Only needed when using encryption." -msgstr "Wachtwoordzin; Alleen nodig bij het gebruik van versleuteling." +msgstr "Alleen nodig bij het gebruik van versleuteling." #: plinth/modules/backups/forms.py:190 msgid "Confirm Passphrase" @@ -482,10 +480,8 @@ msgid "SSH server password" msgstr "SSH-server wachtwoord" #: plinth/modules/backups/forms.py:262 -#, fuzzy -#| msgid "Disable password authentication" msgid "Required for password-based authentication." -msgstr "Wachtwoord authenticatie uitschakelen" +msgstr "Benodigd voor wachtwoord authenticatie." #: plinth/modules/backups/forms.py:275 #, fuzzy @@ -824,10 +820,9 @@ msgid "Authentication to remote server failed." msgstr "Authenticatie naar externe server is mislukt." #: plinth/modules/backups/views.py:50 -#, fuzzy -#| msgid "Error establishing connection to server: {}" msgid "Error establishing connection to server: {} {} {}" -msgstr "Fout bij het tot stand brengen van een verbinding met de server: {}" +msgstr "" +"Fout bij het tot stand brengen van een verbinding met de server: {} {} {}" #: plinth/modules/backups/views.py:82 msgid "Backup schedule updated." @@ -1470,14 +1465,7 @@ msgid "Webserver Home Page" msgstr "Startpagina van de webserver" #: plinth/modules/config/forms.py:37 -#, fuzzy, python-brace-format -#| msgid "" -#| "Choose the default page that must be served when someone visits your " -#| "{box_name} on the web. A typical use case is to set your blog or wiki as " -#| "the home page when someone visits the domain name. Note that once the " -#| "home page is set to something other than {box_name} Service (Plinth), " -#| "your users must explicitly type /plinth or /freedombox to reach " -#| "{box_name} Service (Plinth)." +#, python-brace-format msgid "" "Choose the default page that must be served when someone visits your " "{box_name} on the web. A typical use case is to set your blog or wiki as the " @@ -1489,8 +1477,8 @@ msgstr "" "{box_name} op internet bezoekt. Vaak wordt het blog of wiki ingesteld als de " "startpagina wanneer iemand de domeinnaam bezoekt. Merk op dat zodra de " "startpagina is ingesteld op iets anders dan {box_name} service (Plinth), " -"gebruikers expliciet /plinth of /freedombox moeten typen om de {box_name} " -"service (Plinth) te bereiken." +"gebruikers expliciet /freedombox moeten typen om de {box_name} service " +"(Plinth) te bereiken." #: plinth/modules/config/forms.py:48 msgid "Show advanced apps and features" @@ -2148,6 +2136,7 @@ msgid "Last update" msgstr "Laatste bijwerking" #: plinth/modules/dynamicdns/templates/dynamicdns.html:29 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:22 msgid "IP Address" msgstr "IP Adres" @@ -2446,16 +2435,12 @@ msgstr "" "automatisch aangemaakt en wijzen naar de eerste admin gebruiker." #: plinth/modules/email/__init__.py:41 -#, fuzzy -#| msgid "" -#| "Roundcube app provides web " -#| "interface for users to access email." msgid "" "Roundcube app provides web " "interface for users to access email." msgstr "" -"Roundcube app biedt gebruikers een " -"webinterface om toegang te krijgen tot e-mail." +"Roundcube app biedt gebruikers " +"een webinterface om toegang te krijgen tot e-mail." #: plinth/modules/email/__init__.py:43 msgid "" @@ -6019,6 +6004,7 @@ msgstr "Wi-Fi Netwerken dichtbij" #: plinth/modules/networks/templates/connections_list.html:20 #: plinth/modules/networks/views.py:420 #: plinth/modules/wireguard/templates/wireguard_add_server.html:19 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:71 msgid "Add Connection" msgstr "Verbinding toevoegen" @@ -9771,10 +9757,8 @@ msgstr "" #: plinth/modules/users/templates/users_login.html:41 #: plinth/modules/users/templates/users_passkeys.html:41 -#, fuzzy -#| msgid "This app does not support diagnostics" msgid "Browser does not support passkeys." -msgstr "Deze toepassing heeft geen diagnosetests" +msgstr "De browser ondersteunt geen passkeys." #: plinth/modules/users/templates/users_login.html:57 msgid "Login" @@ -9834,10 +9818,8 @@ msgid "Added" msgstr "" #: plinth/modules/users/templates/users_passkeys.html:95 -#, fuzzy -#| msgid "Last scanned: " msgid "Last Used" -msgstr "Laatst gescand: " +msgstr "Laatst gebruikt" #: plinth/modules/users/templates/users_passkeys.html:126 msgid "No passkeys added to user account." @@ -9859,6 +9841,7 @@ msgstr "Gebruiker verwijderen" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:73 msgid "Cancel" msgstr "Annuleer" @@ -9980,22 +9963,19 @@ msgstr "Ongeldige sleutel." #: plinth/modules/wireguard/forms.py:63 #, fuzzy #| msgid "Enter a valid username." -msgid "Enter a valid IPv4 address." +msgid "Not a valid IP address." msgstr "Voer een geldige gebruikersnaam in." -#: plinth/modules/wireguard/forms.py:65 -msgid "Enter a valid network prefix or net mask." -msgstr "" - -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:69 #: plinth/modules/wireguard/templates/wireguard.html:29 #: plinth/modules/wireguard/templates/wireguard.html:57 -#: plinth/modules/wireguard/templates/wireguard.html:119 +#: plinth/modules/wireguard/templates/wireguard.html:125 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Openbare Sleutel" -#: plinth/modules/wireguard/forms.py:72 +#: plinth/modules/wireguard/forms.py:70 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10003,11 +9983,11 @@ msgstr "" "Openbare sleutel van de peer. Voorbeeld: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: plinth/modules/wireguard/forms.py:80 +#: plinth/modules/wireguard/forms.py:83 msgid "Endpoint of the server" msgstr "Eindpunt van de server" -#: plinth/modules/wireguard/forms.py:81 +#: plinth/modules/wireguard/forms.py:84 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." @@ -10015,11 +9995,11 @@ msgstr "" "Domeinnaam en poort in de vorm \"ip:poort\". Voorbeeld: " "demo.wireguard.com:12912 ." -#: plinth/modules/wireguard/forms.py:86 +#: plinth/modules/wireguard/forms.py:89 msgid "Public key of the server" msgstr "Openbare sleutel van de server" -#: plinth/modules/wireguard/forms.py:87 +#: plinth/modules/wireguard/forms.py:90 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10027,11 +10007,11 @@ msgstr "" "Een lange reeks tekens, door de servicebeheerder bepaald. Voorbeeld: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:92 +#: plinth/modules/wireguard/forms.py:95 msgid "Client IP address provided by server" msgstr "Client IP-adres, aangeboden door de server" -#: plinth/modules/wireguard/forms.py:94 +#: plinth/modules/wireguard/forms.py:97 #, fuzzy #| msgid "" #| "IP address assigned to this machine on the VPN after connecting to the " @@ -10040,19 +10020,19 @@ msgstr "Client IP-adres, aangeboden door de server" msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10. You can also specify the network. This will allow reaching " -"machines in the network. Examples: 10.68.12.43/24 or " -"10.68.12.43/255.255.255.0." +"192.168.0.10 or 2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also " +"specify the network. This will allow reaching machines in the network. " +"Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" "Het aan deze machine toegewezen IP-adres op de VPN na verbinding met het " "eindpunt. Deze waarde wordt meestal verstrekt door de serveroperator. " "Bijvoorbeeld: 192.168.0.10." -#: plinth/modules/wireguard/forms.py:102 +#: plinth/modules/wireguard/forms.py:106 msgid "Private key of this machine" msgstr "Privésleutel van deze machine" -#: plinth/modules/wireguard/forms.py:103 +#: plinth/modules/wireguard/forms.py:107 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -10065,11 +10045,11 @@ msgstr "" "echter op om dit zelf te verstrekken. Bijvoorbeeld: MConEJFIg6 + " "DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs =." -#: plinth/modules/wireguard/forms.py:111 +#: plinth/modules/wireguard/forms.py:115 msgid "Pre-shared key" msgstr "Vooraf gedeelde sleutel" -#: plinth/modules/wireguard/forms.py:112 +#: plinth/modules/wireguard/forms.py:116 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10079,11 +10059,11 @@ msgstr "" "om een extra beveiligingslaag toe te voegen. Alleen invullen indien " "aanwezig. Voorbeeld: MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: plinth/modules/wireguard/forms.py:118 +#: plinth/modules/wireguard/forms.py:122 msgid "Use this connection to send all outgoing traffic" msgstr "Deze verbinding gebruiken voor al het uitgaande verkeer" -#: plinth/modules/wireguard/forms.py:120 +#: plinth/modules/wireguard/forms.py:124 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" "Meestal ingeschakeld op een VPN-service waardoor al het verkeer wordt " @@ -10136,7 +10116,7 @@ msgid "Allowed IPs" msgstr "Toegestane IP adressen" #: plinth/modules/wireguard/templates/wireguard.html:59 -#: plinth/modules/wireguard/templates/wireguard.html:120 +#: plinth/modules/wireguard/templates/wireguard.html:126 msgid "Last Connected Time" msgstr "Tijdstip vorige verbinding" @@ -10148,51 +10128,62 @@ msgstr "" "%(box_name)s." #: plinth/modules/wireguard/templates/wireguard.html:88 -msgid "Add a new peer" +#, fuzzy +#| msgid "Add a new peer" +msgid "Auto add a new peer" msgstr "Nieuwe partner toevoegen" #: plinth/modules/wireguard/templates/wireguard.html:92 -#: plinth/modules/wireguard/views.py:59 +msgid "Add Client Automatically" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:94 +msgid "Add a new peer" +msgstr "Nieuwe partner toevoegen" + +#: plinth/modules/wireguard/templates/wireguard.html:98 +#: plinth/modules/wireguard/views.py:62 plinth/modules/wireguard/views.py:149 msgid "Add Allowed Client" msgstr "Geef toestemming voor client" -#: plinth/modules/wireguard/templates/wireguard.html:97 +#: plinth/modules/wireguard/templates/wireguard.html:103 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server not started yet." msgstr "Wachtwoord succesvol gewijzigd." -#: plinth/modules/wireguard/templates/wireguard.html:101 -#: plinth/modules/wireguard/templates/wireguard.html:103 +#: plinth/modules/wireguard/templates/wireguard.html:107 +#: plinth/modules/wireguard/templates/wireguard.html:109 #, fuzzy #| msgid "Standard Services" msgid "Start WireGuard Server" msgstr "Standaard Diensten" -#: plinth/modules/wireguard/templates/wireguard.html:109 +#: plinth/modules/wireguard/templates/wireguard.html:115 msgid "As a Client" msgstr "Als Cliënt" -#: plinth/modules/wireguard/templates/wireguard.html:111 +#: plinth/modules/wireguard/templates/wireguard.html:117 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Servers waar %(box_name)s verbinding mee zal maken:" -#: plinth/modules/wireguard/templates/wireguard.html:118 +#: plinth/modules/wireguard/templates/wireguard.html:124 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:23 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Eindpunt" -#: plinth/modules/wireguard/templates/wireguard.html:142 +#: plinth/modules/wireguard/templates/wireguard.html:148 msgid "No connections to remote servers are configured yet." msgstr "Er zijn nog geen verbindingen met externe servers ingesteld." -#: plinth/modules/wireguard/templates/wireguard.html:152 +#: plinth/modules/wireguard/templates/wireguard.html:158 msgid "Add a new server" msgstr "Nieuwe server toevoegen" -#: plinth/modules/wireguard/templates/wireguard.html:156 -#: plinth/modules/wireguard/views.py:178 +#: plinth/modules/wireguard/templates/wireguard.html:162 +#: plinth/modules/wireguard/views.py:301 msgid "Add Connection to Server" msgstr "Verbinding toevoegen aan server" @@ -10206,6 +10197,62 @@ msgstr "IP-adres dat moet worden gebruikt voor client:" msgid "Add Client" msgstr "Cliënt toevoegen" +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:26 +#, fuzzy +#| msgid "Private key path" +msgid "Private Key" +msgstr "Pad van privésleutel" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:29 +msgid "Click to reveal" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:36 +#, fuzzy +#| msgid "Key Import Date" +msgid "Important:" +msgstr "Sleutel importdatum" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:37 +msgid "Save the private key now. This page shows it only once!" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:41 +#, fuzzy +#| msgid "configuration failed" +msgid "Client configuration file" +msgstr "configuratie mislukt" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:43 +msgid "" +"Download the configuration file (.conf) for manual import, or use the QR " +"code to import directly from your WireGuard mobile app." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:49 +#, fuzzy +#| msgid "warning" +msgid "Warning:" +msgstr "waarschuwing" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:50 +msgid "" +"Treat this QR code like a password. Anyone who scans it can gain VPN access " +"if the connection is enabled." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:60 +#, fuzzy +#| msgid "Download my profile" +msgid "Download config file" +msgstr "Download mijn profiel" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:65 +#, fuzzy +#| msgid "Source Code" +msgid "Show QR Code" +msgstr "Broncode" + #: plinth/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "Weet je zeker dat je deze client wilt verwijderen?" @@ -10299,69 +10346,79 @@ msgstr "IP-adres van deze machine:" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: plinth/modules/wireguard/views.py:54 +#: plinth/modules/wireguard/views.py:57 plinth/modules/wireguard/views.py:144 msgid "Added new client." msgstr "Nieuwe client toegevoegd." -#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 +#: plinth/modules/wireguard/views.py:82 plinth/modules/wireguard/views.py:261 msgid "Client with public key already exists" msgstr "Er bestaat al een client met deze openbare sleutel" -#: plinth/modules/wireguard/views.py:92 +#: plinth/modules/wireguard/views.py:199 +msgid "Session expired. Please try again." +msgstr "" + +#: plinth/modules/wireguard/views.py:202 +#, fuzzy +#| msgid "Domain already exists." +msgid "Client already exists" +msgstr "Domein bestaat al." + +#: plinth/modules/wireguard/views.py:215 msgid "Allowed Client" msgstr "Geauthoriseerde Cliënt" -#: plinth/modules/wireguard/views.py:114 +#: plinth/modules/wireguard/views.py:237 msgid "Updated client." msgstr "Client geaktualiseerd." -#: plinth/modules/wireguard/views.py:119 +#: plinth/modules/wireguard/views.py:242 msgid "Modify Client" msgstr "Cliënt aanpassen" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:275 msgid "Delete Allowed Client" msgstr "Verwijder geauthoriseerde client" -#: plinth/modules/wireguard/views.py:161 +#: plinth/modules/wireguard/views.py:284 msgid "Client deleted." msgstr "Client verwijderd." -#: plinth/modules/wireguard/views.py:163 +#: plinth/modules/wireguard/views.py:286 msgid "Client not found" msgstr "Client niet gevonden" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:296 msgid "Added new server." msgstr "Nieuwe server toegevoegd." -#: plinth/modules/wireguard/views.py:194 +#: plinth/modules/wireguard/views.py:317 msgid "Connection to Server" msgstr "Verbinding met server" -#: plinth/modules/wireguard/views.py:212 +#: plinth/modules/wireguard/views.py:335 msgid "Updated server." msgstr "Server geaktualiseerd." -#: plinth/modules/wireguard/views.py:217 +#: plinth/modules/wireguard/views.py:340 msgid "Modify Connection to Server" msgstr "Wijzig verbinding met server" -#: plinth/modules/wireguard/views.py:255 +#: plinth/modules/wireguard/views.py:378 msgid "Delete Connection to Server" msgstr "Verwijder verbinding met server" -#: plinth/modules/wireguard/views.py:275 +#: plinth/modules/wireguard/views.py:398 msgid "Server deleted." msgstr "Server verwijderd." -#: plinth/modules/wireguard/views.py:287 +#: plinth/modules/wireguard/views.py:410 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Wachtwoord succesvol gewijzigd." -#: plinth/modules/wireguard/views.py:291 +#: plinth/modules/wireguard/views.py:414 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -11460,9 +11517,6 @@ msgstr "Gujarati" #~ "is vrije software en wordt gedistribueerd onder de GNU Affero General " #~ "Public License, Versie 3 of hoger." -#~ msgid "Source Code" -#~ msgstr "Broncode" - #~ msgid "FreedomBox Foundation" #~ msgstr "FreedomBox Foundation" @@ -12058,9 +12112,6 @@ msgstr "Gujarati" #~ msgid "OpenPGP User IDs" #~ msgstr "OpenPGP Gebruiker ID's" -#~ msgid "Key Import Date" -#~ msgstr "Sleutel importdatum" - #~ msgid "SSH Key Type" #~ msgstr "SSH Sleutel Type" @@ -12223,9 +12274,6 @@ msgstr "Gujarati" #~ msgid "Certificate path" #~ msgstr "Pad van certificaat" -#~ msgid "Private key path" -#~ msgstr "Pad van privésleutel" - #~ msgid "Use system default" #~ msgstr "Systeem standaard gebruiken" diff --git a/plinth/locale/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po index 6bd4e1f8a..6fa526c64 100644 --- a/plinth/locale/pl/LC_MESSAGES/django.po +++ b/plinth/locale/pl/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-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2024-07-13 12:09+0000\n" "Last-Translator: Monika \n" "Language-Team: Polish \n" "Language-Team: Portuguese \n" "Language-Team: Russian \n" "Language-Team: Sinhala \n" "Language-Team: Slovenian \n" "Language-Team: Albanian \n" "Language-Team: Serbian \n" "Language-Team: Swedish \n" "Language-Team: Tamil \n" "Language-Team: Telugu \n" "Language-Team: Turkish \n" "Language-Team: Ukrainian \n" "Language-Team: Vietnamese \n" @@ -2026,6 +2026,7 @@ msgid "Last update" msgstr "最后一次更新" #: plinth/modules/dynamicdns/templates/dynamicdns.html:29 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:22 msgid "IP Address" msgstr "IP 地址" @@ -5499,6 +5500,7 @@ msgstr "附近的无线网络" #: plinth/modules/networks/templates/connections_list.html:20 #: plinth/modules/networks/views.py:420 #: plinth/modules/wireguard/templates/wireguard_add_server.html:19 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:71 msgid "Add Connection" msgstr "添加连接" @@ -8927,6 +8929,7 @@ msgstr "删除 passkey" #: plinth/modules/users/templates/users_passkeys.html:155 #: plinth/modules/users/templates/users_update.html:72 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:73 msgid "Cancel" msgstr "取消" @@ -9034,65 +9037,64 @@ msgid "Invalid key." msgstr "无效的密钥。" #: plinth/modules/wireguard/forms.py:63 -msgid "Enter a valid IPv4 address." +#, fuzzy +#| msgid "Enter a valid IPv4 address." +msgid "Not a valid IP address." msgstr "输入有效的 IPv4 地址。" -#: plinth/modules/wireguard/forms.py:65 -msgid "Enter a valid network prefix or net mask." -msgstr "" - -#: plinth/modules/wireguard/forms.py:71 +#: plinth/modules/wireguard/forms.py:69 #: plinth/modules/wireguard/templates/wireguard.html:29 #: plinth/modules/wireguard/templates/wireguard.html:57 -#: plinth/modules/wireguard/templates/wireguard.html:119 +#: plinth/modules/wireguard/templates/wireguard.html:125 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:24 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "公钥" -#: plinth/modules/wireguard/forms.py:72 +#: plinth/modules/wireguard/forms.py:70 msgid "" "Public key of the peer. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:80 +#: plinth/modules/wireguard/forms.py:83 msgid "Endpoint of the server" msgstr "" -#: plinth/modules/wireguard/forms.py:81 +#: plinth/modules/wireguard/forms.py:84 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: plinth/modules/wireguard/forms.py:86 +#: plinth/modules/wireguard/forms.py:89 msgid "Public key of the server" msgstr "服务器的公钥" -#: plinth/modules/wireguard/forms.py:87 +#: plinth/modules/wireguard/forms.py:90 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:92 +#: plinth/modules/wireguard/forms.py:95 msgid "Client IP address provided by server" msgstr "服务器提供的客户端 IP 地址" -#: plinth/modules/wireguard/forms.py:94 +#: plinth/modules/wireguard/forms.py:97 msgid "" "IP address assigned to this machine on the VPN after connecting to the " "endpoint. This value is usually provided by the server operator. Example: " -"192.168.0.10. You can also specify the network. This will allow reaching " -"machines in the network. Examples: 10.68.12.43/24 or " -"10.68.12.43/255.255.255.0." +"192.168.0.10 or 2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also " +"specify the network. This will allow reaching machines in the network. " +"Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" -#: plinth/modules/wireguard/forms.py:102 +#: plinth/modules/wireguard/forms.py:106 msgid "Private key of this machine" msgstr "" -#: plinth/modules/wireguard/forms.py:103 +#: plinth/modules/wireguard/forms.py:107 msgid "" "Optional. New public/private keys are generated if left blank. Public key " "can then be provided to the server. This is the recommended way. However, " @@ -9100,22 +9102,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: plinth/modules/wireguard/forms.py:111 +#: plinth/modules/wireguard/forms.py:115 msgid "Pre-shared key" msgstr "" -#: plinth/modules/wireguard/forms.py:112 +#: plinth/modules/wireguard/forms.py:116 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." msgstr "" -#: plinth/modules/wireguard/forms.py:118 +#: plinth/modules/wireguard/forms.py:122 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: plinth/modules/wireguard/forms.py:120 +#: plinth/modules/wireguard/forms.py:124 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9162,7 +9164,7 @@ msgid "Allowed IPs" msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:59 -#: plinth/modules/wireguard/templates/wireguard.html:120 +#: plinth/modules/wireguard/templates/wireguard.html:126 msgid "Last Connected Time" msgstr "上次连接时间" @@ -9172,47 +9174,58 @@ msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" #: plinth/modules/wireguard/templates/wireguard.html:88 +#, fuzzy +#| msgid "Added new server." +msgid "Auto add a new peer" +msgstr "添加新服务器。" + +#: plinth/modules/wireguard/templates/wireguard.html:92 +msgid "Add Client Automatically" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard.html:94 msgid "Add a new peer" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:92 -#: plinth/modules/wireguard/views.py:59 +#: plinth/modules/wireguard/templates/wireguard.html:98 +#: plinth/modules/wireguard/views.py:62 plinth/modules/wireguard/views.py:149 msgid "Add Allowed Client" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:97 +#: plinth/modules/wireguard/templates/wireguard.html:103 msgid "WireGuard server not started yet." msgstr "WireGuard 服务器还未启动。" -#: plinth/modules/wireguard/templates/wireguard.html:101 -#: plinth/modules/wireguard/templates/wireguard.html:103 +#: plinth/modules/wireguard/templates/wireguard.html:107 +#: plinth/modules/wireguard/templates/wireguard.html:109 msgid "Start WireGuard Server" msgstr "启动 WireGuard 服务器" -#: plinth/modules/wireguard/templates/wireguard.html:109 +#: plinth/modules/wireguard/templates/wireguard.html:115 msgid "As a Client" msgstr "作为客户端" -#: plinth/modules/wireguard/templates/wireguard.html:111 +#: plinth/modules/wireguard/templates/wireguard.html:117 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:118 +#: plinth/modules/wireguard/templates/wireguard.html:124 +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:23 #: plinth/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:142 +#: plinth/modules/wireguard/templates/wireguard.html:148 msgid "No connections to remote servers are configured yet." msgstr "尚未配置到远程服务器的连接。" -#: plinth/modules/wireguard/templates/wireguard.html:152 +#: plinth/modules/wireguard/templates/wireguard.html:158 msgid "Add a new server" msgstr "" -#: plinth/modules/wireguard/templates/wireguard.html:156 -#: plinth/modules/wireguard/views.py:178 +#: plinth/modules/wireguard/templates/wireguard.html:162 +#: plinth/modules/wireguard/views.py:301 msgid "Add Connection to Server" msgstr "添加到服务器的连接" @@ -9224,6 +9237,62 @@ msgstr "" msgid "Add Client" msgstr "添加客户端" +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:26 +#, fuzzy +#| msgid "Create User" +msgid "Private Key" +msgstr "创建用户" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:29 +msgid "Click to reveal" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:36 +#, fuzzy +#| msgid "Key Import Date" +msgid "Important:" +msgstr "密钥导入日期" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:37 +msgid "Save the private key now. This page shows it only once!" +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:41 +#, fuzzy +#| msgid "configuration failed" +msgid "Client configuration file" +msgstr "配置失败" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:43 +msgid "" +"Download the configuration file (.conf) for manual import, or use the QR " +"code to import directly from your WireGuard mobile app." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:49 +#, fuzzy +#| msgid "warning" +msgid "Warning:" +msgstr "警告" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:50 +msgid "" +"Treat this QR code like a password. Anyone who scans it can gain VPN access " +"if the connection is enabled." +msgstr "" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:60 +#, fuzzy +#| msgid "Download my profile" +msgid "Download config file" +msgstr "下载我的配置文件" + +#: plinth/modules/wireguard/templates/wireguard_auto_add_client.html:65 +#, fuzzy +#| msgid "Source Code" +msgid "Show QR Code" +msgstr "源代码" + #: plinth/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "你确定要删除此客户端吗?" @@ -9312,67 +9381,77 @@ msgstr "" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: plinth/modules/wireguard/views.py:54 +#: plinth/modules/wireguard/views.py:57 plinth/modules/wireguard/views.py:144 msgid "Added new client." msgstr "" -#: plinth/modules/wireguard/views.py:79 plinth/modules/wireguard/views.py:138 +#: plinth/modules/wireguard/views.py:82 plinth/modules/wireguard/views.py:261 msgid "Client with public key already exists" msgstr "已存在有公钥的客户端" -#: plinth/modules/wireguard/views.py:92 +#: plinth/modules/wireguard/views.py:199 +msgid "Session expired. Please try again." +msgstr "" + +#: plinth/modules/wireguard/views.py:202 +#, fuzzy +#| msgid "Domain already exists." +msgid "Client already exists" +msgstr "域名已存在。" + +#: plinth/modules/wireguard/views.py:215 msgid "Allowed Client" msgstr "允许的客户端" -#: plinth/modules/wireguard/views.py:114 +#: plinth/modules/wireguard/views.py:237 msgid "Updated client." msgstr "已更新客户端。" -#: plinth/modules/wireguard/views.py:119 +#: plinth/modules/wireguard/views.py:242 msgid "Modify Client" msgstr "更改客户端" -#: plinth/modules/wireguard/views.py:152 +#: plinth/modules/wireguard/views.py:275 msgid "Delete Allowed Client" msgstr "删除允许的客户端" -#: plinth/modules/wireguard/views.py:161 +#: plinth/modules/wireguard/views.py:284 msgid "Client deleted." msgstr "客户端已删除。" -#: plinth/modules/wireguard/views.py:163 +#: plinth/modules/wireguard/views.py:286 msgid "Client not found" msgstr "未找到客户端" -#: plinth/modules/wireguard/views.py:173 +#: plinth/modules/wireguard/views.py:296 msgid "Added new server." msgstr "添加新服务器。" -#: plinth/modules/wireguard/views.py:194 +#: plinth/modules/wireguard/views.py:317 msgid "Connection to Server" msgstr "连接到服务器" -#: plinth/modules/wireguard/views.py:212 +#: plinth/modules/wireguard/views.py:335 msgid "Updated server." msgstr "已更新服务器。" -#: plinth/modules/wireguard/views.py:217 +#: plinth/modules/wireguard/views.py:340 msgid "Modify Connection to Server" msgstr "修改到服务器的连接" -#: plinth/modules/wireguard/views.py:255 +#: plinth/modules/wireguard/views.py:378 msgid "Delete Connection to Server" msgstr "删除与服务器的连接" -#: plinth/modules/wireguard/views.py:275 +#: plinth/modules/wireguard/views.py:398 msgid "Server deleted." msgstr "服务器已删除。" -#: plinth/modules/wireguard/views.py:287 +#: plinth/modules/wireguard/views.py:410 msgid "WireGuard server started successfully." msgstr "WireGuard 服务器启动成功。" -#: plinth/modules/wireguard/views.py:291 +#: plinth/modules/wireguard/views.py:414 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10207,9 +10286,6 @@ msgstr "古吉拉特语" #~ "此页面是 %(box_name)s Web 接口的一部分。%(box_name)s 是自由软件,以 GNU " #~ "Affero 通用许可证第 3 版或更高版发布。" -#~ msgid "Source Code" -#~ msgstr "源代码" - #~ msgid "FreedomBox Foundation" #~ msgstr "FreedomBox 基金会" @@ -10596,9 +10672,6 @@ msgstr "古吉拉特语" #~ msgid "OpenPGP User IDs" #~ msgstr "OpenPGP 用户ID" -#~ msgid "Key Import Date" -#~ msgstr "密钥导入日期" - #~ msgid "SSH Key Type" #~ msgstr "SSH 密钥类型" @@ -10693,11 +10766,6 @@ msgstr "古吉拉特语" #~ msgid "Certificate path" #~ msgstr "证书状态" -#, fuzzy -#~| msgid "Create User" -#~ msgid "Private key path" -#~ msgstr "创建用户" - #, fuzzy #~| msgid "Enable damage" #~ msgid "Enabled aliases" diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index c1c38042b..b5e650684 100644 --- a/plinth/locale/zh_Hant/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hant/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-04-28 22:01+0000\n" +"POT-Creation-Date: 2026-06-02 00:51+0000\n" "PO-Revision-Date: 2025-02-07 12:01+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional Han script) None: """Create components for the app.""" @@ -64,7 +64,8 @@ class WireguardApp(app_module.App): clients=info.clients) self.add(shortcut) - packages = Packages('packages-wireguard', ['wireguard']) + packages = Packages('packages-wireguard', + ['wireguard', 'python3-segno']) self.add(packages) firewall = Firewall('firewall-wireguard', info.name, diff --git a/plinth/modules/wireguard/forms.py b/plinth/modules/wireguard/forms.py index cccc37ad8..d0515bc15 100644 --- a/plinth/modules/wireguard/forms.py +++ b/plinth/modules/wireguard/forms.py @@ -55,14 +55,12 @@ def validate_endpoint(endpoint): raise ValidationError('Invalid endpoint.') -def validate_ipv4_address_with_network(value: str): - """Check that value is a valid IPv4 address with an optional network.""" +def validate_ip_address_with_network(value: str): + """Check that value is a valid IP address with an optional network.""" try: - ipaddress.IPv4Interface(value) - except ipaddress.AddressValueError: - raise ValidationError(_('Enter a valid IPv4 address.')) - except ipaddress.NetmaskValueError: - raise ValidationError(_('Enter a valid network prefix or net mask.')) + ipaddress.ip_interface(value) + except ValueError: + raise ValidationError(_('Not a valid IP address.')) class AddClientForm(forms.Form): @@ -74,6 +72,11 @@ class AddClientForm(forms.Form): validators=[validate_key]) +class AutoAddClientForm(forms.Form): + """Empty form for auto-client addition UX.""" + pass + + class AddServerForm(forms.Form): """Form to add server.""" peer_endpoint = forms.CharField( @@ -93,10 +96,11 @@ class AddServerForm(forms.Form): help_text=_( 'IP address assigned to this machine on the VPN after connecting ' 'to the endpoint. This value is usually provided by the server ' - 'operator. Example: 192.168.0.10. You can also specify the ' - 'network. This will allow reaching machines in the network. ' + 'operator. Example: 192.168.0.10 or ' + '2a03:7c80:4b2c:91a2:5d41:ffee:9b82:7c17. You can also specify ' + 'the network. This will allow reaching machines in the network. ' 'Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0.'), - validators=[validate_ipv4_address_with_network]) + validators=[validate_ip_address_with_network]) private_key = forms.CharField( label=_('Private key of this machine'), strip=True, help_text=_( @@ -120,31 +124,44 @@ class AddServerForm(forms.Form): 'Typically checked for a VPN service through which all traffic ' 'is sent.')) + def _build_ipv4_settings(self, iface) -> dict: + """Build IPv4 NM settings from interfaces.""" + return { + 'method': 'manual', + 'address': str(iface.ip), + 'netmask': str(iface.netmask), + 'gateway': '', + 'dns': '', + 'second_dns': '', + } + + def _build_ipv6_settings(self, iface) -> dict: + """Build IPv6 NM settings from interfaces.""" + return { + 'method': 'manual', + 'address': str(iface.ip), + 'prefix': iface.network.prefixlen, + 'gateway': '', + 'dns': '', + 'second_dns': '', + } + def get_settings(self) -> dict[str, dict]: """Return NM settings dict from cleaned data.""" - ip_address_and_network = self.cleaned_data['ip_address_and_network'] - ip_address_and_network = ipaddress.IPv4Interface( - ip_address_and_network) - ip_address = str(ip_address_and_network.ip) - prefixlen = ip_address_and_network.network.prefixlen + ip_interface = ipaddress.ip_interface( + self.cleaned_data['ip_address_and_network'] + ) + if self.cleaned_data['default_route']: allowed_ips = ['0.0.0.0/0', '::/0'] else: - allowed_ips = [f'{ip_address}/{prefixlen}'] + allowed_ips = [str(ip_interface)] settings = { 'common': { 'type': 'wireguard', 'zone': 'external', }, - 'ipv4': { - 'method': 'manual', - 'address': ip_address, - 'netmask': str(ip_address_and_network.netmask), - 'gateway': '', - 'dns': '', - 'second_dns': '', - }, 'wireguard': { 'peer_endpoint': self.cleaned_data['peer_endpoint'], 'peer_public_key': self.cleaned_data['peer_public_key'], @@ -153,4 +170,10 @@ class AddServerForm(forms.Form): 'allowed_ips': allowed_ips, } } + + if ip_interface.version == 4: + settings['ipv4'] = self._build_ipv4_settings(ip_interface) + else: + settings['ipv6'] = self._build_ipv6_settings(ip_interface) + return settings diff --git a/plinth/modules/wireguard/templates/wireguard.html b/plinth/modules/wireguard/templates/wireguard.html index 95db00105..2b3f7b259 100644 --- a/plinth/modules/wireguard/templates/wireguard.html +++ b/plinth/modules/wireguard/templates/wireguard.html @@ -85,6 +85,12 @@
+ + {% icon 'magic' %} + {% trans "Add Client Automatically" %} + diff --git a/plinth/modules/wireguard/templates/wireguard_auto_add_client.html b/plinth/modules/wireguard/templates/wireguard_auto_add_client.html new file mode 100644 index 000000000..2baa8595d --- /dev/null +++ b/plinth/modules/wireguard/templates/wireguard_auto_add_client.html @@ -0,0 +1,77 @@ +{% extends "base.html" %} +{% comment %} +# SPDX-License-Identifier: AGPL-3.0-or-later +{% endcomment %} + +{% load bootstrap %} +{% load i18n %} +{% load extras %} + +{% block content %} + +

{{ title }}

+ +
+ {% csrf_token %} + + {{ form|bootstrap }} + + {% if client_privkey %} +
+ + + + + + + +
{% trans "IP Address" %}{{ next_ip }}
{% trans "Endpoint" %}{{ endpoint }}
{% trans "Public Key" %}{{ client_pubkey }}
{% trans "Private Key" %} +
+ {% trans "Click to reveal" %} + {{ client_privkey }} +
+
+ +
+ {% trans "Important:" %} + {% trans "Save the private key now. This page shows it only once!" %} +
+ {% endif %} + +

{% trans "Client configuration file" %}

+

+ {% blocktrans trimmed %} + Download the configuration file (.conf) for manual import, + or use the QR code to import directly from your WireGuard mobile app. + {% endblocktrans %} +

+

+ {% trans "Warning:" %} + {% blocktrans trimmed %} + Treat this QR code like a password. + Anyone who scans it can gain VPN access if the connection is enabled. + {% endblocktrans %} +

+
+ + + + +{% endblock %} diff --git a/plinth/modules/wireguard/tests/test_forms.py b/plinth/modules/wireguard/tests/test_forms.py index 780cb8d4a..70f986469 100644 --- a/plinth/modules/wireguard/tests/test_forms.py +++ b/plinth/modules/wireguard/tests/test_forms.py @@ -7,7 +7,7 @@ import pytest from django.core.exceptions import ValidationError from plinth.modules.wireguard.forms import (validate_endpoint, - validate_ipv4_address_with_network, + validate_ip_address_with_network, validate_key) @@ -73,22 +73,33 @@ def test_validate_endpoint_invalid_patterns(endpoint): '1.2.3.4/24', '1.2.3.4/255.255.255.0', '1.2.3.4/0.0.0.255', + '::1', + '2001:db8::1', + '2001:db8::1/64', + 'fe80::1/64', + '::/0', ]) -def test_validate_ipv4_address_with_network_valid_patterns(value): +def test_validate_ip_address_with_network_valid_patterns(value): """Test validating IPv4 address with network works for valid values.""" - validate_ipv4_address_with_network(value) + validate_ip_address_with_network(value) @pytest.mark.parametrize('value', [ - '::1', '1.2.3.4/', 'invalid-ip/24', '1.2.3.4/x', '1.2.3.4/-1', '1.2.3.4/33', '1.2.3.4/9.8.7.6', + '2001:db8::1/', + '2001:db8::1/129', + '2001:db8::1/x', + '2001:db8::1/-1', + '2001:db8::1/255.255.255.0', + '2001:db8::1::1', + '12345::1', ]) -def test_validate_ipv4_address_with_network_invalid_patterns(value): +def test_validate_ip_address_with_network_invalid_patterns(value): """Test validating IPv4 address with network works for invalid values.""" with pytest.raises(ValidationError): - validate_ipv4_address_with_network(value) + validate_ip_address_with_network(value) diff --git a/plinth/modules/wireguard/tests/test_functional.py b/plinth/modules/wireguard/tests/test_functional.py index b9ed811fa..071d4c51a 100644 --- a/plinth/modules/wireguard/tests/test_functional.py +++ b/plinth/modules/wireguard/tests/test_functional.py @@ -113,6 +113,53 @@ class TestWireguardApp(functional.BaseAppTests): assert not self._client_exists(session_browser, self._client_public_key2) + def test_auto_add_client(self, session_browser): + """Test the automatic client generation and addition flow.""" + functional.nav_to_module(session_browser, 'wireguard') + + # Start server if needed (reuse existing logic) + # Extract to reusable method + start_server_button = session_browser.find_by_css('.btn-start-server') + if start_server_button: + with functional.wait_for_page_update(session_browser): + start_server_button.first.click() + + session_browser.find_by_css('.btn-auto-add-client').first.click() + + client_pubkey = session_browser.find_by_css( + '.pubkey-val').first.text.strip() + + # Verify private key reveal + privkey_reveal = session_browser.find_by_css( + '.privkey-val') + assert privkey_reveal, "Private key reveal should be present" + privkey_reveal.click() + client_privkey = session_browser.find_by_css( + '.privkey-val').text.splitlines()[1] + assert len(client_privkey) == 44, (("Private key should be base64 " + "(44 chars)")) + + # Verify config download and QR links + download_link = session_browser.links.find_by_href( + '/freedombox/apps/wireguard/client/auto-add/action/download/') + qr_link = session_browser.links.find_by_href( + '/freedombox/apps/wireguard/client/auto-add/action/qr/') + assert download_link, "Download config link should exist" + assert qr_link, "QR code link should exist" + + # Submit to add the client + with functional.wait_for_page_update(session_browser): + session_browser.find_by_css( + '.btn-auto-add-connection').first.click() + + # Verify client was added successfully + assert self._client_exists(session_browser, client_pubkey), (( + "Auto-generated client should exist")) + + # Clean up + self._delete_client(session_browser, client_pubkey) + assert not self._client_exists(session_browser, client_pubkey) + @staticmethod def _get_server_href(browser, key): """Return the href for server show page.""" diff --git a/plinth/modules/wireguard/urls.py b/plinth/modules/wireguard/urls.py index 1c44b551e..e2730580d 100644 --- a/plinth/modules/wireguard/urls.py +++ b/plinth/modules/wireguard/urls.py @@ -13,6 +13,14 @@ urlpatterns = [ views.EnableServerView.as_view(), name='enable-server'), re_path(r'^apps/wireguard/client/add/$', views.AddClientView.as_view(), name='add-client'), + re_path(r'^apps/wireguard/client/auto-add/$', + views.AutoAddClientView.as_view(), name='auto-add-client'), + re_path(r'^apps/wireguard/client/auto-add/action/download/$', + views.ClientActionsView.as_view(action='download'), + name='auto-add-client-download'), + re_path(r'^apps/wireguard/client/auto-add/action/qr/$', + views.ClientActionsView.as_view(action='qr'), + name='auto-add-client-qr'), re_path(r'^apps/wireguard/client/(?P[^/]+)/show/$', views.ShowClientView.as_view(), name='show-client'), re_path(r'^apps/wireguard/client/(?P[^/]+)/edit/$', diff --git a/plinth/modules/wireguard/utils.py b/plinth/modules/wireguard/utils.py index 5b7d9821f..0fe35c324 100644 --- a/plinth/modules/wireguard/utils.py +++ b/plinth/modules/wireguard/utils.py @@ -19,6 +19,18 @@ IP_TEMPLATE = '10.84.0.{}' logger = logging.getLogger(__name__) +def _get_nm_address_info(settings_ipv4, settings_ipv6) -> tuple[str, str]: + """Extract IP address info from NM IPv4/IPv6 settings.""" + for settings in [settings_ipv4, settings_ipv6]: + if settings and settings.get_num_addresses(): + nm_address = settings.get_address(0) + address = nm_address.get_address() + prefix = str(nm_address.get_prefix()) + return address, address + '/' + prefix + + return '', '' + + def get_nm_info(): """Get information from network manager.""" setting_name = nm.SETTING_WIREGUARD_SETTING_NAME @@ -64,12 +76,14 @@ def get_nm_info(): info['default_route'] = True settings_ipv4 = connection.get_setting_ip4_config() - if settings_ipv4 and settings_ipv4.get_num_addresses(): - nm_address = settings_ipv4.get_address(0) - address = nm_address.get_address() - prefix = str(nm_address.get_prefix()) - info['ip_address'] = address - info['ip_address_and_network'] = address + '/' + prefix + settings_ipv6 = connection.get_setting_ip6_config() + + ip_address, ip_address_and_network = _get_nm_address_info( + settings_ipv4, settings_ipv6 + ) + + info['ip_address'] = ip_address + info['ip_address_and_network'] = ip_address_and_network connections[info['interface']] = info @@ -160,6 +174,13 @@ def _generate_private_key(): return process.stdout.decode().strip() +def generate_client_keypair(): + """Generate client private/public keypair.""" + private_key = _generate_private_key() + public_key = _get_public_key_from_private_key(private_key) + return private_key, public_key + + def _find_next_interface(): """Find next unused wireguard interface name.""" output = subprocess.check_output(['wg', 'show', @@ -303,3 +324,25 @@ def remove_client(public_key): settings.remove_peer(peer_index) connection.commit_changes(True) network.reactivate_connection(connection.get_uuid()) + + +def build_client_config(client_ip: str, client_privkey: str, + client_pubkey: str, endpoint: str) -> str: + """Generate WireGuard client config.""" + info = get_info() + server_info = info['my_server'] + if not server_info: + raise RuntimeError("WireGuard server not configured") + + server_pubkey = server_info['public_key'] + + return f"""[Interface] +PrivateKey = {client_privkey} +Address = {client_ip}/32 +DNS = 10.84.0.1 + +[Peer] +PublicKey = {server_pubkey} +AllowedIPs = 0.0.0.0/0 +Endpoint = {endpoint} +PersistentKeepalive = 25""" diff --git a/plinth/modules/wireguard/views.py b/plinth/modules/wireguard/views.py index e561bd245..401bc54d3 100644 --- a/plinth/modules/wireguard/views.py +++ b/plinth/modules/wireguard/views.py @@ -3,16 +3,19 @@ Views for WireGuard application. """ +import segno import urllib.parse from django.contrib import messages from django.contrib.messages.views import SuccessMessageMixin -from django.http import Http404 +from django.http import Http404, HttpResponse from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.translation import gettext as _ from django.views.generic import FormView, TemplateView, View +from io import BytesIO + from plinth import network from plinth.modules.names.components import DomainName from plinth.views import AppView @@ -82,6 +85,126 @@ class AddClientView(SuccessMessageMixin, FormView): return super().form_valid(form) +class SessionClientDataMixin: + """Shared session data loading for auto-client views.""" + + def get_session_client_data(self, request): + """Extract client data from session.""" + next_ip = request.session.get('next_ip') + pubkey = request.session.get('client_pubkey') + privkey = request.session.get('client_privkey') + endpoint = request.session.get('endpoint') + + if not all([next_ip, privkey, pubkey, endpoint]): + raise Http404("Session expired") + + return { + 'next_ip': next_ip, + 'privkey': privkey, + 'pubkey': pubkey, + 'endpoint': endpoint + } + + def get_client_config(self, request): + """Rebuild client config from session.""" + data = self.get_session_client_data(request) + + return utils.build_client_config( + data['next_ip'], data['privkey'], + data['pubkey'], data['endpoint'] + ) + + +class ClientActionsView(SessionClientDataMixin, View): + action = None + + def get(self, request): + if self.action == 'download': + config = self.get_client_config(request) + response = HttpResponse(config, content_type='text/plain') + response['Content-Disposition'] = \ + 'attachment; filename="wg-client.conf"' + return response + elif self.action == 'qr': + qrcode = segno.make(config) + buffer = BytesIO() + qrcode.save(buffer, kind='svg', scale=5) + + return HttpResponse(buffer.getvalue(), + content_type='image/svg+xml') + + raise Http404("Invalid action") + + +class AutoAddClientView(SuccessMessageMixin, FormView): + """View to add a client with keypair generation.""" + form_class = forms.AutoAddClientForm + template_name = 'wireguard_auto_add_client.html' + success_url = reverse_lazy('wireguard:index') + success_message = _('Added new client.') + + def get_context_data(self, **kwargs): + """Return additional context for rendering the template.""" + context = super().get_context_data(**kwargs) + context['title'] = _('Add Allowed Client') + + context['domains'] = [] + info = utils.get_info() + server_info = info['my_server'] + + if server_info: + domains = DomainName.list_names(filter_for_service='wireguard') + filtered_domains = [ + domain for domain in domains if not domain.endswith('.local') + ] + port = server_info.get('listen_port', 51820) + endpoint = f"{filtered_domains[0]}:{port}" + + try: + client_privkey, client_pubkey = utils.generate_client_keypair() + + # Get next IP + connection = utils._server_connection() + setting_name = utils.nm.SETTING_WIREGUARD_SETTING_NAME + settings = connection.get_setting_by_name(setting_name) + next_ip = utils._get_next_available_ip_address(settings) + + data = { + 'next_ip': next_ip, + 'client_privkey': client_privkey, + 'client_pubkey': client_pubkey, + 'endpoint': endpoint + } + + # Add properties to template context + context['domains'] = filtered_domains + context.update(data) + + # Store info on instance for reuse + self.request.session.update(data) + + except Exception as e: + messages.warning(f"Client key generation failed: {e}") + pass + + return context + + def form_valid(self, form): + """Add client using generated public key.""" + try: + client_pubkey = self.request.session.pop('client_pubkey') + utils.add_client(client_pubkey) + except KeyError: + messages.warning(self.request, + _('Session expired. Please try again.')) + return redirect('wireguard:auto-add-client') + except ValueError: + messages.warning(self.request, _('Client already exists')) + return redirect('wireguard:index') + + return super().form_valid(form) + + class ShowClientView(SuccessMessageMixin, TemplateView): """View to show a client's details.""" template_name = 'wireguard_show_client.html' diff --git a/pyproject.toml b/pyproject.toml index 4cd7a3b42..d09b7dd29 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -178,6 +178,7 @@ module = [ "plinth.tests.config_local", "pytest_splinter.*", "ruamel.*", + "segno.*", "selenium.*", "splinter.*", "stronghold.*", diff --git a/static/themes/default/icons/magic.svg b/static/themes/default/icons/magic.svg new file mode 100644 index 000000000..0d6566ac0 --- /dev/null +++ b/static/themes/default/icons/magic.svg @@ -0,0 +1,10 @@ + + + diff --git a/static/themes/default/icons/qrcode.svg b/static/themes/default/icons/qrcode.svg new file mode 100644 index 000000000..caf229063 --- /dev/null +++ b/static/themes/default/icons/qrcode.svg @@ -0,0 +1,15 @@ + + + +