diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 832400875..05644a455 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,10 @@ include: - remote: https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml - local: /.ci/functional-tests.yml +default: + artifacts: + expire_in: 3 mos + image: registry.salsa.debian.org/freedombox-team/freedombox:gitlabci stages: diff --git a/debian/changelog b/debian/changelog index 0bb3b3869..a66c49230 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,20 @@ +freedombox (26.13) unstable; urgency=medium + + [ QuietCedar47 ] + * Translated using Weblate (Chinese (Simplified Han script)) + + [ Sunil Mohan Adapa ] + * gitlab-ci: Set default artifact expiry to 3 months + * wireguard: Fix issues with QR codes and config download + * wireguard: Don't setup server implicitly + * storage: tests: Fix a failure from psutil change (Closes: #1149418) + + [ James Valleroy ] + * locale: Update strings for translation + * doc: Fetch latest manual + + -- James Valleroy Tue, 06 Oct 2026 22:44:25 -0400 + freedombox (26.12~bpo13+1) trixie-backports; urgency=medium * Rebuild for trixie-backports. diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 0029c42b0..fb25d7a68 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,19 @@ 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.13 (2026-10-06) == + +=== Highlights === + + * wireguard: Fix issues with QR codes and config download + +=== Other Changes === + + * gitlab-ci: Set default artifact expiry to 3 months + * locale: Update translations for Chinese (Simplified Han script) + * wireguard: Don't setup server implicitly + * storage: tests: Fix a failure from psutil change + == FreedomBox 26.12 (2026-09-14) == === Highlights === diff --git a/doc/manual/en/WireGuard.raw.wiki b/doc/manual/en/WireGuard.raw.wiki index df74fb4b1..b1be6432d 100644 --- a/doc/manual/en/WireGuard.raw.wiki +++ b/doc/manual/en/WireGuard.raw.wiki @@ -16,56 +16,132 @@ !WireGuard is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It can be a useful replacement for IPSec or [[FreedomBox/Manual/OpenVPN|OpenVPN]]. +=== Usage === + +In !FreedomBox, the !WireGuard app can be used for two separate purposes. + +==== As a server ==== + +The first purpose is that !FreedomBox can act as a VPN server. Say, you are at a coffee shop and connected to their Wi-Fi network with your phone or laptop. You don't want the network operators or their Internet providers to know which websites you visit. You can encrypt all your Internet traffic including domain name lookups and send it to your !FreedomBox and your !FreedomBox will then send this to the broader Internet using the Internet connection that !FreedomBox has at your home. This has two effects. The network at the coffee shop will only see encrypted network traffic going to your !FreedomBox (but not any other network traffic) and the websites you visit will think you are browsing from your home and not the coffee shop. + +==== As a client ==== + +The second purpose is that you can make your !FreedomBox a VPN client. Say, you don't want your Internet provider to monitor the traffic that originates from your !FreedomBox and other home devices. You can purchase a VPN account from one of the !WireGuard VPN providers (alternatively, you can ask a friend with !FreedomBox to allow you as a !WireGuard client on their !WireGuard server). Then configure !FreedomBox's !WireGuard app as a VPN client. All traffic originating from !FreedomBox (including !BitTorrent traffic) will be encrypted and sent to your VPN provider. From there the traffic is decrypted and set to the broader Internet. This, again, has two effects. Your home Internet provider will see only encrypted traffic going to VPN provider (but not any other network traffic) and the websites you visit from !FreedomBox will think you are browsing from the location of VPN server. Many VPN providers setup their servers in many different countries and let you choose a server from a particular country. The websites you access from !FreedomBox will think that the traffic is originating from the country you have chosen. + +Additionally, you can make all your home devices use this VPN setup. For this you need to setup your Wi-Fi router "behind" the !FreedomBox. Your Wi-Fi router will be plugged into the "LAN" port of your !FreedomBox and configured in "repeater" mode (note that you will need to setup !FreedomBox on a device that has two Ethernet ports, such as [[FreedomBox/Hardware/LibreCrafts|Libre Crafts FreedomBox]]). Once this is done, network traffic from all the devices connect to the Wi-Fi router will then pass through !FreedomBox. If !WireGuard VPN client is configured on !FreedomBox, then all the traffic originating from these devices will use the VPN automatically. === Installation === -You can install wireguard from the Apps section of the !FreedomBox web interface. +You can install !WireGuard from the Apps section of the !FreedomBox web interface. + +=== Configure FreedomBox as a VPN Server === + +To configure !FreedomBox as a server, click on the "Start !WireGuard Server" button if you see it along with the message "!WireGuard server not started yet" in the "As a Server" section. This is only needed once. After this, you see server information such as its public key, end points, and IP address in this section. + +If your !FreedomBox is setup behind a router, then you need to configure your router to forward incoming traffic on the UDP port 51820 to !FreedomBox's port 51820. + +=== Configure Mobile App to use VPN Server === + +The recommended app for Android and iOS is the official !WireGuard app available from app stores. Currently, the app is not available in F-Droid app store, so use the APK instead. Links are available in the "Clients Apps" section on the !WireGuard page. + +==== Using QR Code ==== + +This is the simplest and recommended way to configure the !WireGuard mobile app. + + 1. In the !FreedomBox !WireGuard app page, click on "Add Client Automatically". Click on the "Show QR Code". !FreedomBox will show a QR code. + 1. In the !WireGuard mobile app, click on the "+" button in the main page to create a new tunnel. From the menu shown, select "Scan from QR code" option. A dialog asking you allow camera permission to the !WireGuard app will be shown. Allow it. + 1. Then show the QR code generated by !FreedomBox in the first step. + 1. If scanning the code is successful, then the app will ask for a name for the tunnel. Provide any name you choose such as "!MyFreedomBox". Your configuration is complete. + 1. Enable the tunnel using slider button whenever you wish to connect to your !FreedomBox VPN server. + 1. See the section below on Troubleshooting to verify that the setup is working. + +{{attachment:wireguard-app.png|WireGuard App|height=400}} +{{attachment:wireguard-app-add-tunnel.png|Add tunnel menu|height=400}} +{{attachment:wireguard-app-after-qr-code.png|After scanning QR code|height=400}} +{{attachment:wireguard-app-tunnel-added.png|Tunnel Added|height=400}} + +==== Using Configuration File ==== + +If scanning QR code is not possible for some reason, use this approach. + + 1. In the !FreedomBox !WireGuard app page, click on "Add Client Automatically". Click on the "Download config file" option. A file is downloaded to your device. If this device is not the mobile device you wish to configure, then transfer this file to your mobile device (or send to the person who wants to your VPN server). + 1. In the !WireGuard mobile app, click on the "+" button in the main page to create a new tunnel. From the menu shown, select "Import from file or archive". Then select the configuration file that was downloaded from !FreedomBox web interface (or transferred to the mobile device). + 1. If import is successful, you will see the message "Imported wg-client" and a new tunnel added with the name "wg-client". You can rename it to a more memorable name such as "!MyFreedomBox". + 1. Enable the tunnel using slider button whenever you wish to connect to your !FreedomBox VPN server. + 1. See the section below on Troubleshooting to verify that the setup is working. + +{{attachment:wireguard-app.png|WireGuard App|height=400}} +{{attachment:wireguard-app-add-tunnel.png|Add tunnel menu|height=400}} +{{attachment:wireguard-app-imported.png|Configuration file imported|height=400}} +{{attachment:wireguard-app-tunnel-added.png|Tunnel Added|height=400}} -=== Usage === +==== Using Manual Configuration ==== - * Point-to-point tunnel - * VPN client with default route +If scanning QR code and importing from a configuration is not possible, use this approach. + + 1. In the !FreedomBox !WireGuard app page, click on "Add Client Automatically". Note the Private Key and all other details on the page. + 1. In the !WireGuard mobile app, click on the "+" button in the main page to create a new tunnel. From the menu shown, select "Create from scratch". + 1. In the Interface section provide name that is memorable such as "!MyFreedomBox". At the "Private Key", provide the private key generated by !FreedomBox in the first step. Public key is automatically filled up by the app (as public key is part of/derived from the private key). For Addresses, provide the value of "IP Address" from first step. For "DNS Servers" provide "10.84.0.1". + 1. After completing the Interface section, click on "Add peer" at the bottom of the page. For Public key, provide "Server public key" as seen in !FreedomBox !WireGuard app page "As a server" section. Provide one of the endpoints shown in the first step in the Endpoint field. Provide "0.0.0.0/0,::0/0" as Allowed IPs. + 1. Select save. You should see a new tunnel created. + 1. Enable the tunnel using slider button whenever you wish to connect to your !FreedomBox VPN server. + 1. See the section below on Troubleshooting to verify that the setup is working. + +{{attachment:wireguard-app.png|WireGuard App|height=400}} +{{attachment:wireguard-app-add-tunnel.png|Add tunnel menu|height=400}} +{{attachment:wireguard-app-manual-add-1.png|Filling Interface section|height=400}} +{{attachment:wireguard-app-manual-add-2.png|Filling Peer section|height=400}} +{{attachment:wireguard-app-tunnel-added.png|Tunnel Added|height=400}} -=== Configuration - Debian Peers === +=== Configure Desktop App (GNU/Linux) to use VPN Server === -Note: These steps are handled automatically on !FreedomBox. So you only need to follow these steps on any Debian clients that will connect to !FreedomBox, or Debian servers that !FreedomBox will connect to. +On a GNU/Linux desktop such as Debian, install the "wireguard" or "wireguard-tools" package. See the [[https://www.wireguard.com/install/|installation]] page for more details. - * [[WireGuard#Step_1_-_Generating_Keypairs|Step 1 - Generating Keypairs]] - * [[WireGuard#Step_2_-_Configuration|Step 2 - Alternative A - Manual Configuration]] + 1. In the !FreedomBox !WireGuard app page, click on "Add Client Automatically". Click on the "Download config file" option. A file is downloaded to your device. If this device is not the device you wish to configure, then transfer this file to your device (or send to the person who wants to your VPN server). + 1. To activate the !WireGuard tunnel, run the command "sudo wg-quick up /path/to/your/wg-client.conf". To deactivate the tunnel, run "sudo wg-quick down /path/to/your/wg-client.conf". + 1. See the section below on Troubleshooting to verify that the setup is working. +=== Configure Desktop App (Windows) to use VPN Server === -=== Configuration - Mobile Clients === +Download and install the official !WireGuard client for Windows. See the [[https://www.wireguard.com/install/|installation]] page for more details. -!WireGuard has a user space implementation for mobile devices available via the !WireGuard app - available for Android and iOS (a full list of supported operating systems is available [[https://www.wireguard.com/install/|here]]). + 1. In the !FreedomBox !WireGuard app page, click on "Add Client Automatically". Click on the "Download config file" option. A file is downloaded to your device. If this device is not the device you wish to configure, then transfer this file to your device (or send to the person who wants to your VPN server). + 1. Import the configuration file into the !WireGuard for Windows app. After that, you should be able to activate and deactivate the tunnel. + 1. See the section below on Troubleshooting to verify that the setup is working. -The client can be configured in several ways: +=== Configure Desktop App (macOS) to use VPN Server === -==== Alternative A - Create configuration manually ==== +Download and install the official !WireGuard client for macOS. See the [[https://www.wireguard.com/install/|installation]] page for more details. -This is self-explanatory, you actually create the config on the mobile device then transfer the relevant keys to the server's config. + 1. In the !FreedomBox !WireGuard app page, click on "Add Client Automatically". Click on the "Download config file" option. A file is downloaded to your device. If this device is not the device you wish to configure, then transfer this file to your device (or send to the person who wants to your VPN server). + 1. Import the configuration file into the !WireGuard for macOS app. After that, you should be able to activate and deactivate the tunnel. + 1. See the section below on Troubleshooting to verify that the setup is working. -==== Alternative B - Create configuration from archive ==== +=== Troubleshooting === -Here you have to create a .zip archive of the client configuration file, transfer it to the device then import it into the app. +After you activate the tunnel, all traffic on the system will go through the VPN you have configured. If there is an error in configuration, activating the tunnel will not fail as there is no connection to be made. You traffic will simply fail to reach the server and this will happen silently. Use the following tricks to ensure that your !WireGuard configuration is correct. -==== Alternative C - Import by reading a QR code (most secure method) ==== + 1. Activate the tunnel. + 1. Open a browser and access a website like https://www.wikipedia.org/ . It should work. + 1. Open a browser and access the link https://10.84.0.1. This should show you your !FreedomBox web interface (after a security warning). + 1. Click the tunnel in the !WireGuard client app. It should show you some value for "Last handshake". It should also show you a non-zero value for data received. + 1. On !FreedomBox's !WireGuard app page, click on the public key of the client in the "Peers" table of "As a server" section. This shows you the Allowed Client page. In this page, data received should be non-zero and "Last handshake" should show a valid value. + 1. If you have the "ping" utility installed on your client machine, running "ping 9.9.9.9" should receive responses. + 1. If you have "traceroute" utility installed on your machine, running "traceroute 9.9.9.9" should show "10.84.0.1" (your !FreedomBox) as the first step in delivering the packets. -The mobile client as of version 0.0.20180724 supports QR code based input. +If the above does not work, verify the following: -DebianPackage:qrencode can be used to generate qr codes, even in a terminal/console using UTF8 characters. + 1. The public key of the client should be shown in the list of Peers in the "As a Server" section of !WireGuard app in !FreedomBox. It should match exactly. + 1. The allowed IP listed against the public key in !FreedomBox should be the value of IP address set in the client app. + 1. The public key of the !FreedomBox server shown in "As a Server" section of !WireGuard app in !FreedomBox interface should be the public key set in peer section of client app. It should match exactly. + 1. Allowed IPs should be "0.0.0.0/0,::0/0" in client app in the peer section of tunnel configuration. + 1. The endpoint of the peer in client app should be a domain name or the IP address of the !FreedomBox server followed by a ":51820". Your !FreedomBox should also be reachable from this IP address or domain name. Deactivate the tunnel and type this address in the browser (without the port) from the client machine. !FreedomBox web interface should show up. -The syntax is: - -{{{ -# qrencode -t ansiutf8 < client.conf -}}} - -This will generate a QR code that is readable by the mobile client. - -The advantage of this approach is that there is no need to transfer sensitive information via data channels that can potentially be compromised and there is no need for any additional software. +=== Known Issues === + * In version 26.12 of !FreedomBox, the Show QR Code and Download configuration functionality is broken. It will be fixed in version 26.13. === External Links === diff --git a/doc/manual/en/images/wireguard-app-add-tunnel.png b/doc/manual/en/images/wireguard-app-add-tunnel.png new file mode 100644 index 000000000..3fac4caa9 Binary files /dev/null and b/doc/manual/en/images/wireguard-app-add-tunnel.png differ diff --git a/doc/manual/en/images/wireguard-app-after-qr-code.png b/doc/manual/en/images/wireguard-app-after-qr-code.png new file mode 100644 index 000000000..fd58d97de Binary files /dev/null and b/doc/manual/en/images/wireguard-app-after-qr-code.png differ diff --git a/doc/manual/en/images/wireguard-app-imported.png b/doc/manual/en/images/wireguard-app-imported.png new file mode 100644 index 000000000..a6e67f594 Binary files /dev/null and b/doc/manual/en/images/wireguard-app-imported.png differ diff --git a/doc/manual/en/images/wireguard-app-manual-add-1.png b/doc/manual/en/images/wireguard-app-manual-add-1.png new file mode 100644 index 000000000..b5a07fc57 Binary files /dev/null and b/doc/manual/en/images/wireguard-app-manual-add-1.png differ diff --git a/doc/manual/en/images/wireguard-app-manual-add-2.png b/doc/manual/en/images/wireguard-app-manual-add-2.png new file mode 100644 index 000000000..b0ed57d7a Binary files /dev/null and b/doc/manual/en/images/wireguard-app-manual-add-2.png differ diff --git a/doc/manual/en/images/wireguard-app-tunnel-added.png b/doc/manual/en/images/wireguard-app-tunnel-added.png new file mode 100644 index 000000000..0693eab4b Binary files /dev/null and b/doc/manual/en/images/wireguard-app-tunnel-added.png differ diff --git a/doc/manual/en/images/wireguard-app.png b/doc/manual/en/images/wireguard-app.png new file mode 100644 index 000000000..6115c8502 Binary files /dev/null and b/doc/manual/en/images/wireguard-app.png differ diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 0029c42b0..fb25d7a68 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,19 @@ 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.13 (2026-10-06) == + +=== Highlights === + + * wireguard: Fix issues with QR codes and config download + +=== Other Changes === + + * gitlab-ci: Set default artifact expiry to 3 months + * locale: Update translations for Chinese (Simplified Han script) + * wireguard: Don't setup server implicitly + * storage: tests: Fix a failure from psutil change + == FreedomBox 26.12 (2026-09-14) == === Highlights === diff --git a/freedombox/__init__.py b/freedombox/__init__.py index 817c073c7..72a7b44a5 100644 --- a/freedombox/__init__.py +++ b/freedombox/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '26.12' +__version__ = '26.13' diff --git a/freedombox/locale/ar/LC_MESSAGES/django.po b/freedombox/locale/ar/LC_MESSAGES/django.po index 9a69047f1..6263bb882 100644 --- a/freedombox/locale/ar/LC_MESSAGES/django.po +++ b/freedombox/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-09-15 00:09+0000\n" +"POT-Creation-Date: 2026-10-07 02:24+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" @@ -5783,7 +5783,6 @@ msgstr "" #: freedombox/modules/networks/templates/connections_list.html:20 #: freedombox/modules/networks/views.py:420 #: freedombox/modules/wireguard/templates/wireguard_add_server.html:19 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:82 msgid "Add Connection" msgstr "" @@ -8076,7 +8075,7 @@ msgid "Go to Power" msgstr "Към Захранване" #: freedombox/modules/storage/__init__.py:447 -#: freedombox/modules/storage/tests/test_storage.py:407 +#: freedombox/modules/storage/tests/test_storage.py:406 msgid "grub package is configured" msgstr "Пакетът grub е настроен" @@ -9418,7 +9417,6 @@ msgstr "Премахване на потребител" #: freedombox/modules/users/templates/users_passkeys.html:155 #: freedombox/modules/users/templates/users_update.html:72 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:84 msgid "Cancel" msgstr "Отказ" @@ -9545,8 +9543,7 @@ msgstr "Въведете съществуващо потребителско и #: freedombox/modules/wireguard/forms.py:69 #: freedombox/modules/wireguard/templates/wireguard.html:29 #: freedombox/modules/wireguard/templates/wireguard.html:57 -#: freedombox/modules/wireguard/templates/wireguard.html:125 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:32 +#: freedombox/modules/wireguard/templates/wireguard.html:127 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" @@ -9557,31 +9554,31 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:83 +#: freedombox/modules/wireguard/forms.py:78 msgid "Endpoint of the server" msgstr "" -#: freedombox/modules/wireguard/forms.py:84 +#: freedombox/modules/wireguard/forms.py:79 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: freedombox/modules/wireguard/forms.py:89 +#: freedombox/modules/wireguard/forms.py:84 msgid "Public key of the server" msgstr "" -#: freedombox/modules/wireguard/forms.py:90 +#: freedombox/modules/wireguard/forms.py:85 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:95 +#: freedombox/modules/wireguard/forms.py:90 msgid "Client IP address provided by server" msgstr "" -#: freedombox/modules/wireguard/forms.py:97 +#: freedombox/modules/wireguard/forms.py:92 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: " @@ -9590,11 +9587,11 @@ msgid "" "Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" -#: freedombox/modules/wireguard/forms.py:106 +#: freedombox/modules/wireguard/forms.py:101 msgid "Private key of this machine" msgstr "" -#: freedombox/modules/wireguard/forms.py:107 +#: freedombox/modules/wireguard/forms.py:102 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, " @@ -9602,22 +9599,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:115 +#: freedombox/modules/wireguard/forms.py:110 msgid "Pre-shared key" msgstr "" -#: freedombox/modules/wireguard/forms.py:116 +#: freedombox/modules/wireguard/forms.py:111 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 "" -#: freedombox/modules/wireguard/forms.py:122 +#: freedombox/modules/wireguard/forms.py:117 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: freedombox/modules/wireguard/forms.py:124 +#: freedombox/modules/wireguard/forms.py:119 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9644,7 +9641,6 @@ msgid "Value" msgstr "" #: freedombox/modules/wireguard/templates/wireguard.html:33 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:27 #, fuzzy #| msgid "Entry point" msgid "Endpoint(s)" @@ -9669,7 +9665,7 @@ msgid "Allowed IPs" msgstr "" #: freedombox/modules/wireguard/templates/wireguard.html:59 -#: freedombox/modules/wireguard/templates/wireguard.html:126 +#: freedombox/modules/wireguard/templates/wireguard.html:128 msgid "Last Connected Time" msgstr "" @@ -9678,59 +9674,58 @@ msgstr "" msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:88 +#: freedombox/modules/wireguard/templates/wireguard.html:90 msgid "Auto add a new peer" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:92 +#: freedombox/modules/wireguard/templates/wireguard.html:93 msgid "Add Client Automatically" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:94 +#: freedombox/modules/wireguard/templates/wireguard.html:96 msgid "Add a new peer" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:98 -#: freedombox/modules/wireguard/views.py:59 -#: freedombox/modules/wireguard/views.py:146 +#: freedombox/modules/wireguard/templates/wireguard.html:100 +#: freedombox/modules/wireguard/views.py:62 msgid "Add Allowed Client" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:103 +#: freedombox/modules/wireguard/templates/wireguard.html:105 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server not started yet." msgstr "Паролата е променена." -#: freedombox/modules/wireguard/templates/wireguard.html:107 #: freedombox/modules/wireguard/templates/wireguard.html:109 +#: freedombox/modules/wireguard/templates/wireguard.html:111 msgid "Start WireGuard Server" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:115 +#: freedombox/modules/wireguard/templates/wireguard.html:117 msgid "As a Client" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:117 +#: freedombox/modules/wireguard/templates/wireguard.html:119 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:124 +#: freedombox/modules/wireguard/templates/wireguard.html:126 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:148 +#: freedombox/modules/wireguard/templates/wireguard.html:150 msgid "No connections to remote servers are configured yet." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:158 +#: freedombox/modules/wireguard/templates/wireguard.html:160 msgid "Add a new server" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:162 -#: freedombox/modules/wireguard/views.py:288 +#: freedombox/modules/wireguard/templates/wireguard.html:164 +#: freedombox/modules/wireguard/views.py:239 msgid "Add Connection to Server" msgstr "" @@ -9742,62 +9737,76 @@ msgstr "" msgid "Add Client" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:23 -msgid "IP Address" -msgstr "Адрес по IP" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:36 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:15 #, fuzzy -#| msgid "Privacy" -msgid "Private Key" -msgstr "Поверителност" +#| msgid "Select verified SSH public key" +msgid "New client added with public key:" +msgstr "Изберете проверен публичен ключ за SSH" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 -msgid "Click to reveal" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:47 -msgid "Important:" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:48 -msgid "Save the private key now. This page shows it only once!" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:52 -#, fuzzy -#| msgid "Configuration" -msgid "Client configuration file" -msgstr "Настройки" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:54 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:19 msgid "" -"Download the configuration file (.conf) for manual import, or use the QR " -"code to import directly from your WireGuard mobile app." +"To configure the client app, download the configuration file (.conf) for " +"import, scan the QR code, or use the parameters to configure from scratch. " +"This information can't be shown again. Be sure to get it before navigating " +"away from this page. Keep this information confidential." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:60 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:28 #, fuzzy -#| msgid "warning" -msgid "Warning:" -msgstr "предупреждение" +#| msgid "TLS domain" +msgid "Using domain:" +msgstr "Домейн за TLS" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:61 -msgid "" -"Treat this QR code like a password. Anyone who scans it can gain VPN access " -"if the connection is enabled." -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:33 msgid "Download config file" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:76 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 #, fuzzy #| msgid "Source Code" -msgid "Show QR Code" +msgid "Show QR code" msgstr "Изходен код" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:45 +msgid "Show config parameters" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:55 +msgid "Client Public Key" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:59 +#, fuzzy +#| msgid "Privacy" +msgid "Client Private Key" +msgstr "Поверителност" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:63 +#, fuzzy +#| msgid "IP Address" +msgid "Client IP Address" +msgstr "Адрес по IP" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:67 +#, fuzzy +#| msgid "Current DNS Server" +msgid "Client DNS Server" +msgstr "Текущ сървър на DNS" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +msgid "Server/Peer Public Key" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:75 +#, fuzzy +#| msgid "Server Fingerprints" +msgid "Server/Peer Endpoint" +msgstr "Отпечатък от сървъра" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:79 +msgid "Server/Peer Allowed IPs" +msgstr "" + #: freedombox/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "" @@ -9886,81 +9895,76 @@ msgstr "" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: freedombox/modules/wireguard/views.py:54 -#: freedombox/modules/wireguard/views.py:141 +#: freedombox/modules/wireguard/views.py:57 msgid "Added new client." msgstr "" -#: freedombox/modules/wireguard/views.py:79 -#: freedombox/modules/wireguard/views.py:248 +#: freedombox/modules/wireguard/views.py:82 +#: freedombox/modules/wireguard/views.py:199 msgid "Client with public key already exists" msgstr "" -#: freedombox/modules/wireguard/views.py:186 -msgid "Session expired. Please try again." -msgstr "" - -#: freedombox/modules/wireguard/views.py:189 +#: freedombox/modules/wireguard/views.py:137 #, fuzzy -#| msgid "Domain already exists." -msgid "Client already exists" -msgstr "Домейнът вече съществува." +#| msgid "Client Apps" +msgid "Client Added" +msgstr "Клиентски приложения" -#: freedombox/modules/wireguard/views.py:202 +#: freedombox/modules/wireguard/views.py:153 msgid "Allowed Client" msgstr "" -#: freedombox/modules/wireguard/views.py:224 +#: freedombox/modules/wireguard/views.py:175 msgid "Updated client." msgstr "Настройките на клиентското приложение са променени." -#: freedombox/modules/wireguard/views.py:229 +#: freedombox/modules/wireguard/views.py:180 msgid "Modify Client" msgstr "" -#: freedombox/modules/wireguard/views.py:262 +#: freedombox/modules/wireguard/views.py:213 msgid "Delete Allowed Client" msgstr "" -#: freedombox/modules/wireguard/views.py:271 +#: freedombox/modules/wireguard/views.py:222 msgid "Client deleted." msgstr "" -#: freedombox/modules/wireguard/views.py:273 +#: freedombox/modules/wireguard/views.py:224 msgid "Client not found" msgstr "" -#: freedombox/modules/wireguard/views.py:283 +#: freedombox/modules/wireguard/views.py:234 msgid "Added new server." msgstr "" -#: freedombox/modules/wireguard/views.py:304 +#: freedombox/modules/wireguard/views.py:255 msgid "Connection to Server" msgstr "" -#: freedombox/modules/wireguard/views.py:322 +#: freedombox/modules/wireguard/views.py:273 msgid "Updated server." msgstr "Настройките на сървъра са променени." -#: freedombox/modules/wireguard/views.py:327 +#: freedombox/modules/wireguard/views.py:278 msgid "Modify Connection to Server" msgstr "" -#: freedombox/modules/wireguard/views.py:365 +#: freedombox/modules/wireguard/views.py:316 msgid "Delete Connection to Server" msgstr "" -#: freedombox/modules/wireguard/views.py:384 +#: freedombox/modules/wireguard/views.py:335 msgid "Server deleted." msgstr "" -#: freedombox/modules/wireguard/views.py:396 +#: freedombox/modules/wireguard/views.py:347 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "Паролата е променена." -#: freedombox/modules/wireguard/views.py:400 +#: freedombox/modules/wireguard/views.py:351 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10603,6 +10607,21 @@ msgstr "преди премахване на {app_id}" msgid "Gujarati" msgstr "Гуджарати" +#, fuzzy +#~| msgid "Configuration" +#~ msgid "Client configuration file" +#~ msgstr "Настройки" + +#, fuzzy +#~| msgid "warning" +#~ msgid "Warning:" +#~ msgstr "предупреждение" + +#, fuzzy +#~| msgid "Domain already exists." +#~ msgid "Client already exists" +#~ msgstr "Домейнът вече съществува." + #~ msgid "This app is experimental." #~ msgstr "Приложението е експериментално." diff --git a/freedombox/locale/bn/LC_MESSAGES/django.po b/freedombox/locale/bn/LC_MESSAGES/django.po index cc21cfc92..f6f0f0822 100644 --- a/freedombox/locale/bn/LC_MESSAGES/django.po +++ b/freedombox/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-09-15 00:09+0000\n" +"POT-Creation-Date: 2026-10-07 02:24+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" "Language-Team: German \n" "Language-Team: LANGUAGE \n" @@ -5459,7 +5459,6 @@ msgstr "" #: freedombox/modules/networks/templates/connections_list.html:20 #: freedombox/modules/networks/views.py:420 #: freedombox/modules/wireguard/templates/wireguard_add_server.html:19 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:82 msgid "Add Connection" msgstr "" @@ -7668,7 +7667,7 @@ msgid "Go to Power" msgstr "" #: freedombox/modules/storage/__init__.py:447 -#: freedombox/modules/storage/tests/test_storage.py:407 +#: freedombox/modules/storage/tests/test_storage.py:406 msgid "grub package is configured" msgstr "" @@ -8826,7 +8825,6 @@ msgstr "" #: freedombox/modules/users/templates/users_passkeys.html:155 #: freedombox/modules/users/templates/users_update.html:72 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:84 msgid "Cancel" msgstr "" @@ -8940,8 +8938,7 @@ msgstr "" #: freedombox/modules/wireguard/forms.py:69 #: freedombox/modules/wireguard/templates/wireguard.html:29 #: freedombox/modules/wireguard/templates/wireguard.html:57 -#: freedombox/modules/wireguard/templates/wireguard.html:125 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:32 +#: freedombox/modules/wireguard/templates/wireguard.html:127 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "" @@ -8952,31 +8949,31 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:83 +#: freedombox/modules/wireguard/forms.py:78 msgid "Endpoint of the server" msgstr "" -#: freedombox/modules/wireguard/forms.py:84 +#: freedombox/modules/wireguard/forms.py:79 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: freedombox/modules/wireguard/forms.py:89 +#: freedombox/modules/wireguard/forms.py:84 msgid "Public key of the server" msgstr "" -#: freedombox/modules/wireguard/forms.py:90 +#: freedombox/modules/wireguard/forms.py:85 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:95 +#: freedombox/modules/wireguard/forms.py:90 msgid "Client IP address provided by server" msgstr "" -#: freedombox/modules/wireguard/forms.py:97 +#: freedombox/modules/wireguard/forms.py:92 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: " @@ -8985,11 +8982,11 @@ msgid "" "Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" -#: freedombox/modules/wireguard/forms.py:106 +#: freedombox/modules/wireguard/forms.py:101 msgid "Private key of this machine" msgstr "" -#: freedombox/modules/wireguard/forms.py:107 +#: freedombox/modules/wireguard/forms.py:102 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, " @@ -8997,22 +8994,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:115 +#: freedombox/modules/wireguard/forms.py:110 msgid "Pre-shared key" msgstr "" -#: freedombox/modules/wireguard/forms.py:116 +#: freedombox/modules/wireguard/forms.py:111 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 "" -#: freedombox/modules/wireguard/forms.py:122 +#: freedombox/modules/wireguard/forms.py:117 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: freedombox/modules/wireguard/forms.py:124 +#: freedombox/modules/wireguard/forms.py:119 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9038,7 +9035,6 @@ msgid "Value" msgstr "" #: freedombox/modules/wireguard/templates/wireguard.html:33 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:27 msgid "Endpoint(s)" msgstr "" @@ -9060,7 +9056,7 @@ msgid "Allowed IPs" msgstr "" #: freedombox/modules/wireguard/templates/wireguard.html:59 -#: freedombox/modules/wireguard/templates/wireguard.html:126 +#: freedombox/modules/wireguard/templates/wireguard.html:128 msgid "Last Connected Time" msgstr "" @@ -9069,57 +9065,56 @@ msgstr "" msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:88 +#: freedombox/modules/wireguard/templates/wireguard.html:90 msgid "Auto add a new peer" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:92 +#: freedombox/modules/wireguard/templates/wireguard.html:93 msgid "Add Client Automatically" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:94 +#: freedombox/modules/wireguard/templates/wireguard.html:96 msgid "Add a new peer" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:98 -#: freedombox/modules/wireguard/views.py:59 -#: freedombox/modules/wireguard/views.py:146 +#: freedombox/modules/wireguard/templates/wireguard.html:100 +#: freedombox/modules/wireguard/views.py:62 msgid "Add Allowed Client" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:103 +#: freedombox/modules/wireguard/templates/wireguard.html:105 msgid "WireGuard server not started yet." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:107 #: freedombox/modules/wireguard/templates/wireguard.html:109 +#: freedombox/modules/wireguard/templates/wireguard.html:111 msgid "Start WireGuard Server" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:115 +#: freedombox/modules/wireguard/templates/wireguard.html:117 msgid "As a Client" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:117 +#: freedombox/modules/wireguard/templates/wireguard.html:119 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:124 +#: freedombox/modules/wireguard/templates/wireguard.html:126 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:148 +#: freedombox/modules/wireguard/templates/wireguard.html:150 msgid "No connections to remote servers are configured yet." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:158 +#: freedombox/modules/wireguard/templates/wireguard.html:160 msgid "Add a new server" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:162 -#: freedombox/modules/wireguard/views.py:288 +#: freedombox/modules/wireguard/templates/wireguard.html:164 +#: freedombox/modules/wireguard/views.py:239 msgid "Add Connection to Server" msgstr "" @@ -9131,52 +9126,60 @@ msgstr "" msgid "Add Client" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:23 -msgid "IP Address" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:15 +msgid "New client added with public key:" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:36 -msgid "Private Key" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 -msgid "Click to reveal" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:47 -msgid "Important:" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:48 -msgid "Save the private key now. This page shows it only once!" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:52 -msgid "Client configuration file" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:54 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:19 msgid "" -"Download the configuration file (.conf) for manual import, or use the QR " -"code to import directly from your WireGuard mobile app." +"To configure the client app, download the configuration file (.conf) for " +"import, scan the QR code, or use the parameters to configure from scratch. " +"This information can't be shown again. Be sure to get it before navigating " +"away from this page. Keep this information confidential." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:60 -msgid "Warning:" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:28 +msgid "Using domain:" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:61 -msgid "" -"Treat this QR code like a password. Anyone who scans it can gain VPN access " -"if the connection is enabled." -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:33 msgid "Download config file" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:76 -msgid "Show QR Code" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 +msgid "Show QR code" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:45 +msgid "Show config parameters" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:55 +msgid "Client Public Key" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:59 +msgid "Client Private Key" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:63 +msgid "Client IP Address" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:67 +msgid "Client DNS Server" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +msgid "Server/Peer Public Key" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:75 +msgid "Server/Peer Endpoint" +msgstr "" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:79 +msgid "Server/Peer Allowed IPs" msgstr "" #: freedombox/modules/wireguard/templates/wireguard_delete_client.html:14 @@ -9267,77 +9270,72 @@ msgstr "" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: freedombox/modules/wireguard/views.py:54 -#: freedombox/modules/wireguard/views.py:141 +#: freedombox/modules/wireguard/views.py:57 msgid "Added new client." msgstr "" -#: freedombox/modules/wireguard/views.py:79 -#: freedombox/modules/wireguard/views.py:248 +#: freedombox/modules/wireguard/views.py:82 +#: freedombox/modules/wireguard/views.py:199 msgid "Client with public key already exists" msgstr "" -#: freedombox/modules/wireguard/views.py:186 -msgid "Session expired. Please try again." +#: freedombox/modules/wireguard/views.py:137 +msgid "Client Added" msgstr "" -#: freedombox/modules/wireguard/views.py:189 -msgid "Client already exists" -msgstr "" - -#: freedombox/modules/wireguard/views.py:202 +#: freedombox/modules/wireguard/views.py:153 msgid "Allowed Client" msgstr "" -#: freedombox/modules/wireguard/views.py:224 +#: freedombox/modules/wireguard/views.py:175 msgid "Updated client." msgstr "" -#: freedombox/modules/wireguard/views.py:229 +#: freedombox/modules/wireguard/views.py:180 msgid "Modify Client" msgstr "" -#: freedombox/modules/wireguard/views.py:262 +#: freedombox/modules/wireguard/views.py:213 msgid "Delete Allowed Client" msgstr "" -#: freedombox/modules/wireguard/views.py:271 +#: freedombox/modules/wireguard/views.py:222 msgid "Client deleted." msgstr "" -#: freedombox/modules/wireguard/views.py:273 +#: freedombox/modules/wireguard/views.py:224 msgid "Client not found" msgstr "" -#: freedombox/modules/wireguard/views.py:283 +#: freedombox/modules/wireguard/views.py:234 msgid "Added new server." msgstr "" -#: freedombox/modules/wireguard/views.py:304 +#: freedombox/modules/wireguard/views.py:255 msgid "Connection to Server" msgstr "" -#: freedombox/modules/wireguard/views.py:322 +#: freedombox/modules/wireguard/views.py:273 msgid "Updated server." msgstr "" -#: freedombox/modules/wireguard/views.py:327 +#: freedombox/modules/wireguard/views.py:278 msgid "Modify Connection to Server" msgstr "" -#: freedombox/modules/wireguard/views.py:365 +#: freedombox/modules/wireguard/views.py:316 msgid "Delete Connection to Server" msgstr "" -#: freedombox/modules/wireguard/views.py:384 +#: freedombox/modules/wireguard/views.py:335 msgid "Server deleted." msgstr "" -#: freedombox/modules/wireguard/views.py:396 +#: freedombox/modules/wireguard/views.py:347 msgid "WireGuard server started successfully." msgstr "" -#: freedombox/modules/wireguard/views.py:400 +#: freedombox/modules/wireguard/views.py:351 msgid "Failed to start WireGuard server: {}" msgstr "" diff --git a/freedombox/locale/el/LC_MESSAGES/django.po b/freedombox/locale/el/LC_MESSAGES/django.po index 369dfe41a..cf574c954 100644 --- a/freedombox/locale/el/LC_MESSAGES/django.po +++ b/freedombox/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-09-15 00:09+0000\n" +"POT-Creation-Date: 2026-10-07 02:24+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 \n" "Language-Team: Plinth Developers \n" "Language-Team: French \n" "Language-Team: Galician \n" "Language-Team: Gujarati \n" "Language-Team: Hindi \n" @@ -6411,7 +6411,6 @@ msgstr "Wi-Fi hálózatok a közelben" #: freedombox/modules/networks/templates/connections_list.html:20 #: freedombox/modules/networks/views.py:420 #: freedombox/modules/wireguard/templates/wireguard_add_server.html:19 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:82 msgid "Add Connection" msgstr "Kapcsolat hozzáadása" @@ -9078,7 +9077,7 @@ msgid "Go to Power" msgstr "Leállítás" #: freedombox/modules/storage/__init__.py:447 -#: freedombox/modules/storage/tests/test_storage.py:407 +#: freedombox/modules/storage/tests/test_storage.py:406 msgid "grub package is configured" msgstr "" @@ -10448,7 +10447,6 @@ msgstr "Felhasználó törlése" #: freedombox/modules/users/templates/users_passkeys.html:155 #: freedombox/modules/users/templates/users_update.html:72 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:84 msgid "Cancel" msgstr "Mégse" @@ -10580,8 +10578,7 @@ msgstr "Adj meg egy érvényes felhasználónevet." #: freedombox/modules/wireguard/forms.py:69 #: freedombox/modules/wireguard/templates/wireguard.html:29 #: freedombox/modules/wireguard/templates/wireguard.html:57 -#: freedombox/modules/wireguard/templates/wireguard.html:125 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:32 +#: freedombox/modules/wireguard/templates/wireguard.html:127 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "Nyilvános kulcs" @@ -10594,22 +10591,22 @@ msgstr "" "A partner nyilvános kulcsa. Például: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: freedombox/modules/wireguard/forms.py:83 +#: freedombox/modules/wireguard/forms.py:78 msgid "Endpoint of the server" msgstr "A szerver végpontja" -#: freedombox/modules/wireguard/forms.py:84 +#: freedombox/modules/wireguard/forms.py:79 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 ." -#: freedombox/modules/wireguard/forms.py:89 +#: freedombox/modules/wireguard/forms.py:84 msgid "Public key of the server" msgstr "A szerver nyilvános kulcsa" -#: freedombox/modules/wireguard/forms.py:90 +#: freedombox/modules/wireguard/forms.py:85 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." @@ -10617,11 +10614,11 @@ msgstr "" "A szerver üzemeltetője által megadott hosszú karakterlánc. Például: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: freedombox/modules/wireguard/forms.py:95 +#: freedombox/modules/wireguard/forms.py:90 msgid "Client IP address provided by server" msgstr "A szerver által megadott kliens IP-cím" -#: freedombox/modules/wireguard/forms.py:97 +#: freedombox/modules/wireguard/forms.py:92 #, fuzzy #| msgid "" #| "IP address assigned to this machine on the VPN after connecting to the " @@ -10638,11 +10635,11 @@ msgstr "" "Ezt az értéket általában a szerver üzemeltetője adja meg. Például: " "192.168.0.10." -#: freedombox/modules/wireguard/forms.py:106 +#: freedombox/modules/wireguard/forms.py:101 msgid "Private key of this machine" msgstr "A gép privát kulcsa" -#: freedombox/modules/wireguard/forms.py:107 +#: freedombox/modules/wireguard/forms.py:102 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, " @@ -10654,11 +10651,11 @@ msgstr "" "módszer. Egyes szerverüzemeltetők azonban ragaszkodnak ennek megadásához. " "Például: MConEJFIg6+DFHgg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." -#: freedombox/modules/wireguard/forms.py:115 +#: freedombox/modules/wireguard/forms.py:110 msgid "Pre-shared key" msgstr "Előre megosztott kulcs" -#: freedombox/modules/wireguard/forms.py:116 +#: freedombox/modules/wireguard/forms.py:111 msgid "" "Optional. A shared secret key provided by the server to add an additional " "layer of security. Fill in only if provided. Example: " @@ -10668,11 +10665,11 @@ msgstr "" "további biztonsági szintet biztosít. Csak akkor töltsd ki, ha rendelkezésre " "áll. Például: MConEJFIg6+DFHgg2J1nn9SNLOSE9KR0ysdPgmPjibEs=." -#: freedombox/modules/wireguard/forms.py:122 +#: freedombox/modules/wireguard/forms.py:117 msgid "Use this connection to send all outgoing traffic" msgstr "Használja ezt a kapcsolatot az összes kimenő forgalom küldésére" -#: freedombox/modules/wireguard/forms.py:124 +#: freedombox/modules/wireguard/forms.py:119 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 " @@ -10703,7 +10700,6 @@ msgid "Value" msgstr "" #: freedombox/modules/wireguard/templates/wireguard.html:33 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:27 #, fuzzy #| msgid "Endpoint" msgid "Endpoint(s)" @@ -10728,7 +10724,7 @@ msgid "Allowed IPs" msgstr "Engedélyezett IP-címek" #: freedombox/modules/wireguard/templates/wireguard.html:59 -#: freedombox/modules/wireguard/templates/wireguard.html:126 +#: freedombox/modules/wireguard/templates/wireguard.html:128 msgid "Last Connected Time" msgstr "Utolsó csatlakozási idő" @@ -10737,61 +10733,60 @@ msgstr "Utolsó csatlakozási idő" msgid "No peers configured to connect to this %(box_name)s yet." msgstr "Ehhez a %(box_name)shoz még nincs partner konfigurálva." -#: freedombox/modules/wireguard/templates/wireguard.html:88 +#: freedombox/modules/wireguard/templates/wireguard.html:90 #, fuzzy #| msgid "Add a new peer" msgid "Auto add a new peer" msgstr "Új társ hozzáadása" -#: freedombox/modules/wireguard/templates/wireguard.html:92 +#: freedombox/modules/wireguard/templates/wireguard.html:93 msgid "Add Client Automatically" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:94 +#: freedombox/modules/wireguard/templates/wireguard.html:96 msgid "Add a new peer" msgstr "Új társ hozzáadása" -#: freedombox/modules/wireguard/templates/wireguard.html:98 -#: freedombox/modules/wireguard/views.py:59 -#: freedombox/modules/wireguard/views.py:146 +#: freedombox/modules/wireguard/templates/wireguard.html:100 +#: freedombox/modules/wireguard/views.py:62 msgid "Add Allowed Client" msgstr "Engedélyezett kliens hozzáadása" -#: freedombox/modules/wireguard/templates/wireguard.html:103 +#: freedombox/modules/wireguard/templates/wireguard.html:105 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server not started yet." msgstr "A jelszó módosítása sikeres." -#: freedombox/modules/wireguard/templates/wireguard.html:107 #: freedombox/modules/wireguard/templates/wireguard.html:109 +#: freedombox/modules/wireguard/templates/wireguard.html:111 msgid "Start WireGuard Server" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:115 +#: freedombox/modules/wireguard/templates/wireguard.html:117 msgid "As a Client" msgstr "Ügyfélként" -#: freedombox/modules/wireguard/templates/wireguard.html:117 +#: freedombox/modules/wireguard/templates/wireguard.html:119 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "Szerverek, amelyekhez a %(box_name)s csatlakozni fog:" -#: freedombox/modules/wireguard/templates/wireguard.html:124 +#: freedombox/modules/wireguard/templates/wireguard.html:126 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "Végpont" -#: freedombox/modules/wireguard/templates/wireguard.html:148 +#: freedombox/modules/wireguard/templates/wireguard.html:150 msgid "No connections to remote servers are configured yet." msgstr "A távoli szerverekhez még nincsenek konfigurálva kapcsolatok." -#: freedombox/modules/wireguard/templates/wireguard.html:158 +#: freedombox/modules/wireguard/templates/wireguard.html:160 msgid "Add a new server" msgstr "Új szerver hozzáadása" -#: freedombox/modules/wireguard/templates/wireguard.html:162 -#: freedombox/modules/wireguard/views.py:288 +#: freedombox/modules/wireguard/templates/wireguard.html:164 +#: freedombox/modules/wireguard/views.py:239 msgid "Add Connection to Server" msgstr "Kapcsolat hozzáadása a szerverhez" @@ -10805,66 +10800,86 @@ msgstr "A kliens által használt IP-cím:" msgid "Add Client" msgstr "Kliens hozzáadása" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:23 -msgid "IP Address" -msgstr "IP-cím" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:36 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:15 #, fuzzy -#| msgid "Private repository" -msgid "Private Key" -msgstr "Privát tároló" +#| msgid "Client public key:" +msgid "New client added with public key:" +msgstr "A kliens nyilvános kulcsa:" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 -msgid "Click to reveal" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:47 -#, fuzzy -#| msgid "Key Import Date" -msgid "Important:" -msgstr "Kulcs importálásának dátuma" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:48 -msgid "Save the private key now. This page shows it only once!" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:52 -#, fuzzy -#| msgid "configuration failed" -msgid "Client configuration file" -msgstr "konfiguráció sikertelen" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:54 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:19 msgid "" -"Download the configuration file (.conf) for manual import, or use the QR " -"code to import directly from your WireGuard mobile app." +"To configure the client app, download the configuration file (.conf) for " +"import, scan the QR code, or use the parameters to configure from scratch. " +"This information can't be shown again. Be sure to get it before navigating " +"away from this page. Keep this information confidential." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:60 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:28 #, fuzzy -#| msgid "warning" -msgid "Warning:" -msgstr "figyelmeztetés" +#| msgid "Serving Domains" +msgid "Using domain:" +msgstr "Kiszolgált tartományok" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:61 -msgid "" -"Treat this QR code like a password. Anyone who scans it can gain VPN access " -"if the connection is enabled." -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:33 #, fuzzy #| msgid "Download my profile" msgid "Download config file" msgstr "Saját profilom letöltése" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:76 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 #, fuzzy #| msgid "Source Code" -msgid "Show QR Code" +msgid "Show QR code" msgstr "Forráskód" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:45 +#, fuzzy +#| msgid "Show connection %(name)s" +msgid "Show config parameters" +msgstr "%(name)s kapcsolat megjelenítése" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:55 +#, fuzzy +#| msgid "Client public key:" +msgid "Client Public Key" +msgstr "A kliens nyilvános kulcsa:" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:59 +#, fuzzy +#| msgid "Private repository" +msgid "Client Private Key" +msgstr "Privát tároló" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:63 +#, fuzzy +#| msgid "IP Address" +msgid "Client IP Address" +msgstr "IP-cím" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:67 +#, fuzzy +#| msgid "Second DNS Server" +msgid "Client DNS Server" +msgstr "Másodlagos DNS-szerver" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +#, fuzzy +#| msgid "Server public key:" +msgid "Server/Peer Public Key" +msgstr "Szerver nyilvános kulcsa:" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:75 +#, fuzzy +#| msgid "Server endpoint:" +msgid "Server/Peer Endpoint" +msgstr "Szerver végpont:" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:79 +#, fuzzy +#| msgid "Allowed IPs" +msgid "Server/Peer Allowed IPs" +msgstr "Engedélyezett IP-címek" + #: freedombox/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?" @@ -10958,81 +10973,76 @@ msgstr "A gép IP-címe:" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: freedombox/modules/wireguard/views.py:54 -#: freedombox/modules/wireguard/views.py:141 +#: freedombox/modules/wireguard/views.py:57 msgid "Added new client." msgstr "Új kliens hozzáadva." -#: freedombox/modules/wireguard/views.py:79 -#: freedombox/modules/wireguard/views.py:248 +#: freedombox/modules/wireguard/views.py:82 +#: freedombox/modules/wireguard/views.py:199 msgid "Client with public key already exists" msgstr "Ezzel a nyilvános kulccsal már létezik kliens" -#: freedombox/modules/wireguard/views.py:186 -msgid "Session expired. Please try again." -msgstr "" - -#: freedombox/modules/wireguard/views.py:189 +#: freedombox/modules/wireguard/views.py:137 #, fuzzy -#| msgid "Client with public key already exists" -msgid "Client already exists" -msgstr "Ezzel a nyilvános kulccsal már létezik kliens" +#| msgid "Client deleted." +msgid "Client Added" +msgstr "Ügyfél törölve." -#: freedombox/modules/wireguard/views.py:202 +#: freedombox/modules/wireguard/views.py:153 msgid "Allowed Client" msgstr "Engedélyezett kliens" -#: freedombox/modules/wireguard/views.py:224 +#: freedombox/modules/wireguard/views.py:175 msgid "Updated client." msgstr "Kliens frissítve." -#: freedombox/modules/wireguard/views.py:229 +#: freedombox/modules/wireguard/views.py:180 msgid "Modify Client" msgstr "Ügyfél módosítása" -#: freedombox/modules/wireguard/views.py:262 +#: freedombox/modules/wireguard/views.py:213 msgid "Delete Allowed Client" msgstr "Engedélyezett kliensek törlése" -#: freedombox/modules/wireguard/views.py:271 +#: freedombox/modules/wireguard/views.py:222 msgid "Client deleted." msgstr "Ügyfél törölve." -#: freedombox/modules/wireguard/views.py:273 +#: freedombox/modules/wireguard/views.py:224 msgid "Client not found" msgstr "Az ügyfél nem található" -#: freedombox/modules/wireguard/views.py:283 +#: freedombox/modules/wireguard/views.py:234 msgid "Added new server." msgstr "Új szerver hozzáadva." -#: freedombox/modules/wireguard/views.py:304 +#: freedombox/modules/wireguard/views.py:255 msgid "Connection to Server" msgstr "Kapcsolat a szerverhez" -#: freedombox/modules/wireguard/views.py:322 +#: freedombox/modules/wireguard/views.py:273 msgid "Updated server." msgstr "Szerver frissítve." -#: freedombox/modules/wireguard/views.py:327 +#: freedombox/modules/wireguard/views.py:278 msgid "Modify Connection to Server" msgstr "Szerverrel létesített kapcsolat módosítása" -#: freedombox/modules/wireguard/views.py:365 +#: freedombox/modules/wireguard/views.py:316 msgid "Delete Connection to Server" msgstr "Szerverrel létesített kapcsolat törlése" -#: freedombox/modules/wireguard/views.py:384 +#: freedombox/modules/wireguard/views.py:335 msgid "Server deleted." msgstr "Szerver törölve." -#: freedombox/modules/wireguard/views.py:396 +#: freedombox/modules/wireguard/views.py:347 #, fuzzy #| msgid "Password changed successfully." msgid "WireGuard server started successfully." msgstr "A jelszó módosítása sikeres." -#: freedombox/modules/wireguard/views.py:400 +#: freedombox/modules/wireguard/views.py:351 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -11799,6 +11809,26 @@ msgstr "" msgid "Gujarati" msgstr "Gudzsaráti" +#, fuzzy +#~| msgid "Key Import Date" +#~ msgid "Important:" +#~ msgstr "Kulcs importálásának dátuma" + +#, fuzzy +#~| msgid "configuration failed" +#~ msgid "Client configuration file" +#~ msgstr "konfiguráció sikertelen" + +#, fuzzy +#~| msgid "warning" +#~ msgid "Warning:" +#~ msgstr "figyelmeztetés" + +#, fuzzy +#~| msgid "Client with public key already exists" +#~ msgid "Client already exists" +#~ msgstr "Ezzel a nyilvános kulccsal már létezik kliens" + #~ msgid "Use IPv6 instead of IPv4" #~ msgstr "IPv6 használata IPv4 helyett" diff --git a/freedombox/locale/id/LC_MESSAGES/django.po b/freedombox/locale/id/LC_MESSAGES/django.po index 4dbcc29c1..e1341a871 100644 --- a/freedombox/locale/id/LC_MESSAGES/django.po +++ b/freedombox/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-09-15 00:09+0000\n" +"POT-Creation-Date: 2026-10-07 02:24+0000\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Indonesian \n" "Language-Team: Italian \n" "Language-Team: Japanese \n" "Language-Team: Kannada \n" "Language-Team: Lao \n" "Language-Team: Lithuanian \n" "Language-Team: Latvian \n" "Language-Team: Norwegian Bokmål \n" "Language-Team: Dutch \n" "Language-Team: Polish \n" "Language-Team: Portuguese \n" "Language-Team: Russian \n" "Language-Team: Sinhala \n" "Language-Team: Slovenian SSH key-based authentication is not yet " #~ "possible." diff --git a/freedombox/locale/sq/LC_MESSAGES/django.po b/freedombox/locale/sq/LC_MESSAGES/django.po index 0957de60b..33a292fde 100644 --- a/freedombox/locale/sq/LC_MESSAGES/django.po +++ b/freedombox/locale/sq/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-09-15 00:09+0000\n" +"POT-Creation-Date: 2026-10-07 02:24+0000\n" "PO-Revision-Date: 2026-06-03 05:01+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" "Language-Team: Serbian SSH key-based authentication is not yet " #~ "possible." diff --git a/freedombox/locale/sv/LC_MESSAGES/django.po b/freedombox/locale/sv/LC_MESSAGES/django.po index 86e6fb69e..b21b67892 100644 --- a/freedombox/locale/sv/LC_MESSAGES/django.po +++ b/freedombox/locale/sv/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-09-15 00:09+0000\n" +"POT-Creation-Date: 2026-10-07 02:24+0000\n" "PO-Revision-Date: 2026-09-09 16:47+0000\n" "Last-Translator: Daniel Nylander \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" +"POT-Creation-Date: 2026-10-07 02:24+0000\n" +"PO-Revision-Date: 2026-09-21 11:51+0000\n" +"Last-Translator: QuietCedar47 " +"\n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 2026.9.dev0\n" +"X-Generator: Weblate 2026.10.dev0\n" #: freedombox/config.py:103 #, python-brace-format @@ -4174,9 +4174,9 @@ msgid "" "look like @username:%(domain_name)s. Changing the domain name " "requires uninstalling and reinstalling the app which will wipe app's data." msgstr "" -"Matrix 服务器域名已设置为 %(domain_name)s 。用户 ID 看起来像是这样 " +"Matrix 服务器域名已设置为 %(domain_name)s 。用户 ID 看起来像是这样 " "@username:%(domain_name)s。更改域名需要卸载并重新安装该应用,这会抹" -"去应用的数据。" +"去应用的数据。" #: freedombox/modules/matrixsynapse/templates/matrix-synapse.html:28 msgid "" @@ -5623,7 +5623,6 @@ msgstr "附近的无线网络" #: freedombox/modules/networks/templates/connections_list.html:20 #: freedombox/modules/networks/views.py:420 #: freedombox/modules/wireguard/templates/wireguard_add_server.html:19 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:82 msgid "Add Connection" msgstr "添加连接" @@ -7889,7 +7888,7 @@ msgid "Go to Power" msgstr "转到电源" #: freedombox/modules/storage/__init__.py:447 -#: freedombox/modules/storage/tests/test_storage.py:407 +#: freedombox/modules/storage/tests/test_storage.py:406 msgid "grub package is configured" msgstr "" @@ -9074,7 +9073,6 @@ msgstr "删除 passkey" #: freedombox/modules/users/templates/users_passkeys.html:155 #: freedombox/modules/users/templates/users_update.html:72 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:84 msgid "Cancel" msgstr "取消" @@ -9188,8 +9186,7 @@ msgstr "不是有效的 IP 地址。" #: freedombox/modules/wireguard/forms.py:69 #: freedombox/modules/wireguard/templates/wireguard.html:29 #: freedombox/modules/wireguard/templates/wireguard.html:57 -#: freedombox/modules/wireguard/templates/wireguard.html:125 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:32 +#: freedombox/modules/wireguard/templates/wireguard.html:127 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:24 msgid "Public Key" msgstr "公钥" @@ -9200,31 +9197,31 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:83 +#: freedombox/modules/wireguard/forms.py:78 msgid "Endpoint of the server" msgstr "" -#: freedombox/modules/wireguard/forms.py:84 +#: freedombox/modules/wireguard/forms.py:79 msgid "" "Domain name and port in the form \"ip:port\". Example: " "demo.wireguard.com:12912 ." msgstr "" -#: freedombox/modules/wireguard/forms.py:89 +#: freedombox/modules/wireguard/forms.py:84 msgid "Public key of the server" msgstr "服务器的公钥" -#: freedombox/modules/wireguard/forms.py:90 +#: freedombox/modules/wireguard/forms.py:85 msgid "" "Provided by the server operator, a long string of characters. Example: " "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:95 +#: freedombox/modules/wireguard/forms.py:90 msgid "Client IP address provided by server" msgstr "服务器提供的客户端 IP 地址" -#: freedombox/modules/wireguard/forms.py:97 +#: freedombox/modules/wireguard/forms.py:92 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: " @@ -9233,11 +9230,11 @@ msgid "" "Examples: 10.68.12.43/24 or 10.68.12.43/255.255.255.0." msgstr "" -#: freedombox/modules/wireguard/forms.py:106 +#: freedombox/modules/wireguard/forms.py:101 msgid "Private key of this machine" msgstr "" -#: freedombox/modules/wireguard/forms.py:107 +#: freedombox/modules/wireguard/forms.py:102 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, " @@ -9245,22 +9242,22 @@ msgid "" "MConEJFIg6+DFHg2J1nn9SNLOSE9KR0ysdPgmPjibEs= ." msgstr "" -#: freedombox/modules/wireguard/forms.py:115 +#: freedombox/modules/wireguard/forms.py:110 msgid "Pre-shared key" msgstr "" -#: freedombox/modules/wireguard/forms.py:116 +#: freedombox/modules/wireguard/forms.py:111 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 "" -#: freedombox/modules/wireguard/forms.py:122 +#: freedombox/modules/wireguard/forms.py:117 msgid "Use this connection to send all outgoing traffic" msgstr "" -#: freedombox/modules/wireguard/forms.py:124 +#: freedombox/modules/wireguard/forms.py:119 msgid "Typically checked for a VPN service through which all traffic is sent." msgstr "" @@ -9286,7 +9283,6 @@ msgid "Value" msgstr "" #: freedombox/modules/wireguard/templates/wireguard.html:33 -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:27 msgid "Endpoint(s)" msgstr "端点" @@ -9308,7 +9304,7 @@ msgid "Allowed IPs" msgstr "" #: freedombox/modules/wireguard/templates/wireguard.html:59 -#: freedombox/modules/wireguard/templates/wireguard.html:126 +#: freedombox/modules/wireguard/templates/wireguard.html:128 msgid "Last Connected Time" msgstr "上次连接时间" @@ -9317,57 +9313,56 @@ msgstr "上次连接时间" msgid "No peers configured to connect to this %(box_name)s yet." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:88 +#: freedombox/modules/wireguard/templates/wireguard.html:90 msgid "Auto add a new peer" msgstr "自动添加新对端" -#: freedombox/modules/wireguard/templates/wireguard.html:92 +#: freedombox/modules/wireguard/templates/wireguard.html:93 msgid "Add Client Automatically" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:94 +#: freedombox/modules/wireguard/templates/wireguard.html:96 msgid "Add a new peer" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:98 -#: freedombox/modules/wireguard/views.py:59 -#: freedombox/modules/wireguard/views.py:146 +#: freedombox/modules/wireguard/templates/wireguard.html:100 +#: freedombox/modules/wireguard/views.py:62 msgid "Add Allowed Client" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:103 +#: freedombox/modules/wireguard/templates/wireguard.html:105 msgid "WireGuard server not started yet." msgstr "WireGuard 服务器还未启动。" -#: freedombox/modules/wireguard/templates/wireguard.html:107 #: freedombox/modules/wireguard/templates/wireguard.html:109 +#: freedombox/modules/wireguard/templates/wireguard.html:111 msgid "Start WireGuard Server" msgstr "启动 WireGuard 服务器" -#: freedombox/modules/wireguard/templates/wireguard.html:115 +#: freedombox/modules/wireguard/templates/wireguard.html:117 msgid "As a Client" msgstr "作为客户端" -#: freedombox/modules/wireguard/templates/wireguard.html:117 +#: freedombox/modules/wireguard/templates/wireguard.html:119 #, python-format msgid "Servers that %(box_name)s will connect to:" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:124 +#: freedombox/modules/wireguard/templates/wireguard.html:126 #: freedombox/modules/wireguard/templates/wireguard_delete_server.html:20 msgid "Endpoint" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:148 +#: freedombox/modules/wireguard/templates/wireguard.html:150 msgid "No connections to remote servers are configured yet." msgstr "尚未配置到远程服务器的连接。" -#: freedombox/modules/wireguard/templates/wireguard.html:158 +#: freedombox/modules/wireguard/templates/wireguard.html:160 msgid "Add a new server" msgstr "" -#: freedombox/modules/wireguard/templates/wireguard.html:162 -#: freedombox/modules/wireguard/views.py:288 +#: freedombox/modules/wireguard/templates/wireguard.html:164 +#: freedombox/modules/wireguard/views.py:239 msgid "Add Connection to Server" msgstr "添加到服务器的连接" @@ -9379,54 +9374,82 @@ msgstr "" msgid "Add Client" msgstr "添加客户端" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:23 -msgid "IP Address" -msgstr "IP 地址" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:15 +#, fuzzy +#| msgid "Select verified SSH public key" +msgid "New client added with public key:" +msgstr "选择经过验证的 SSH 公钥" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:36 -msgid "Private Key" -msgstr "私钥" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 -msgid "Click to reveal" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:47 -msgid "Important:" -msgstr "重要:" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:48 -msgid "Save the private key now. This page shows it only once!" -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:52 -msgid "Client configuration file" -msgstr "客户端配置文件" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:54 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:19 msgid "" -"Download the configuration file (.conf) for manual import, or use the QR " -"code to import directly from your WireGuard mobile app." +"To configure the client app, download the configuration file (.conf) for " +"import, scan the QR code, or use the parameters to configure from scratch. " +"This information can't be shown again. Be sure to get it before navigating " +"away from this page. Keep this information confidential." msgstr "" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:60 -msgid "Warning:" -msgstr "警告:" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:28 +#, fuzzy +#| msgid "Serving Domains" +msgid "Using domain:" +msgstr "服务域" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:61 -msgid "" -"Treat this QR code like a password. Anyone who scans it can gain VPN access " -"if the connection is enabled." -msgstr "" - -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:33 msgid "Download config file" msgstr "下载配置文件" -#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:76 -msgid "Show QR Code" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:39 +#, fuzzy +#| msgid "Show QR Code" +msgid "Show QR code" msgstr "显示二维码" +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:45 +#, fuzzy +#| msgid "Show connection %(name)s" +msgid "Show config parameters" +msgstr "显示连接 %(name)s" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:55 +#, fuzzy +#| msgid "Public Key" +msgid "Client Public Key" +msgstr "公钥" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:59 +#, fuzzy +#| msgid "Private Key" +msgid "Client Private Key" +msgstr "私钥" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:63 +#, fuzzy +#| msgid "IP Address" +msgid "Client IP Address" +msgstr "IP 地址" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:67 +#, fuzzy +#| msgid "Current DNS Server" +msgid "Client DNS Server" +msgstr "当前 DNS 服务器" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:71 +#, fuzzy +#| msgid "Server public key:" +msgid "Server/Peer Public Key" +msgstr "服务器公钥:" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:75 +#, fuzzy +#| msgid "Server endpoint:" +msgid "Server/Peer Endpoint" +msgstr "服务器端点:" + +#: freedombox/modules/wireguard/templates/wireguard_auto_add_client.html:79 +msgid "Server/Peer Allowed IPs" +msgstr "" + #: freedombox/modules/wireguard/templates/wireguard_delete_client.html:14 msgid "Are you sure that you want to delete this client?" msgstr "你确定要删除此客户端吗?" @@ -9515,77 +9538,74 @@ msgstr "" msgid "All outgoing traffic is sent using this connection:" msgstr "" -#: freedombox/modules/wireguard/views.py:54 -#: freedombox/modules/wireguard/views.py:141 +#: freedombox/modules/wireguard/views.py:57 msgid "Added new client." msgstr "" -#: freedombox/modules/wireguard/views.py:79 -#: freedombox/modules/wireguard/views.py:248 +#: freedombox/modules/wireguard/views.py:82 +#: freedombox/modules/wireguard/views.py:199 msgid "Client with public key already exists" msgstr "已存在有公钥的客户端" -#: freedombox/modules/wireguard/views.py:186 -msgid "Session expired. Please try again." -msgstr "" +#: freedombox/modules/wireguard/views.py:137 +#, fuzzy +#| msgid "Client deleted." +msgid "Client Added" +msgstr "客户端已删除。" -#: freedombox/modules/wireguard/views.py:189 -msgid "Client already exists" -msgstr "客户端已存在" - -#: freedombox/modules/wireguard/views.py:202 +#: freedombox/modules/wireguard/views.py:153 msgid "Allowed Client" msgstr "允许的客户端" -#: freedombox/modules/wireguard/views.py:224 +#: freedombox/modules/wireguard/views.py:175 msgid "Updated client." msgstr "已更新客户端。" -#: freedombox/modules/wireguard/views.py:229 +#: freedombox/modules/wireguard/views.py:180 msgid "Modify Client" msgstr "更改客户端" -#: freedombox/modules/wireguard/views.py:262 +#: freedombox/modules/wireguard/views.py:213 msgid "Delete Allowed Client" msgstr "删除允许的客户端" -#: freedombox/modules/wireguard/views.py:271 +#: freedombox/modules/wireguard/views.py:222 msgid "Client deleted." msgstr "客户端已删除。" -#: freedombox/modules/wireguard/views.py:273 +#: freedombox/modules/wireguard/views.py:224 msgid "Client not found" msgstr "未找到客户端" -#: freedombox/modules/wireguard/views.py:283 +#: freedombox/modules/wireguard/views.py:234 msgid "Added new server." msgstr "添加新服务器。" -#: freedombox/modules/wireguard/views.py:304 +#: freedombox/modules/wireguard/views.py:255 msgid "Connection to Server" msgstr "连接到服务器" -#: freedombox/modules/wireguard/views.py:322 +#: freedombox/modules/wireguard/views.py:273 msgid "Updated server." msgstr "已更新服务器。" -#: freedombox/modules/wireguard/views.py:327 +#: freedombox/modules/wireguard/views.py:278 msgid "Modify Connection to Server" msgstr "修改到服务器的连接" -#: freedombox/modules/wireguard/views.py:365 +#: freedombox/modules/wireguard/views.py:316 msgid "Delete Connection to Server" msgstr "删除与服务器的连接" -#: freedombox/modules/wireguard/views.py:384 +#: freedombox/modules/wireguard/views.py:335 msgid "Server deleted." msgstr "服务器已删除。" -#: freedombox/modules/wireguard/views.py:396 +#: freedombox/modules/wireguard/views.py:347 msgid "WireGuard server started successfully." msgstr "WireGuard 服务器启动成功。" -#: freedombox/modules/wireguard/views.py:400 +#: freedombox/modules/wireguard/views.py:351 msgid "Failed to start WireGuard server: {}" msgstr "" @@ -10221,6 +10241,18 @@ msgstr "" msgid "Gujarati" msgstr "古吉拉特语" +#~ msgid "Important:" +#~ msgstr "重要:" + +#~ msgid "Client configuration file" +#~ msgstr "客户端配置文件" + +#~ msgid "Warning:" +#~ msgstr "警告:" + +#~ msgid "Client already exists" +#~ msgstr "客户端已存在" + #~ msgid "Use IPv6 instead of IPv4" #~ msgstr "使用IPv6而不是IPv4" diff --git a/freedombox/locale/zh_Hant/LC_MESSAGES/django.po b/freedombox/locale/zh_Hant/LC_MESSAGES/django.po index 31f8dc100..93583ab47 100644 --- a/freedombox/locale/zh_Hant/LC_MESSAGES/django.po +++ b/freedombox/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-09-15 00:09+0000\n" +"POT-Creation-Date: 2026-10-07 02:24+0000\n" "PO-Revision-Date: 2025-02-07 12:01+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional Han script) = 7.0 - return psutil._common.sdiskpart(*args[:-2]) + return psutil._common.sdiskpart(*args) + except AttributeError: + # psutil >= 7.2 + return psutil._ntuples.sdiskpart(*args) disk_partitions.return_value = [ - partition('/dev/root', '/', 'btrfs', 'rw,nosuid', 42, 42), - partition('/dev/root', '/foo', 'btrfs', 'rw', 321, 321), - partition('/dev/foo', '/bar', 'extfs', 'ro', 123, 123) + partition('/dev/root', '/', 'btrfs', 'rw,nosuid'), + partition('/dev/root', '/foo', 'btrfs', 'rw'), + partition('/dev/foo', '/bar', 'extfs', 'ro') ] assert not storage.is_partition_read_only('/') assert not storage.is_partition_read_only('/foo') diff --git a/freedombox/modules/wireguard/forms.py b/freedombox/modules/wireguard/forms.py index d0515bc15..fa480c2d6 100644 --- a/freedombox/modules/wireguard/forms.py +++ b/freedombox/modules/wireguard/forms.py @@ -72,11 +72,6 @@ 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( @@ -127,30 +122,29 @@ class AddServerForm(forms.Form): 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': '', - } + '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': '', - } + '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_interface = ipaddress.ip_interface( - self.cleaned_data['ip_address_and_network'] - ) + self.cleaned_data['ip_address_and_network']) if self.cleaned_data['default_route']: allowed_ips = ['0.0.0.0/0', '::/0'] diff --git a/freedombox/modules/wireguard/templates/wireguard.html b/freedombox/modules/wireguard/templates/wireguard.html index 2b3f7b259..ac54d721a 100644 --- a/freedombox/modules/wireguard/templates/wireguard.html +++ b/freedombox/modules/wireguard/templates/wireguard.html @@ -85,18 +85,20 @@ {% else %}
diff --git a/freedombox/modules/wireguard/templates/wireguard_auto_add_client.html b/freedombox/modules/wireguard/templates/wireguard_auto_add_client.html index 7fb5ddad8..ffd36698c 100644 --- a/freedombox/modules/wireguard/templates/wireguard_auto_add_client.html +++ b/freedombox/modules/wireguard/templates/wireguard_auto_add_client.html @@ -11,78 +11,77 @@

{{ title }}

-
- {% csrf_token %} +
+ {% trans "New client added with public key:" %} {{ client_pubkey }} +
- {{ form|bootstrap }} - - {% if client_privkey %} -
- - - - - - - - - - - - - - - - - -
{% trans "IP Address" %}{{ next_ip }}
{% trans "Endpoint(s)" %}
{% for endpoint in endpoints %}{{ endpoint }}
-{% endfor %}
{% 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. + To configure the client app, download the configuration file (.conf) for + import, scan the QR code, or use the parameters to configure from + scratch. This information can't be shown again. Be sure to get it before + navigating away from this page. Keep this information confidential. {% 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 %} -

-
- +

-
- - - {% trans "Cancel" %} + {% for domain, domain_info in domains.items %} +

{% trans "Using domain:" %} {{ domain }}

+
+ + {% icon 'download' %} + {% trans "Download config file" %} + +
- +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{% trans "Client Public Key" %}{{ client_pubkey }}
{% trans "Client Private Key" %}{{ client_privkey }}
{% trans "Client IP Address" %}{{ next_ip }}
{% trans "Client DNS Server" %}10.84.0.1
{% trans "Server/Peer Public Key" %}{{ server_pubkey }}
{% trans "Server/Peer Endpoint" %}{{ domain_info.endpoint }}
{% trans "Server/Peer Allowed IPs" %}0.0.0.0/0,::0/0
+
+ {% endfor %} + {% endblock %} diff --git a/freedombox/modules/wireguard/tests/test_functional.py b/freedombox/modules/wireguard/tests/test_functional.py index 5a58a7cc1..88b660862 100644 --- a/freedombox/modules/wireguard/tests/test_functional.py +++ b/freedombox/modules/wireguard/tests/test_functional.py @@ -139,35 +139,23 @@ class TestWireguardApp(functional.BaseAppTests): with functional.wait_for_page_update(session_browser): session_browser.find_by_css('.btn-auto-add-client').first.click() + # Verify that a new client was added + assert session_browser.find_by_css('.alert-client-added') + + # Read public key + session_browser.find_by_css( + '.btn-show-config-parameters').first.click() client_pubkey = session_browser.find_by_css( - '.pubkey-val').first.text.strip() + '.client-public-key').first.text.strip() + assert client_pubkey - # 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 private key is shown + assert session_browser.find_by_css('.client-private-key').first.text - # 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")) + # Assert that at least one of each buttons are present + assert session_browser.find_by_css('.btn-download-config-file') + assert session_browser.find_by_css('.btn-show-qr-code') + assert session_browser.find_by_css('.btn-show-config-parameters') # Clean up self._delete_client(session_browser, client_pubkey) diff --git a/freedombox/modules/wireguard/urls.py b/freedombox/modules/wireguard/urls.py index 07c287c1b..0ff51fefa 100644 --- a/freedombox/modules/wireguard/urls.py +++ b/freedombox/modules/wireguard/urls.py @@ -13,14 +13,8 @@ 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/auto-add/$', views.auto_add_client_view, + name='auto-add-client'), 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/freedombox/modules/wireguard/utils.py b/freedombox/modules/wireguard/utils.py index 9032e73ed..29cfe5d1f 100644 --- a/freedombox/modules/wireguard/utils.py +++ b/freedombox/modules/wireguard/utils.py @@ -218,7 +218,8 @@ def add_server(settings): found = False for _, server in info['my_client']['servers'].items(): for _, peer in server['peers'].items(): - if peer['public_key'] == public_key: + if 'public_key' in peer and peer[ + 'public_key'] == public_key: found = True break @@ -320,22 +321,17 @@ def _get_next_available_ip_address(settings): def _server_connection(): - """Return a server connection. Create one if necessary.""" + """Return a server connection.""" setting_name = nm.SETTING_WIREGUARD_SETTING_NAME - connection = network.get_connection_by_interface_name('wg0') - if not connection: - setup_server() - for _ in range(10): - # XXX: Improve this waiting by doing a synchronous D-Bus operation to - # add network manager connection instead. - time.sleep(1) connection = network.get_connection_by_interface_name('wg0') if connection: break + time.sleep(1) + if not connection: - raise RuntimeError('Unable to create a server connection.') + raise RuntimeError('Unable to get a server connection.') # Retrieve secrets so that when the connection is changed, secrets are # preserved properly. @@ -368,7 +364,7 @@ def add_client(public_key): if info['my_server'] and info['my_server']['peers']: found = False for _, peer in info['my_server']['peers'].items(): - if peer['public_key'] == public_key: + if 'public_key' in peer and peer['public_key'] == public_key: found = True break @@ -399,7 +395,7 @@ def remove_client(public_key): if info['my_server']: found = False for _, peer in info['my_server']['peers'].items(): - if peer['public_key'] == public_key: + if 'public_key' in peer and peer['public_key'] == public_key: found = True break diff --git a/freedombox/modules/wireguard/views.py b/freedombox/modules/wireguard/views.py index 085d47ebd..17e929ced 100644 --- a/freedombox/modules/wireguard/views.py +++ b/freedombox/modules/wireguard/views.py @@ -3,15 +3,18 @@ Views for WireGuard application. """ +import base64 import urllib.parse from io import BytesIO from django.contrib import messages from django.contrib.messages.views import SuccessMessageMixin -from django.http import Http404, HttpResponse +from django.http import Http404 from django.shortcuts import redirect +from django.template.response import TemplateResponse from django.urls import reverse_lazy from django.utils.translation import gettext as _ +from django.views.decorators.http import require_POST from django.views.generic import FormView, TemplateView, View from freedombox.modules.names.components import DomainName @@ -82,114 +85,62 @@ class AddClientView(SuccessMessageMixin, FormView): return super().form_valid(form) -class SessionClientDataMixin: - """Shared session data loading for auto-client views.""" +def get_qr_code(config: str) -> bytes: + """Return a QR code in SVG format as a string.""" + import segno - 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') + qr_code = segno.make(config) + svg_buffer = BytesIO() + qr_code.save(svg_buffer, kind='svg', light='white', scale=5) - if not all([next_ip, privkey, pubkey, endpoint]): - raise Http404("Session expired") + return svg_buffer.getvalue() - return { - 'next_ip': next_ip, - 'privkey': privkey, - 'pubkey': pubkey, - 'endpoint': endpoint + +@require_POST +def auto_add_client_view(request): + """Add a new client automatically and show all the config information.""" + info = utils.get_info() + server_info = info['my_server'] + + if server_info: + domains = DomainName.list_names(filter_for_service='wireguard') + port = server_info.get('listen_port', 51820) + + # Generate key pair + client_privkey, client_pubkey = utils.generate_client_keypair() + + # Gather information + 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) + domains_info = {} + + # Prepare config and QR codes based on endpoint. + for domain in domains: + endpoint = f'{domain}:{port}' + config = utils.build_client_config(next_ip, client_privkey, + client_pubkey, endpoint) + qr_code = get_qr_code(config) + + domains_info[domain] = { + 'endpoint': endpoint, + 'qr_code': base64.b64encode(qr_code).decode(), + 'config': base64.b64encode(config.encode()).decode(), } - def get_client_config(self, request): - """Rebuild client config from session.""" - data = self.get_session_client_data(request) + # Add a new client + utils.add_client(client_pubkey) - return utils.build_client_config(data['next_ip'], data['privkey'], - data['pubkey'], data['endpoint']) - - -class ClientActionsView(SessionClientDataMixin, View): - action = None - - def get(self, request): - import segno - - config = self.get_client_config(request) - if self.action == 'download': - 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') - port = server_info.get('listen_port', 51820) - endpoints = [f'{domain}:{port}' for domain in domains] - - 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) - - # Add properties to template context - context['client_pubkey'] = client_pubkey - context['client_privkey'] = client_privkey - context['next_ip'] = next_ip - context['endpoints'] = endpoints - - # Store info on instance for reuse - self.request.session['client_pubkey'] = client_pubkey - except Exception as exception: - messages.warning('Client key generation failed: %s', exception) - - 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) + return TemplateResponse( + request, 'wireguard_auto_add_client.html', { + 'title': _('Client Added'), + 'server_pubkey': server_info['public_key'], + 'client_pubkey': client_pubkey, + 'client_privkey': client_privkey, + 'next_ip': next_ip, + 'domains': domains_info, + }) class ShowClientView(SuccessMessageMixin, TemplateView):