Commit Graph

655 Commits

Author SHA1 Message Date
Nico
3a2704b03c feat(mirror): show sync progress (#1078) 2026-07-30 09:22:11 +08:00
Nicolas Meienberger
0f472bb5f4 fix: pr feedbacks 2026-07-27 06:25:38 +02:00
Nicolas Meienberger
ec123fe424 fix(mirror): cancel multiple syncs instead of the visible frontend one 2026-07-27 06:25:38 +02:00
Nicolas Meienberger
53dc210c06 refactor(mirrors): return last sync task in response instead of deriving state 2026-07-27 06:25:38 +02:00
Nicolas Meienberger
1b814f769e refactor(mirror-sync): use background task system 2026-07-27 06:25:38 +02:00
Nicolas Meienberger
c1929be289 refactor: skip auth for api docs in development 2026-07-22 12:20:29 +02:00
renovate[bot]
aa5ea161a3 fix(deps): update bun minor and patch dependencies (#1060)
* fix(deps): update bun minor and patch dependencies

* chore(deps): pin drizzle version

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-07-22 07:53:54 +02:00
Nico
364bf23163 feat(restore): allow cancellation from UI (#1052)
* feat(restore): allow cancellation from UI

* fix: agent cancellation failure report
2026-07-11 10:46:11 +02:00
Nico
c13808a0a8 fix(ui): cron expression overflowing (#1051) 2026-07-11 10:26:45 +02:00
Nicolas Meienberger
af9c4486ea fix(restore): preload initial task at first render 2026-07-10 16:53:14 +02:00
Nicolas Meienberger
d9a8ed762e refactor: split active tasks vs tracked in their own hook 2026-07-10 14:39:12 +02:00
Nicolas Meienberger
ab2ca3bbbe refactor(restore): move to task stream system 2026-07-10 09:59:21 +02:00
Nico
c4093b0719 refactor(doctor): move to task stream system (#1048)
Refactor doctor tasks to run in the new task system
2026-07-09 23:17:27 +02:00
Nico
4157514e32 refactor(tag-snapshots): move tag snapshots as background tracked task (#1047)
* refactor(tag-snapshots): move tag snapshots as background tracked task

* chore: remove flaky tests
2026-07-08 15:47:49 +02:00
Nico
a10be39159 refactor: delete snaps task sub (#1044)
* refactor(delete-snaps): use tasks subscriptions system

* refactor: subscribe to many tasks

* chore: pr feedback
2026-07-08 14:58:30 +02:00
Nico
0a9cecabc4 feat(tasks): introduce task scoped server sent events (#1043)
* feat(tasks): introduce task scoped server sent events

* fix: linting issue
2026-07-07 20:34:55 +02:00
Nico
1e2359acd9 refactor(delete-snapshot): background task (#1042)
* refactor(delete-snapshot): background task

* chore: pr feedbacks
2026-07-07 16:08:30 +02:00
renovate[bot]
dfc2aae093 fix(deps): update bun minor and patch dependencies (#991)
* fix(deps): update bun minor and patch dependencies

* chore: generate api client

* chore: add new two_factor fields

* chore(docs): fix vite config import

* chore(e2e): cleanup caddy certs before running tests

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-07-06 14:17:58 +02:00
Nico
de150b8cc4 feat(sftp): add option for absolute & parent symlink backups (#1040)
* feat(sftp): add option for absolute & parent symlink backups

Related issue: #1007

Recent SSHFS now contains absolute/parent-directory symlinks by default,
which is safer for browsing but prevents Restic from archiving the
original symlink metadata. This adds an opt-in `no_contain_symlinks`
switch for trusted SFTP sources that need exact symlink backup

* refactor(sftp): block unsafe symlink with skip host check combination
2026-07-06 14:11:42 +02:00
Nico
d9cb8e941c fix(backup): don't display empty snap list while fetching (#1037)
Related issue #985
2026-07-06 11:27:07 +02:00
Nico
46c21c8529 feat(webhooks): allow insecure tls for self-signed certs (#1034) 2026-07-06 10:26:21 +02:00
Nicolas Meienberger
fd2931315f chore: regenerate api-client 2026-07-06 10:08:32 +02:00
Nicolas Meienberger
4dee038def Revert "fix: harden volume browser path codec (#1020)"
This reverts commit f646bc4f92.
2026-06-30 21:02:51 +02:00
Nico
f646bc4f92 fix: harden volume browser path codec (#1020)
Volume browser paths are API paths, not native filesystem paths. They
need stable slash-separated encoding so paths containing spaces,
backslashes, or percent-encoded characters can round-trip between the
browser and the agent without escaping the mounted volume root.

This adds a small codec at the volume-host boundary, verifies
symlink/root containment on the resolved native path, and keeps the
local file browser from normalizing user-facing request.
2026-06-30 19:21:15 +02:00
Nico
3e3719f33c fix(bacups): reschedule immediately warning backups (#1016)
* fix(bacups): reschedule immediately warning backups

Backups that didn't end properly due to a container restart should be
re-scheduled immediately

* chore: pr feedback
2026-06-30 13:03:12 +02:00
Nico
f3f6a4e5f9 test(integration): add restore test suite (#1018)
Add an integration test suite for restore
2026-06-30 11:36:52 +02:00
Nicolas Meienberger
f504dfc372 chore(desktop): alpha naming 2026-06-29 09:12:21 +02:00
Nico
956e357b72 feat(desktop): add tray UI (#1004) 2026-06-22 15:36:46 +02:00
Nico
22fe4fa0a5 feat(desktop): add native shell capabilities (#1002)
* feat(desktop): add native shell capabilities

* refactor: pr feedback
2026-06-22 14:55:12 +02:00
Nico
f26ed7b5fd feat(desktop): add app foundation (#1001)
* feat(desktop): add app foundation

refactor(desktop): slim app foundation

* refactor: pr feedbacks
2026-06-22 14:05:02 +02:00
Nicolas Meienberger
591b6c81d1 test: automate legacy sftp integration 2026-06-22 10:27:39 +02:00
Nicolas Meienberger
277c24e1a0 fix(auth): revoke organization API keys when removing members 2026-06-21 22:46:51 +02:00
Nicolas Meienberger
019ffa98fd fix(auth): require SSO auto-link policy for existing members 2026-06-21 17:23:35 +02:00
Nicolas Meienberger
4dd96307ec fix(sso): allow verified invitation account linking 2026-06-21 11:50:44 +02:00
Nico
c0148aba89 feat(desktop): prepare folder picker for desktop (#993)
* feat(desktop): prepare folder picker for desktop

* fix: test failure
2026-06-17 14:34:39 +02:00
Nicolas Meienberger
da13257295 refactor: min 32 chars for desktop launch secret 2026-06-16 22:57:16 +02:00
Nicolas Meienberger
7b5eb7574c fix(auth): disable sign-up paths when password is disabled 2026-06-16 22:48:37 +02:00
Parman Mohammadalizadeh
34e8f89727 feat: add option to disable password login (#949)
* feat: add option to disable password login

Adds a global admin setting to hide the username/password form on the
login page, useful for deployments that rely solely on SSO/OIDC or
passkeys. The form defaults to enabled so existing deployments are
unaffected.

Changes:
- Add PASSWORD_LOGIN_ENABLED_KEY constant
- Add isPasswordLoginEnabled / setPasswordLoginEnabled to system service
  (defaults to true when no DB record exists)
- Add GET/PUT /api/v1/system/password-login-status endpoints (GET
  auth-gated for admin use; setting is exposed to the login page via
  the existing getLoginOptions server function)
- Extend getLoginOptions to include passwordLoginEnabled
- Conditionally render the password login form in LoginPage
- Add "Enable password login" toggle in the admin System Settings tab,
  next to "Enable new user registrations"
- Add corresponding entries to generated API client files
  (types.gen.ts, sdk.gen.ts, @tanstack/react-query.gen.ts)

Closes #941

* fix(login): show errors even if password is disabled

* feat(cli): add command to re-enable password

---------

Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-06-16 22:26:56 +02:00
Nico
1f38d9241b fix(backups): allow clearing retention policy fields (#992)
Related issue: #988
2026-06-16 19:35:41 +02:00
renovate[bot]
7f6dedf64a fix(deps): update bun minor and patch dependencies (#974) 2026-06-16 07:32:10 +02:00
Nicolas Meienberger
697ba92686 fix(notifications): trim smtpHost before saving
Related issue #851
2026-06-15 22:33:27 +02:00
Nico
d24167b520 refactor(auth): mark desktop sessions with auth source (#990)
* refactor(auth): mark desktop sessions with auth source

Makes it easier to filter out on session type in backend paths that
behave differently depending on the context

* chore: fix un-used import

* fix(auth): align desktop session guards

* refactor(auth): gate desktop sessions by runtime features
2026-06-15 21:39:32 +02:00
Nico
d1e96c21b9 feat(desktop): add launch-secret session bootstrap (#989) 2026-06-15 17:33:14 +02:00
Nico
35748e757f refactor(auth): model password support as runtime capability (#987) 2026-06-15 16:38:30 +02:00
Nico
d79ecc41a3 feat(desktop): hide unavailable admin flows (#986) 2026-06-14 23:27:27 +02:00
Nico
64e3bf48b9 refactor(auth): enforce named permissions on server routes (#984) 2026-06-14 20:16:34 +02:00
Nico
551e55aa53 refactor(auth): introduce named permission policy (#983) 2026-06-14 19:50:14 +02:00
Nico
aded9bbdce feat(system): expose runtime backend capabilities (#982) 2026-06-14 19:38:49 +02:00
Nicolas Meienberger
051bf96e8b feat(desktop): add desktop runtime config 2026-06-14 19:17:56 +02:00
Nicolas Meienberger
9ff5f9b7e7 fix(sso): block api key sessions from verifying sso invitations 2026-06-14 17:53:22 +02:00