8179 Commits

Author SHA1 Message Date
James Valleroy
031bbb53cb
Release v26.11 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-17 19:45:01 -04:00
James Valleroy
4043799d18
locale: Update strings for translation
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-17 19:23:41 -04:00
Sunil Mohan Adapa
29eca5426d
views: Link to apps-add page from a tag click in app page
Tests:

- On Coturn app page, clicking on a tag redirects to Add New App page with tag
filter set to clicked tag.

- On Names app page, clicking on a tag redirects to system page with tag filter
set to clicked tag.

- On Operations page such as when installing an app, clicking on a tag redirects
to Add New App page with tag filter set to clicked tag.

- On Index page such when OpenVPN is clicked description for OpenVPN is shown.
Clicking on a tag in the description redirects to Add New App page with tag
filter set to clicked tag.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-17 19:19:05 -04:00
Sunil Mohan Adapa
18046ef736
firstboot: Link from next steps page to add apps page
- Instead of the apps page which will be empty on first boot.

Tests:

- On Next Steps page, click on apps link takes users to add apps page and not
apps page.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-17 19:19:02 -04:00
Sunil Mohan Adapa
2764c58c53
views: Add a separate page for adding new apps
- It avoids confusion with two separate app sections in a single page. The
sections/pages can be better titled.

- In future, we can style the apps page (with more status display) differently
from apps-add page (with more search and featured apps).

- Move page specific parts into individual pages instead of in the common
template cards.html.

- Add special message when there are no apps enabled and when there are no more
apps to enable.

- Drop show_disabled flag in cards template that is not needed anymore.

Tests:

- Unit tests work.

- Functional tests work on bepasty when starting with uninstalled, disabled, or
enabled states.

- Apps page shows special message when there are no apps enabled. It is
centered.

- Apps page shows 'Add new app' button with icon. Clicking it takes us to
apps-add page.

- Apps page does not have disabled apps list (even hidden).

- Disabled and uninstalled apps are not shown on apps page.

- Apps-add page shows special message when there are no more apps to be
installed or enabled (test by altering view code to have empty list of apps).

- Apps-add page shows list of apps that are disabled or uninstalled but not
enabled apps. It shows a title 'Add New App'.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-17 19:18:51 -04:00
Sunil Mohan Adapa
62deda0ec7
dynamicdns: Allow updating both IPv4 and IPv6 records together
- Change the IPv6 checkbox into an option to select from IPv4 only, IPv6 only,
or IPv4 and IPv6. Update functional tests.

- Add type hints everywhere.

- Separate out the generic URL update method to its own module. Add unit tests.

- Migrate old configuration to new configuration on first read.

- Store multiple IP addresses in the status. Support showing old status format
of single IP address as well. Show multiple IP addresses in the status table.

- Handle errors during update using exceptions for clearer code.

- For generic URL based updates, capture return code, stdout and stdin in error
message.

Tests:

- Adding a new GnuDIP domain leads to configuration setting ip_type = ipv4

- When adding a new dynamic domain, when generic option is selected IP Address
  Type is shown. When GnuDIP is selected, the field is hidden.

- IP Address Type field is as expected. Options and description are as expected.

- When a new domain is added for generic domain, the value of ip_type is set as
  expected. Changing the value to other values works. Configuration is updated
  as expected. Option values and description are as expected.

- The column for IP Address is now 'IP Addresses'. When multiple IP addresses
  are present in the status, they are shown in multiple lines in the tables as
  <pre>. When no IP addresses are present, a '-' is shown in the column.

- When generic domain update fails, subprocess failure code, stderr and stdout
  are shown in the error message.

- Unit tests work.

- Functional tests work.

- After 5 minute period, attempts are made to update the domain

- For GnuDIP and generic method:

  - IP address lookup works for IPv4 and IPv6.

  - IP address updates works for IPv4 (tested) and IPv6 (untested).

  - In 'both' configuration, when IPv6 update fails, IPv4 still succeeds.

  - Updates are skipped if the record is up-to-date.

  - Successful updates are performed otherwise.

  - Wrong password leads to proper error being shown.

- When the old status is stored, it is updated during read and proper status is
  shown.

