Commit Graph

314 Commits

Author SHA1 Message Date
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
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
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
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
9ff5f9b7e7 fix(sso): block api key sessions from verifying sso invitations 2026-06-14 17:53:22 +02:00
Nico
2361a00e53 feat(restic): support configurable restic command (#979) 2026-06-14 14:15:51 +02:00
Nico
15c367eeb8 feat(copy): pass custom restic params (#976)
Restic copy (mirror) should inherit the compatible custom flags from the
parent backup setup

Related issue #960
2026-06-13 10:29:36 +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
renovate[bot]
bd46bd1156 fix(deps): update bun minor and patch dependencies (#937)
* fix(deps): update bun minor and patch dependencies

* fix: require SSO flow for SSO org invitations

Manual enforcement since better-auth made the rule wider

* chore: re-generate api-client

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-06-12 08:50:56 +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
Nico
d0b6844435 fix(backups): skip warning messages on exit code 0 (#965) 2026-06-10 18:33:52 +02:00
Nicolas Meienberger
f4a9dcf677 refactor(progress-buffer): persist first event immediately 2026-06-08 19:22:35 +02:00
Nico
5dabe9dec5 refactor: buffer backup / restore progress (#956) 2026-06-08 17:36:20 +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
53dcd086ef fix(sso) auto linking local account (#953)
* fix(sso): allow invited local accounts to auto-link via SSO

* test(e2e): sso existing member auto linking
2026-06-07 11:46:02 +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
Nicolas Meienberger
9d63f7cb2d Revert "fix(volumes): decrypt values before testing connection (#939)"
This reverts commit 885ea10f2a.
2026-06-03 19:56:55 +02:00
Nico
885ea10f2a fix(volumes): decrypt values before testing connection (#939)
* fix(volumes): decrypt values before testing connection

* chore: lint issue
2026-06-03 19:05:39 +02:00
Nico
333c11986d feat: enforce protocol version between agent and controller (#938)
* feat: enforce protocol version between agent and controller

* chore: add logging for protocol rejected message
2026-06-03 18:29:36 +02:00
Nicolas Meienberger
be3182793d fix(agent-backups): validate agent ownership 2026-06-03 17:28:43 +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
d479bfaddc feat: snapshot restores through rpc (#930)
* feat: snapshot restores through rpc

* fix(restore): do not wait for lock before returning response

* chore: fix liniting issue
2026-05-31 21:48:32 +02:00
Nico
8fedeef4d1 feat: add restore agent RPC foundation (#929)
* feat: add restore agent RPC foundation

* chore: temp event handlers

* refactor: export restore progress from dto file
2026-05-31 19:39:20 +02:00
Nico
2d877cee5a feat: durable tasks (#927) 2026-05-30 16:54:49 +02:00
Nico
0a2c6bca0c refactor(restic): auto try to unlock and remove stale locks (#926) 2026-05-30 13:21:22 +02:00
Nico
d4436b0cdc refactor(restic): all commands return effects (#924)
* refactor(restic): all commands are effects

* fix(restic): preserve effect failure errors

* chore: pr feedbacks
2026-05-30 10:10:54 +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
Nicolas Meienberger
4ea9f34154 chore: portless setup 2026-05-27 17:14:34 +02:00
Nico
273408cdb8 fix(shutdown): keep the current volume status after shutdown cleanup (#906) 2026-05-20 15:04:48 +02:00
renovate[bot]
970a7fa42f fix(deps): update dependency content-disposition to v2 (#880)
* fix(deps): update dependency content-disposition to v2

* refactor(content-disposition): use new named export

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-05-19 21:55:43 +02:00
Nico
c071596151 fix(system): block recovery key download without credential password (#899) 2026-05-19 20:28:09 +02:00
Nico
4b66ad73a7 fix(auth): verify reauth passwords against credential account (#898) 2026-05-19 20:20:55 +02:00
Nico
94f6d0529f refactor(mutext): persist repository locks in database (#895)
* refactor(mutext): persist repository locks in database

* fix: clean up promoted repository lock on queued abort

* fix: throttle repository lock cleanup during polling
2026-05-19 18:59:40 +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
2a1351382f fix(agent-manager): disable ws server when not needed (#890) 2026-05-17 14:04:49 +02:00
Nico
a58fe82d48 refactor: move backup path resolution into agent contract (#872) 2026-05-10 21:46:03 +02:00
Nico
aa7da321ba refactor: dedpulicate volume schemas across packages (#864) 2026-05-09 15:36:25 +02:00