Commit Graph

10 Commits

Author SHA1 Message Date
Bastian Wagner
5931a57f82 build: package local admin service
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 09:56:50 +02:00
Bastian Wagner
d2ac079870 fix: reject empty credential fields with 400 instead of 500
Add an explicit non-empty check before encrypting user-submitted
email/password fields in the create and update user routes, so a
request that bypasses the HTML `required` attribute gets a clean
400 instead of an unhandled ValueError from CredentialCipher.encrypt
propagating as a 500. Applies to all four credential fields on
create, and to the two email fields on update (the password-blank-
means-keep-existing behavior on update is unchanged).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 09:50:05 +02:00
Bastian Wagner
b39842fe2c feat: add encrypted sync user management
Adds full CRUD for sync users (create/list/detail/edit) behind admin
auth and CSRF protection. Passwords are encrypted at rest and never
decrypted into a template context; only emails may be decrypted for
display on the edit form. Blank password fields on edit preserve the
existing encrypted password.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 09:41:21 +02:00
Bastian Wagner
da6b94ca2f feat: add local admin authentication 2026-08-15 09:33:27 +02:00
Bastian Wagner
93232a809e feat: encrypt stored service credentials 2026-08-15 09:26:40 +02:00
Bastian Wagner
318d7c8ddb feat: add SQLite persistence models 2026-08-15 09:18:57 +02:00
Bastian Wagner
91728cba86 feat: bootstrap FastAPI configuration 2026-08-15 09:14:33 +02:00
Bastian Wagner
c7e834bf14 roadmap 2026-08-15 09:07:40 +02:00
Bastian Wagner
a2387341bd reference 2026-08-15 09:04:38 +02:00
Bastian Wagner
f6da346e18 plans + specs 2026-08-15 09:00:41 +02:00