Commit Graph

264 Commits

Author SHA1 Message Date
Nico
3a2704b03c feat(mirror): show sync progress (#1078) 2026-07-30 09:22:11 +08: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
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
1e2359acd9 refactor(delete-snapshot): background task (#1042)
* refactor(delete-snapshot): background task

* chore: pr feedbacks
2026-07-07 16:08:30 +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
f504dfc372 chore(desktop): alpha naming 2026-06-29 09:12:21 +02:00
Nicolas Meienberger
277c24e1a0 fix(auth): revoke organization API keys when removing members 2026-06-21 22:46:51 +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
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
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
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
283de054ec feat(authentication): api key (#966)
* feat(authentication): api key

Keeps selected UX pieces from b487b096.

Co-authored-by: Nguyen Quy Hy <nguyenquyhy@live.com.sg>

* refactor: pr feedbacks

* chore: bump @better-auth/api-key

* refactor: global limit of 50 api key instead of 10 per org

---------

Co-authored-by: Nguyen Quy Hy <nguyenquyhy@live.com.sg>
2026-06-12 20:14:21 +02:00
Nico
fd48ff9ce9 fix(backups): reduce low-cpu backup UI contention (#963)
* fix(backups): reduce low-cpu backup UI contention

* chore: remove un-used import

* refactor: start polling for backup updates on start event

* fix: skip ionice automatically if it fails to schedule
2026-06-10 19:36:56 +02:00
Nicolas Meienberger
3953ed87db chore: improve wording around recovery key download 2026-06-10 17:52:40 +02:00
Nicolas Meienberger
a2e621345a refactor(sso): when verifying an invitation must complete SSO flow 2026-06-07 15:08:20 +02:00
Nicolas Meienberger
9437cdc821 feat(sso): display pending org invitations in user settings page 2026-06-07 14:07:01 +02:00
Nico
2318b6bdd0 fix: limit concurrent ls to 2 in flight calls (#948)
* fix: limit concurrent ls to 2 in flight calls

* refactor: get shared lock after semaphore take
2026-06-05 18:07:59 +02:00
Nico
68002b0308 fix: disable add passkey in insecure contexts (#943) 2026-06-04 21:06:48 +02:00
renovate[bot]
755cbe4dae fix(deps): update bun minor and patch dependencies (#925)
* fix(deps): update bun minor and patch dependencies

* chore: fix linting issues

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-06-03 17:15:53 +02:00
Nico
a488bbc754 fix: block login for 2fa users with un-verified passkeys (#934)
* fix: block login for 2fa users with un-verified passkeys

* refactor(passkey): show proper login error

* refactor: show passkey generic error on all failures
2026-06-02 19:48:40 +02:00
Nico
7b5c53bb7d fix(sftp): allow legacy ssh rsa to add support for older servers (#921)
* refactor(e2e): use more stable assertion

* feat(sftp): add legacy ssh-rsa option
2026-05-27 21:19:23 +02:00
Nico
98338e80c3 Add passkey authentication support (#845)
* feat(auth): add passkey authentication support

* fix: implement AI review feedback

* fix: use non-unique index for passkey_credentialID_idx in migration

* refactor(passkeys): use TanStack mutations for passkey CRUD operations

* chore: restore lockfile from main and add @better-auth/passkey

* chore: fix conflicts

* refactor(passkey-login): simplify passkey autofill event

* refactor(settings-passkeys): ux improvements

---------

Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-05-21 21:18:46 +02:00
Nico
4dcafa0708 feat(auth): allow skipping forced recovery key download (#900)
* feat(auth): allow skipping forced recovery key download

* refactor: move from session storage to cookie
2026-05-19 20:36:45 +02:00
Nico
c071596151 fix(system): block recovery key download without credential password (#899) 2026-05-19 20:28:09 +02:00
Nico
3b9f2086ee fix(backups): preserve retry settings when toggling schedules (#896) 2026-05-19 20:08:05 +02:00
Nicolas Meienberger
66ebc249ca fix: force recovery key redownload after possible truncated download 2026-05-18 21:35:53 +02:00
Nicolas Meienberger
419204d587 fix(download-password): revoke url after 60 secs 2026-05-18 21:13:07 +02:00
Nico
19a0781667 test: backend integration (#889)
* test: backend integration

* docs: mounted shares acls

* feat: smb expose real ACLs when available

* fix: re-init repo on setup

* chore: add missing @hono/standard-validator package

* chore: add happy-dom dev dep
2026-05-17 15:18:56 +02:00
Nico
aa7da321ba refactor: dedpulicate volume schemas across packages (#864) 2026-05-09 15:36:25 +02:00
Nicolas Meienberger
e981211a2d fix(notifications): validate webhook headers and show delivery health 2026-05-05 10:24:20 +02:00
Nico
f83b765d04 fix(notifications): persist delivery health status (#850)
* fix(notifications): persist delivery health status

* fix: pr feedback double update
2026-05-02 11:51:16 +02:00
Antoine Jeanselme
3d5a0a9b75 feat: add repositories & volumes column sorting (#808)
* Add repository column sorting

* Make status title correctly centered o nsmaller screens

* Add volumes column sorting

* refactor: use tanstack table for filtering and sorting

* feat: make notifications sortable

* chore: pr feedbacks

---------

Co-authored-by: Antoine Jeanselme <67123340+ajeanselme@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-05-02 10:21:42 +02:00
Nico
11e9fbcc44 feat: pre/post backup webhooks (#835)
* feat: pre/post backup webhooks

* fix(hooks): run post when cancelled

* refactor(webhooks): headers as array

* refactor: pr feedback

* refactor: simplify hooks ceremonies

* chore: pr feedbacks

* chore: re-gen migration
2026-04-29 23:48:58 +02:00
Nicolas Meienberger
c64862f604 refactor: extract shared test fixtures and secret helpers 2026-04-22 22:33:18 +02:00
Nico
6ae5a33acd chore: remove dead files (#827) 2026-04-22 22:13:24 +02:00
Nico
e2c9ef0518 chore: fixed unused types (#824) 2026-04-22 22:04:46 +02:00