- When configuration has old use_ipv6 key, then it is migrated when newer
  version of the service is started. True value is converted as 'ipv6', False
  value is converted as 'ipv4'. 'null' key is properly removed.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-15 08:49:43 -04:00
Sunil Mohan Adapa
ca1b54f3cf
dynamnicdns: Drop old migration code shipped in bookworm
All the users of the old ez-ipupdate client must have been migrated long ago as
the migration code was shipped in bookworm.

Tests:

- Service starts as expected.

- Re-running setup for the app works.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-15 08:49:38 -04:00
Pierfrancesco Passerini
72095dffec
Translated using Weblate (Italian)
Currently translated at 100.0% (1948 of 1948 strings)
2026-08-13 20:51:26 +02:00
Priit Jõerüüt
53e7fb013c
Translated using Weblate (Estonian)
Currently translated at 19.9% (389 of 1948 strings)
2026-08-11 10:51:27 +00:00
Coucouf
ba0b39c2a4
Translated using Weblate (French)
Currently translated at 100.0% (1948 of 1948 strings)
2026-08-11 10:51:24 +00:00
Sunil Mohan Adapa
5013c05d35
settings: Drop support for Django < 4.0
- Trixie has Django 4.2.28.

Tests:

- Unit tests pass on Trixie and Forky.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-08 10:03:46 -04:00
Sunil Mohan Adapa
f2e898090c
mypy: Add support for version 2.1
Tests:

- Unit tests pass.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-08 10:03:44 -04:00
Sunil Mohan Adapa
d2a959a277
tests: Use class methods for class scoped fixtures
Using class-scoped fixture as instance method is deprecated in pytest 9.1 and
support will be removed in 10.0.

See: https://docs.pytest.org/en/stable/deprecations.html#class-scoped-fixture-as-instance-method

Tests:

- Run functional tests for samba, matrixsynapse (unrelated failure), and
bepasty.

Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-08 10:03:39 -04:00
Sunil Mohan Adapa
841b0382e7
homeassistant: App is stable, remove experimental warning
- This app has been running on my FreedomBox without any problems with every day
usage for more than 6 months.

Tests:

- The app description does not show experimental message anymore. App page shows
up fine.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-08-08 09:09:42 -04:00
Jiří Podhorecký
2aaee483d4
Translated using Weblate (Czech)
Currently translated at 100.0% (1948 of 1948 strings)
2026-08-04 19:01:52 +02:00
Hosted Weblate user 54392
22ac98d6a7
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 60.9% (1188 of 1948 strings)
2026-08-02 05:01:53 +02:00
Burak Yavuz
a04c1c801d
Translated using Weblate (Turkish)
Currently translated at 100.0% (1948 of 1948 strings)
2026-07-30 12:01:59 +02:00
James Valleroy
4f419723b5
Release v26.10 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-07-28 22:48:47 -04:00
James Valleroy
ca8a64ec10
locale: Update strings for translation
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-07-28 22:27:31 -04:00
Sunil Mohan Adapa
1e2fb8171f
first_boot: Move first wizard secret generation to this app
- Generating files in postinst script makes working with image-based systems
harder as postinst scripts are not run when booting from a pristine image. So,
move this to first_boot app's setup() method.

- This means that first wizard secret is no longer displayed during package
installation. This is a loss in usability, but might be acceptable:

  - We want to reduce the number of dialog box messages shown to the user during
  the installation of FreedomBox as a blend in Debian installer. Along with this
  change, if we migrate away from LDAP, then no messages will be shown anymore.

  - When users are installing using Debian installer, they don't have access to
  console to note down the secret. They can only note down on a physical medium.
  This is not the best way. Most of the time when I installed on machines, I
  just looked at the secret file later.

  - It is not expected that user will loose root access to the machine on which
  they installed 'freedombox' package (manually or through Debian installer)
  before they can type in the secret into the first wizard. Earlier, we had
  restrictions on the type of users who can login to the console and this could
  have happened.

  - We can eliminate a lintian warning that we are showing messages in a dialog
  in the postinst script instead of configure script.

Tests:

- Unit tests work.

