10174 Commits

Author SHA1 Message Date
Sunil Mohan Adapa
e21ab91b21
backups: Create .ssh folder before creating SSH key
- As a safe guard although it should exist because of a prior verification of
SSH key.

- Minor refactor to make the method flatter.

Tests:

- Remove /var/lib/plinth/.ssh and visit add remote repository form. The public
key is displayed in the form. The files in /var/lib/plinth/.ssh are created with
expected permissions.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:42 -08:00
Sunil Mohan Adapa
dd0a0f56a6
backups: Simplify handling of migration to SSH keys
- Integrate SSH error handling into borg error handling.

- Move logic to migrate SSH keys into lower levels (Repository class) so that it
can performed at more instances such as when initializing repository. It also
provides better abstraction keeping the view logic simpler.

- Drop ability to mount repository using password. This is important next step
for mounting using systemd unit files.

- Use exceptions to eliminate return value checking.

- Create a special exception for exceptions raised during SSH operations. Raise
this at lower levels and handle these using the common error handler.

Tests:

- Adding a remote repository with key and password authentication works with and
without encryption. Adding works with SSH host key pre-verified works too.

- Trying to add a remote repository with incorrect passpharse fails with the
simplified error message. Redirect happens to add remote repository page. Error
message with SSH host key pre-verified works too. Repository is removed.

- Trying to provide wrong SSH password fails with a simplified error message.
Redirect happens to add remote repository page. Repository is removed.

- Mounting a repository after unmounting it works.

- Mounting a repository with SSH password in its configuration works. Migration
is performed and SSH password is replaced with SSH key file path.

- A schedule for a repository with SSH password runs successfully. An archive is
created. Migration is performed and SSH password is replaced with SSH key file
path.

- SSH identity files are created with plinth:plinth ownership. Private key file
is created with 0o600 permissions and public key file is created with 0o644
permissions.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:39 -08:00
Sunil Mohan Adapa
a7ef60015c
backups: Minor refactoring
Tests:

- Adding a remote repository with key and password authentication works with and
without encryption.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:36 -08:00
Sunil Mohan Adapa
2208a7b210
backups: tests: Simplify functional test using more classes
- This makes the functional test focus more on the repository that is added
rather than all remote repositories.

Tests:

- Functional tests for backups app works.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:33 -08:00
Sunil Mohan Adapa
ff7c3a53a5
backups: Tweak appearance of add remote location form
- Use bootstrapform templates where possible to reduce code.

- Fix incorrect tag for radio button for password authentication.

- Drop borders and instead:

  - Style each group as a section. This includes encryption section and
  repository path section.

  - Utilize the simplicity as passwords fields are not displayed.

- Retain <label> tag so that clicking on it works and it also easier for
accessibility tools.

Tests:

- The option for password authentication works are expected. The fields for
encryption passphrase, ssh password work as before.

- Clicking on form labels focuses the form element.

- Adding a repository with key and password authentication works with and
without encryption.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:30 -08:00
Sunil Mohan Adapa
7d3d930137
backups: Show/hide form elements instead of disabling for simplicity
- Unlike the case of network forms, for example, there is nothing the user could
infer from a disabled form element. If they see a disabled DNS field, they would
understand that it is an editable value but has been disabled due to other
option values. It is important to allow users to discover this. However, in case
of password fields, they are not needed to be shown to the user unless the
appropriate option is selected.

Tests:

- In the add remote repository form, selecting the authentication type radio
options shows and hides the password field. Selecting the value for encryption
type shows and hides the encryption password field.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:26 -08:00
Sunil Mohan Adapa
ad40072267
backups: Fix issue with Javascript in add remote location form
Tests:

- In remote repository add form, selecting radio options for authentication
types does not throw an error. The password field is shown/hidden as expected.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:23 -08:00
Sunil Mohan Adapa
305b1f01f5
backups: Avoid some repeated text in form help text
Tests:

- The remote repository add form shows form elements are updated as expected.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:20 -08:00
Sunil Mohan Adapa
58ecf9d3e4
actions, privileged_daemon: Drop some unused global statements
Tests:

- Make a privileged method throw and exception after spewing output to stdout
and stderr. The exception caught on the service daemon contains the expected
stdout and stderr messages.

- Sending SIGTERM to privileged daemon shuts down the daemon.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-05 22:33:17 -08:00
James Valleroy
3cb5d1a936
backups: Migrate to SSH key auth when mounting
Tests:

- On main branch, add a remote repository with SSH password. Unmount
  the remote location.

