LeoVasanko
84985501f5
MultiSite: one instance serves authentication across many domains ( #4 )
...
- Serve multiple domains (RP IDs) from one instance: host-based dispatch,
per-domain credentials and sessions, domains managed at runtime in the
admin UI — previously one RP per instance
- Cross-domain sign-in via Related Origin Requests: per-domain related-origins
list with a served .well-known/webauthn document
- Explicit per-domain origin lists with shell-glob wildcards (**. for apex +
any subdomain depth, *. for one level), editable in the admin UI with
validation and self-lockout guards
- Per-domain auth hosts: the account/admin UI can live on a different host
per domain, no longer confined to subdomains of a single RP
- CLI: 'paskia init <rp-id [rp-name]' initializes or adds a domain to an
existing database; 'paskia migrate' converts legacy databases
BREAKING CHANGES (v2.0):
- Database schema: config is now per-domain and credentials/sessions carry
an rp_id — existing databases must be converted with 'paskia migrate'
- Origins are now explicit: main implicitly allowed every subdomain of the
RP; configure '**.' origins to reproduce that behavior
- CLI: the flat '--rp-id/--rp-name/--origin/--auth/--save' flags are
replaced by the 'init' and 'migrate' subcommandsReviewed-on: #4
2026-09-07 22:14:42 +00:00
LeoVasanko
df8a7c0026
Cleanup of admin user panel where incorrect toast messages were issued after changes.
2026-08-09 21:45:23 +00:00
LeoVasanko
cc938dd306
Fix a call to loadOrgs when renaming a role, missed in earlier refactoring where we use loadAdminData() for refreshing.
2026-05-22 00:31:06 +00:00
LeoVasanko
232d0e1ae0
Added configurable timeout settings to paskia-js, used in our frontend as well. The default fetch timeout has been changed to 10s from prior 1s, but we maintain 1s for auth endpoints in internal use.
2026-04-29 20:23:38 +00:00
LeoVasanko
3f51d06f13
Admin Server Options panel added for configuring rp-name, auth-host and origins.
2026-02-19 18:53:53 +00:00
LeoVasanko
6257071efe
Cleaned Org Admin styling.
2026-02-19 00:37:44 +00:00
LeoVasanko
f26ac8f33b
Simplified My Profile authentication flows, fixed some UX issues with reauth cancelled/accepted leading to incorrect states.
2026-02-18 19:04:02 +00:00
LeoVasanko
880ced3b8c
Always load user's theme from API if available, and update the localStorage cache. Previously in various situations the old cached value was being used instead, leading to inconsistent theming or wrong themeselector readout.
2026-02-18 18:35:41 +00:00
LeoVasanko
68dccc1378
OAuth2 OpenID Connect provider support, API and DB refactoring ( #3 )
...
Allows Paskia to authenticate the user to a client site.
- User friendly client registration flow on the admin app
- Redirect-based authentication flow (per spec)
- Backchannel logout both ways to keep sessions synchronized
- Groups integrated with Paskia's permission system
- Adds email, preferred username and telephone fields on user profile
- All new user basic info layout to show the new information, better looks
- API and DB structures redesigned
- Various unrelated fixes to theming and layout
2026-02-18 02:40:27 +00:00
LeoVasanko
c1f8020f6b
API cleanup, using msgspec structs rather than raw responses. Admin app cleanup, better breadcrumbs.
2026-02-13 20:09:41 +00:00
LeoVasanko
4ebe5ae968
Style overhaul.
2026-02-11 01:18:19 +00:00
LeoVasanko
3c5f8694b3
Load stylesheets directly from HTML to avoid flashing wrong background color first.
2026-02-05 15:39:51 +00:00
LeoVasanko
871eb149ab
Styling updates, more robust dynamic/userpref light/dark switching. Sync with paskia-js.
2026-02-05 15:27:15 +00:00
LeoVasanko
af5a48f565
API/DB cleanup for flat URLs that don't include org where users etc. are referred to. Implement user deletion in admin app and API, UI improvement. Reset token DB factory function revised to create passphrase and key internally. Removed unneeded functions and args, using update_user_role instead of a separate deleted _in_organization function.
2026-02-05 13:57:07 +00:00
LeoVasanko
1800dc12ae
Light/dark selection in user profile, if set this is preferred on the whole system, together with app overrides (the first one on the URL wins).
2026-01-30 23:31:06 +00:00
LeoVasanko
cc55474e62
Light/dark override for in-app login dialogs to match app style e.g. light only
2026-01-30 22:59:52 +00:00
LeoVasanko
7e49ef296a
Create a stand-alone paskia npm package (paskia-js). Make the frontend use it (but from source tree to keep synced).
2026-01-29 19:46:26 +00:00
LeoVasanko
433844cf08
Refactor to separate paskia lib functionality generally useful for various apps.
2026-01-29 16:55:46 +00:00
LeoVasanko
c9ea1c8948
Consistent and stronger session revalidation checks in Auth profile and Admin App. Fix missing handling of link generation network errors.
2026-01-29 16:02:29 +00:00
LeoVasanko
cf1124c251
DB transactions cleanup, better actor/user data. Simplified admin API. Use UUID to refer to a specific permission in admin API. Other cleanup.
2026-01-27 21:48:21 +00:00
LeoVasanko
cb84a81a06
Update the API to use new naming matching database.
2026-01-27 02:22:29 +00:00
LeoVasanko
7e568dbd10
Refactor validate endpoint to return session context, leaving user-info only for extra profile data. Completely separate token-info for reset tokens. Simplified by reusing same data structures in various places and mandating fields to have values not needing fallbacks. Implemented consistent AccessDenied view in profile and admin apps.
2026-01-26 19:40:48 +00:00
LeoVasanko
a9ef20969e
Refer permissions by UUID rather than scope.
2026-01-24 00:06:08 +00:00
LeoVasanko
c13044c085
Change PUT to PATCH for intent-based updates, avoiding override of fields not intended to change. This preserves role permissions matrix even if the permission is temporarily removed from the org.
2026-01-23 15:41:23 +00:00
LeoVasanko
2c783498a4
Better handling of Org Admin permission. More guardrails for Master Admin not locking himself out by changes. Admin app UI improvements.
2026-01-23 15:11:01 +00:00
LeoVasanko
3430c7f0cf
Permissions refactor. Permissions have UUID and scope (previously id) and the latter no longer needs to be unique. Org admin uses a single global permission now. Domain scoped permissions. Removed from user info the admin fields, use effective_permission checks instead.
2026-01-23 13:54:31 +00:00
LeoVasanko
8992cff473
Fix dialog patterns in admin app: dialog must close before doing API calls to avoid conflict with authentication dialogs.
2025-12-10 20:42:12 +00:00
LeoVasanko
1e91b84d3d
Cleanup on Admin app, better delete confirmations.
2025-12-10 20:16:57 +00:00
LeoVasanko
091f20a666
Use absolute paths for resources so that the links work when Vite is serving these at root instead of /auth/
2025-12-10 18:30:45 +00:00
LeoVasanko
3f0de04a49
Fix link copy toast messages, remove custom toast in favor of authStore, remove a component that was no longer used.
2025-12-10 17:18:48 +00:00
LeoVasanko
ca73febe2f
Implement keyboard navigation using arrow keys in the whole application. ( #2 )
2025-12-10 15:43:40 +00:00
LeoVasanko
9b491164fd
Profile view UX improvements. More consistent styling across the application.
2025-12-09 21:20:29 +00:00
LeoVasanko
1bed2c39d8
Implement code word based remote authentication ( #1 )
...
Add comprehensive remote authentication system allowing users to log in from one device by authenticating from another trusted device. Features include:
- Proof of Work (PoW) protection using PBKDF2-SHA512 to prevent abuse
- Simple pairing codes (3 words) protected by dynamic PoW difficulty
- Autocomplete pairing code input with error checking
- Real-time WebSocket communication between devices
Unlike device addition links and reset links with QR codes that only allow adding an authentication method, and that work offline over the duration of several days, this mechanism is strictly online, with 5 minute time limit.
2025-12-08 23:56:48 +00:00
LeoVasanko
a72349077c
Integrate host app to main app (WIP).
2025-12-04 10:00:47 +00:00
LeoVasanko
e102b8383b
Admin app simplification by using API auth properly. Implemented promise to keep request blocked by permission check while the user authenticates, fixing concurrent requests.
2025-12-04 09:19:40 +00:00
LeoVasanko
4d4b290cc8
Revert earlier change to iframe srcdoc, using src instead, because srcdoc was not compatible with all passkey implementations (BitWarden).
2025-12-04 06:01:47 +00:00
LeoVasanko
9976e05696
Various fixes and cleanup, regressions from prior commits.
2025-12-04 03:40:59 +00:00
LeoVasanko
b9b1c995f9
Update forward API to return in JSON iframe srcdoc with options injected. (currently broken in dev mode).
2025-12-04 01:58:18 +00:00
LeoVasanko
2ecf8433a1
Consistently use apiJson for fetches, with timeout and proper error handling (less code duplication).
2025-12-04 01:00:24 +00:00
LeoVasanko
547a6cd923
Make auth/admin apps API calls use apiFetch, a new function that asks for permission by iframe if needed. Implement max-age checks for API authz.verify as well along with a custom exception type that carries metadata.
2025-12-03 23:17:02 +00:00
LeoVasanko
f63c62d9ff
Implement session termination in admin API, for completeness.
2025-12-03 01:20:52 +00:00
LeoVasanko
768a4391cf
Improved profile view layout.
2025-12-03 01:03:25 +00:00
LeoVasanko
8714fe9319
Vite proxy config simplified. Renaming /auth/restricted to have a trailing slash for better Vite compatibility.
2025-12-02 22:41:12 +00:00
LeoVasanko
adbab88c86
Major refactor of frontend source tree such that paths better match where they are served.
2025-12-02 22:09:07 +00:00