- Building Debian package with changes works.

- Lintian warning about debconf has been eliminated.

- On a fresh Debian Trixie machine, installing the newly built Debian package
succeeds. It does not show first wizard secret related message. When web
interface is accessed, secret is asked. Skipping the secret is not possible.
Even before the creation of the secret file.

- Providing incorrect secret leads to error message. Secret file can be read by
root. The file is owned by plinth:plinth. The file has 0400 permissions.

- The secret file contains a newline at the file but entering the secret without
the newline character works.

- The secret contains uppercase and lowercase ASCII characters and digits. The
secret is 16 chars in length.

- Incrementing the version number of first_boot app does not lead to change in
the secret file contents.

- The message in the first wizard secret form is as expected.

- Building a disk image with newly built Debian package works. When the image is
booted, it does not ask for first wizard secret.

- When an existing machine is upgraded, if it is a disk image, first wizard
secret file is not created and first wizard is not shown to the user.

- When an existing machine is upgraded, if it is not a disk image, first wizard
secret file is not changed and first wizard is not shown to the user.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
[jvalleroy: Correct comment]
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-07-28 22:23:11 -04:00
Sunil Mohan Adapa
485391620b
ssh: Don't fail on page load when SSH host key can't be read
Closes: #2575.

Tests:

- 'touch /etc/ssh/ssh_host_dsa_key.pub'. Try to load the SSH app page. It fails.
With the patch, it succeeds. A warning message is printed about failing to read
the key with proper returncode, stdout, and stderr.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-07-26 10:05:26 -04:00
Sunil Mohan Adapa
0ab9be2ae0
log: Set simpler syslog identifier instead of full binary path
Tests:

- When watching journal using 'sudo freedombox-logs' command, the syslog
identifier for main service is 'freedombox' and for privileged service is
'freedombox-privileged'.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-07-26 09:53:01 -04:00
reducedradius
f38f29e9e3
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 61.1% (1187 of 1942 strings)
2026-07-20 15:01:23 +02:00
Frederico Gomes
5a00d05cfe
apps: Change header title from Disabled to Available for install
Closes #1633.

[sunil: Move the button to the top of the apps page]
[sunil: Drop additional div nesting for 'available for install' section]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-07-14 15:37:46 -07:00
James Valleroy
10069c4e5d
tor, torproxy: Avoid error if defaults file missing during uninstall
See:
https://discuss.freedombox.org/t/error-when-uninstalling-tor-and-tor-proxy/4295

sunil: Use pathlib.Path.unlink()

Tests:

- Install Tor and Tor Proxy. Uninstall both. Uninstall is succesful.