- Switch to branch with this change. Mount the remote location. Logs
  show that it is migrated from password to key authentication. Plinth
  database no longer contains password for this remote.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:33:14 -08:00
James Valleroy
8b9413c719
backups: Arrange form for adding remote location
- Group together related fields with borders.

- Display errors on form and fields.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:33:11 -08:00
James Valleroy
451e582c07
backups: Test adding/removing remote location
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:33:07 -08:00
James Valleroy
043bd44dec
backups: Use selected SSH credential for remote
- Use javascript to disable or enable password fields.

- If SSH key auth is selected, then try the connection.

- If SSH password auth is selected, then copy the key.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:33:04 -08:00
James Valleroy
3558a26b2f
backups: Use SSH key instead of password
- After copying the SSH client public key to the remote host, replace
  the SSH password credential with keyfile.

- Also use SSH key when checking that remote directory exists.

Tests:

- Add remote backup location "tester@localhost:~backups". Test various
  operations like create backup, download backup, unmount and
  mount. Confirm that SSH password is no longer present in plinth
  sqlite database.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:33:01 -08:00
James Valleroy
f689e1b3cf
backups: Copy SSH client public key to remote
Tests:

- In development VM, add a remote backup location of "tester@localhost:~/backups".
  Verify the SSH host key. plinth@freedombox key is listed in
  /home/tester/.ssh/authorized_keys.

- Remove the remote backup location, and delete /home/tester/.ssh/authorized_keys.
  Add the same remote backup location again. plinth@freedombox key is again
  listed in /home/tester/.ssh/authorized_keys.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:32:58 -08:00
James Valleroy
7fb41313cd
backups: Display SSH public key when adding remote
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:32:55 -08:00
James Valleroy
156d0b761f
backups: Generate SSH client key if needed
Tests:

- Click on Add Remote Backup Location. Logs show that SSH client key is
  generated. The private key is readable only by plinth user.

- Go back, and click on Add Remote Backup Location again. Logs show that SSH
  client key already exists.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-05 22:32:52 -08:00
Dietmar
33d05ef5be
Translated using Weblate (German)
Currently translated at 99.2% (1870 of 1885 strings)
2026-02-05 11:01:51 +00:00
Besnik Bleta
a1bd01f0c1
Translated using Weblate (Albanian)
Currently translated at 99.6% (1879 of 1885 strings)
2026-02-04 07:01:54 +01:00
Coucouf
ea4172a4c2
Translated using Weblate (French)
Currently translated at 100.0% (1885 of 1885 strings)
2026-02-04 07:01:52 +01:00
Burak Yavuz
0ee977a6b0
Translated using Weblate (Turkish)
Currently translated at 100.0% (1885 of 1885 strings)
2026-02-04 07:01:51 +01:00
大王叫我来巡山
6b7e518eed
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 61.3% (1157 of 1885 strings)
2026-02-04 07:01:49 +01:00
Sunil Mohan Adapa
196fcea328
ui: Add animation for notification dismissal
Tests:

- When a notification dismiss button is clicked, first it fades and collapses
at the same time.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2026-02-04 08:41:37 +05:30
Sunil Mohan Adapa
e37d26abee
ui: Refactor notification delete buttons to avoid repeating code
Tests:

- Through code changes, ensure that dist upgrade notification, updated to new
release notification, privacy notification, and app installed notification show
up. Ensure that they have correct hx- attributes and URL property for dismiss
button. Clicking dismiss button works as expected.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2026-02-04 08:40:43 +05:30
Joseph Nuthalapati
13a575017c
ui: Dismiss notifications without page reload
- Delete only the <li> of the notification using HTMX.
- Notifications list stays open. User can dismiss another notification.
- Decrement notification counter using JavaScript after removing
  notification from the list.
- Added HTMX to every kind of notification.
- Tested dismissing notifications from the top, middle and bottom of the
  list.

Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
[sunil: Update comment format in .js file]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-03 14:16:55 -08:00
James Valleroy
4e668c8a98
Release v26.3 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
v26.3
2026-02-02 20:42:43 -05:00
James Valleroy
367b2d9f79
doc: Fetch latest manual
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-02 20:41:02 -05:00
James Valleroy
7eac69a1f8
locale: Update translation strings
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-02 20:14:26 -05:00
大王叫我来巡山
d0a73142ac
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 61.4% (1155 of 1880 strings)
2026-02-03 02:07:19 +01:00
Pierfrancesco Passerini
48929b9d75
Translated using Weblate (Italian)
Currently translated at 100.0% (1880 of 1880 strings)
2026-02-03 02:07:18 +01:00
Burak Yavuz
f5e487569f
Translated using Weblate (Turkish)
Currently translated at 100.0% (1880 of 1880 strings)
2026-02-03 02:07:18 +01:00
Sunil Mohan Adapa
04ba96a467
ui: Use HTMX to update notifications on partial page updates
Tests:

- When app install button is clicked, the new page shows that app is being
installed. However, when app installation is complete, the notification still
shows that app is being installed. With the patch, the issues is resolved.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-02 14:38:11 -08:00
Joseph Nuthalapati
01cafafcda
ui: Use HTMX to eliminate full page reloads
HTMX implementation is limited to HTML and JS files. No changes to Python files.

Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
2026-02-02 13:49:51 -08:00
Joseph Nuthalapati
3c5f81ab8c
ui: Add HTMX as a dependency
Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
[sunil: Sort dependency in list]
[sunil: Adjust spacing]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-02 13:43:15 -08:00
Frederico Gomes
57f5105fd0
wireguard: show server endpoint on main app page
Display the WireGuard server endpoint (ip_address:listen_port)
alongside the public key on the main WireGuard page,
so users configuring clients can copy both values directly.

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
[sunil: Keep the docstring]
[sunil: Adjust markup to eliminate <p> inside <p>]
[sunil: Produce a single <pre> tag instead of multiple for multiple domains]
[sunil: Minor refactoring for more concise code]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-02-02 13:07:53 -08:00
Sunil Mohan Adapa
f4b1eb23ac
wireguard: Remove NM connections when app is uninstalled
Tests:

- Install WireGuard and start the server. Uninstall the app and re-install.
Without the patch, the connection remain after uninstall. With the patch, the
connections are removed after uninstall and return to pristine state after
re-install.

- Functional tests succeed.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-02-01 08:37:18 -05:00
Frederico Gomes
b0a841c63a
wireguard: Show next available client IP in Add Client form
Display the next available IP address that will be
automatically assigned when adding a new client.

Helps admins know what client IP to provide when configuring client
connections back to this server.

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
[sunil: Turn the IP address styling into a form element]
[sunil: Update the comment style for consistency]
[sunil: Update the label for clarity]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-01-28 13:05:51 -08:00
Sunil Mohan Adapa
0fa77cbe30
debian: Ignore lintian warning: service file missing Install section
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-01-26 12:27:46 -08:00
James Valleroy
7988cc737b
debian: Update copyright years
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-26 12:27:43 -08:00
James Valleroy
2bb2eaa6ec
debian: Remove preinst script
- freedombox 20.7 and 20.9 are considered ancient versions.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-26 12:27:39 -08:00
James Valleroy
c19d2ab692
debian: Remove default Rules-Requires-Root
- As of dpkg version 1.22.13, this field is set to "no" by default.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-26 12:27:36 -08:00
James Valleroy
01da6934be
debian: Follows policy 4.7.3
- Priority is now optional by default.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-26 12:27:33 -08:00
James Valleroy
6960a57779
Makefile: Fix removing extra license file
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-26 12:27:30 -08:00
James Valleroy
2237d89745
lintian: Remove mismatched overrides
- The original lintian messages no longer appear.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-26 12:27:27 -08:00
Ettore Atalan
e3b893277c
Translated using Weblate (German)
Currently translated at 99.2% (1865 of 1880 strings)
2026-01-25 15:02:39 +01:00
Frederico Gomes
6bf95de3bc
docs: update container script usage
Container usage docs have been updated to be in line with
merged request !2731.

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-01-23 11:28:30 -08:00
James Valleroy
0614b5e509
wireguard: Update functional tests to handle Start Server button
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-21 20:47:21 -05:00
Frederico Gomes
53f7c75d8e
wireguard: add 'Start Server' button with confirmation page
Adds explicit UI flow to generate server keypair and interface.

- New EnableServerView
- Conditional 'Start Server' button on main page when no wg0
- Button switches to 'Add Client' after server setup

Solves circular dependency UX issue when connecting two FBs

EDIT: Following review feedback, I removed the intermediate
confirmation page.
The “Start WireGuard Server” button now sends a POST
directly from the main page.

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
[jvalleroy: Change from TemplateView to View]
[jvalleroy: Remove redundant import]
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-21 20:19:46 -05:00
James Valleroy
8276ab64ea
Release v26.2 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
v26.2
2026-01-20 20:27:13 -05:00
James Valleroy
c5595f2d00
doc: Fetch latest manual
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-01-20 20:25:54 -05:00