- Install Tor and Tor Proxy. Manually delete
  /var/run/tor-instances/*.defaults. Uninstall both apps. Uninstall is
  successful. A warning is printed in the logs.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-07-14 14:53:16 -07:00
Coucouf
fce97a871a
Translated using Weblate (French)
Currently translated at 100.0% (1942 of 1942 strings)
2026-07-06 17:01:25 +02:00
Frederico Gomes
51ce0c4404
luanti: Add more detail to description
Sunil:

- Simplify installation of Luanti client into a paragraph. Merge information
about default port into this paragraph.

- Minor formatting and punctuation.

- Drop format_lazy calls where not needed.

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-06-29 10:34:00 -07:00
Dietmar
620b774d51
Translated using Weblate (German)
Currently translated at 99.1% (1926 of 1942 strings)
2026-06-28 16:01:21 +00:00
bittin1ddc447d824349b2
90360af9b7
Translated using Weblate (Swedish)
Currently translated at 100.0% (1942 of 1942 strings)
2026-06-22 10:01:22 +02:00
ℂ𝕠𝕠𝕠𝕝 (𝕘𝕚𝕥𝕙𝕦𝕓.𝕔𝕠𝕞/ℂ𝕠𝕠𝕠𝕝)
614a4fa5b6
Translated using Weblate (Latvian)
Currently translated at 2.4% (47 of 1942 strings)
2026-06-18 11:01:18 +02:00
James Valleroy
350466940f
Release v26.9.1 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-06-15 20:46:51 -04:00
James Valleroy
ceaccd7baf
wireguard: Get config for both download and qr actions
Re-arrange imports

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-06-15 20:15:14 -04:00
James Valleroy
629cc866b6
wireguard: Move segno import inside method
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-06-15 20:15:14 -04:00
Sunil Mohan Adapa
efcdc8cb5c
matrixsynapse: Allow installing new dependencies
Fixes: #2556

Should be merged after fix for https://bugs.debian.org/1122841 is in unstable.

- This fixes issue with Matrix Synapse app not being installable from current
unstable.

- matrix-synapse package depends on older version of python3-typing-extensions.
This causes the daemon to fail during startup when older version is installed.
This was reported as https://bugs.debian.org/1122841. After this bug is fixed
and a newer version of matrix-synapse is uploaded, the patch will work as
expected. An alternative was to allow unattended-upgrades to upgrade
python3-typing-extensions from unstable, but has to be done very carefully and
with a lot of testing.

Tests:

- Install Matrix Synapse apps works. This request installation of the latest
version python3-typing-extensions from unstable. The daemon is running properly
after installation.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-06-15 20:12:24 -04:00
Coucouf
0188ad38f7
Translated using Weblate (French)
Currently translated at 100.0% (1942 of 1942 strings)
2026-06-13 22:01:20 +02:00
Pierfrancesco Passerini
1086d52851
Translated using Weblate (Italian)
Currently translated at 100.0% (1942 of 1942 strings)
2026-06-13 22:01:17 +02:00
Pierfrancesco Passerini
3616ceb68d
Translated using Weblate (Italian)
Currently translated at 99.6% (1936 of 1942 strings)
2026-06-08 13:01:02 +00:00
Jiří Podhorecký
274dabb741
Translated using Weblate (Czech)
Currently translated at 100.0% (1942 of 1942 strings)
2026-06-04 20:01:02 +02:00
Besnik Bleta
9d24b4161a
Translated using Weblate (Albanian)
Currently translated at 99.6% (1936 of 1942 strings)
2026-06-03 05:01:05 +00:00
Burak Yavuz
d9a825ee36
Translated using Weblate (Turkish)
Currently translated at 100.0% (1942 of 1942 strings)
2026-06-03 05:01:03 +00:00
大王叫我来巡山
76efffb4e9
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 60.9% (1184 of 1942 strings)
2026-06-03 05:01:02 +00:00
James Valleroy
2590661fc8
Release v26.9 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-06-01 21:20:28 -04:00
James Valleroy
88e886046f
locale: Update translation strings
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-06-01 20:52:26 -04:00
Frederico Gomes
ad1b420397
wireguard: Enable FB to connect to a server using IPv6
This MR enables FreedomBox to connect as a "client" to a WireGuard
"server" using IPv6.

- Validate IPv4/6 with ip_interface
- Created helper functions to build NM settings for IPv4/6
- Modify get_settings to include settings for either IP version 4 or 6
- Created helper function to get NM address info
- Modify get_nm_info to work with IPv4 and IPv6
- Modified tests to use validate_ip_address_with_network
- Added IPv6 valid and invalid patterns to tests

Tested:

- IPv4 works unchanged
- IPv6 parsing + NM settings generation works
- IPv6 display in Show Server UI

Not tested:

- Needs IPv6 WireGuard server for full connectivity test

Closes: #1762

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-05-26 18:41:20 -04:00
Frederico Gomes
ea48448a72
wireguard: Added functional test for auto add client flow
Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-05-23 08:55:51 -04:00
Frederico Gomes
050a5366c1
wireguard: Bump version
Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-05-23 08:55:48 -04:00
Frederico Gomes
bc34a50a24
wireguard: Include python3-segno in app packages
Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-05-23 08:55:46 -04:00
Frederico Gomes
941a597bc9
wireguard: Add security warning in template
Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-05-23 08:55:38 -04:00
Frederico Gomes
5f25fc56a5
wireguard: Create URL for client config QR action
Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-05-23 08:55:34 -04:00
Frederico Gomes
fa4e6002b3
wireguard: Add Show QR Code button
Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-05-23 08:55:31 -04:00