Commit graph

6310 commits

Author SHA1 Message Date
Denis Arnst
67f8eb6815
OIDC: Support object-shaped and string group claims
The group claim was assumed to always be an array, which crashes with
providers like Zitadel that return an object with role names as keys
(e.g. { "admin": {...}, "user": {...} }). Normalize all common formats:
array, single string, and object (extract keys).

Fixes #4744
2026-02-12 13:25:56 +01:00
Denis Arnst
84b3d4d215
Fix migration crash on upgrade from v2.31.0
Removed index definition from Session model since the migration already
creates it. This prevents .sync() from trying to create the index before
migrations run. Also bumped version to 2.34.0 to match migration files.

Fixes: SQLITE_ERROR: no such column: oidcSessionId
2026-02-07 22:19:33 +01:00
Denis Arnst
c99543be87
Update en-us.json 2026-02-05 20:32:35 +01:00
Denis Arnst
e428ba5657
OIDC: Fix CodeQL warnings 2026-02-05 20:31:07 +01:00
Denis Arnst
c2a7615319
OIDC: Improve error messages 2026-02-05 20:10:18 +01:00
Denis Arnst
49aeb2da19
Require email_verified to be explicitly true when enforcement is enabled
Previously the check only rejected email_verified === false, allowing
logins when the claim was missing entirely. Since the admin opted in,
the IdP is expected to provide the claim.
2026-02-05 19:56:58 +01:00
Denis Arnst
b3d63f4158
Fix backchannel logout always returning 501
global.ServerSettings is a plain JSON object from toJSON(), so the
isOpenIDAuthSettingsValid getter was always undefined. Use
Database.serverSettings instead, matching the rest of the codebase.
2026-02-05 19:35:50 +01:00
Denis Arnst
d5047978a8
Add unit tests for OIDC callback flow and authorization
Test handleCallback (11), getAuthorizationUrl (13), generatePkce (5),
handleMobileRedirect (5), cleanupStaleAuthSessions (3). 88 total.
2026-02-05 19:35:50 +01:00
Denis Arnst
ed0db539c9
Add unit tests for 5 OidcAuthStrategy methods
Cover validateGroupClaim, isValidRedirectUri, isValidWebCallbackUrl,
updateUserPermissions, and verifyUser with 40 new tests (51 total).

Tests cover open redirect prevention, group claim validation,
auto-registration flows, permission updates, and error handling.
2026-02-05 18:04:14 +01:00
Denis Arnst
073eff74ef
Add OIDC Back-Channel Logout support
Implement OIDC Back-Channel Logout 1.0 (RFC). When enabled, the IdP can
POST a signed logout_token JWT to invalidate user sessions server-side.

- Add BackchannelLogoutHandler: JWT verification via jose, jti replay
  protection with bounded cache, session destruction by sub or sid
- Add oidcSessionId column to sessions table with index for fast lookups
- Add backchannel logout route (POST /auth/openid/backchannel-logout)
- Notify connected clients via socket to redirect to login page
- Add authOpenIDBackchannelLogoutEnabled toggle in schema-driven settings UI
- Migration v2.34.0 adds oidcSessionId column and index
- Polish settings UI: auto-populate loading state, subfolder dropdown
  options, KeyValueEditor fixes, localized descriptions via descriptionKey,
  duplicate key detection, success/error toasts
- Localize backchannel logout toast (ToastSessionEndedByProvider)
- OidcAuthStrategy tests now use real class via require-cache stubbing
2026-02-05 17:55:10 +01:00
Denis Arnst
33bee70a12
Revamp OIDC auth: remove Passport wrapper, add schema-driven settings UI
- Remove Passport.js wrapper from OIDC auth, use openid-client directly
- Add schema-driven OIDC settings UI (OidcSettingsSchema.js drives form rendering)
- Add group mapping with KeyValueEditor (explicit mapping or legacy direct name match)
- Add scopes configuration (authOpenIDScopes)
- Add verified email enforcement option (authOpenIDRequireVerifiedEmail)
- Fix group claim validation rejecting URN-style claims (#4744)
- Add auto-discover endpoint for OIDC provider configuration
- Store oidcIdToken in sessions table instead of cookie
- Add AuthError class for structured error handling in auth flows
- Migration v2.33.0 adds oidcIdToken column and new settings fields
2026-02-05 17:54:59 +01:00
advplyr
fe13456a2b
Merge pull request #4936 from weblate/weblate-audiobookshelf-abs-web-client
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Run Component Tests / Run Component Tests (push) Has been cancelled
Build and Push Docker Image / build (push) Has been cancelled
Verify all i18n files are alphabetized / update_translations (push) Has been cancelled
Integration Test / build and test (push) Has been cancelled
Run Unit Tests / Run Unit Tests (push) Has been cancelled
Translations update from Hosted Weblate
2026-02-03 17:26:42 -06:00
Lluís Forns
2ee893062f
Translated using Weblate (Catalan)
Currently translated at 92.2% (1073 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ca/
2026-02-03 20:10:06 +01:00
dapitch666
31630f50a5
Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-02-03 20:10:06 +01:00
Delta Umhöfer
edfce46058
Translated using Weblate (German)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/de/
2026-02-02 08:02:28 +00:00
Jan-Eric Myhrgren
cc5244c596
Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2026-02-02 08:02:27 +00:00
enosh
b8942c5931
Translated using Weblate (Hebrew)
Currently translated at 81.4% (947 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/he/
2026-02-02 08:02:26 +00:00
FiendFEARing
6e5feee78a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2026-02-02 08:02:25 +00:00
Dawid Kuźnicki
e7cb0466e6
Translated using Weblate (Polish)
Currently translated at 94.5% (1100 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-02-02 08:02:24 +00:00
dv4yGY2U
6c7221d37d
Translated using Weblate (Turkish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/tr/
2026-02-02 08:02:24 +00:00
Samuel Guerrero
1f3fa80ddd
Translated using Weblate (Spanish)
Currently translated at 97.5% (1134 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/es/
2026-02-02 08:02:23 +00:00
Mantas
87f3766299
Translated using Weblate (Lithuanian)
Currently translated at 59.9% (697 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/lt/
2026-02-02 08:02:22 +00:00
Bartłomiej
d08cef11ed
Translated using Weblate (Polish)
Currently translated at 94.5% (1100 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2026-02-02 08:02:21 +00:00
Kabika82
7201cced42
Translated using Weblate (Hungarian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/hu/
2026-02-02 08:02:20 +00:00
N Visi
4f8fbbc979
Translated using Weblate (Japanese)
Currently translated at 22.8% (266 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ja/
2026-02-02 08:02:19 +00:00
Henrik Lynge
e55fed4a33
Translated using Weblate (Danish)
Currently translated at 99.9% (1162 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-02-02 08:02:19 +00:00
herny ucet
dcbeecff7a
Translated using Weblate (Slovak)
Currently translated at 99.7% (1160 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sk/
2026-02-02 08:02:18 +00:00
xxzp3
32276aacd9
Translated using Weblate (Danish)
Currently translated at 99.8% (1161 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/da/
2026-02-02 08:02:17 +00:00
J. Lavoie
b921a08809
Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-02-02 08:02:16 +00:00
J. Lavoie
c089336e41
Translated using Weblate (Italian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/it/
2026-02-02 08:02:15 +00:00
Charlie
5107b0307c
Translated using Weblate (French)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fr/
2026-02-02 08:02:14 +00:00
advplyr
8498378bca
Merge pull request #4952 from sir-wilhelm/use-localized-text-for-selected-filter
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Run Component Tests / Run Component Tests (push) Has been cancelled
Build and Push Docker Image / build (push) Has been cancelled
Integration Test / build and test (push) Has been cancelled
Run Unit Tests / Run Unit Tests (push) Has been cancelled
Display localized/styled text for selected filter.
2026-01-31 17:56:07 -06:00
advplyr
b61e2c30f2
Merge pull request #4973 from KiwiHour/jump-backwards-label-fix
Fix screen reader compatability issue for the "jump backwards" button for media controls
2026-01-31 17:50:41 -06:00
KiwiHour
3e4225bced
Fix aria-label for jumpBackward button 2026-01-09 14:26:56 +00:00
sir-wilhelm
e6d99d07f0 Display localized/styled text for selected filter.
The selected filter was using the id before.
2025-12-28 11:28:36 -06:00
advplyr
122fc34a75 Fix server crash filtering by decade with collapsed series
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Build and Push Docker Image / build (push) Has been cancelled
Integration Test / build and test (push) Has been cancelled
Run Unit Tests / Run Unit Tests (push) Has been cancelled
2025-12-24 17:07:05 -06:00
advplyr
e5c0a9d22c Version bump v2.32.1
Some checks failed
CodeQL / Analyze (push) Waiting to run
Build and Push Docker Image / build (push) Waiting to run
Integration Test / build and test (push) Waiting to run
Run Unit Tests / Run Unit Tests (push) Waiting to run
Run Component Tests / Run Component Tests (push) Has been cancelled
Verify all i18n files are alphabetized / update_translations (push) Has been cancelled
2025-12-23 16:51:54 -06:00
advplyr
3bf136a20b
Merge pull request #4933 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-12-23 16:49:04 -06:00
Marcin
b387d9484a
Translated using Weblate (Polish)
Currently translated at 89.2% (1038 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-12-23 23:44:39 +01:00
bittin1ddc447d824349b2
e8668d9f22
Translated using Weblate (Swedish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/sv/
2025-12-23 23:44:38 +01:00
Petri Hämäläinen
f3e90bd420
Translated using Weblate (Finnish)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/fi/
2025-12-23 23:44:37 +01:00
Ivan Smoliakov
4bf15bbffd
Translated using Weblate (Russian)
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/ru/
2025-12-23 23:44:37 +01:00
advplyr
04eb3bc437 Fix server crash on audible match #4931 2025-12-23 16:44:29 -06:00
advplyr
81e96df9c5 Version bump v2.32.0
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Run Component Tests / Run Component Tests (push) Has been cancelled
Build and Push Docker Image / build (push) Has been cancelled
Verify all i18n files are alphabetized / update_translations (push) Has been cancelled
Integration Test / build and test (push) Has been cancelled
Run Unit Tests / Run Unit Tests (push) Has been cancelled
2025-12-21 15:54:07 -06:00
advplyr
44aff23e1b
Merge pull request #4921 from weblate/weblate-audiobookshelf-abs-web-client
Translations update from Hosted Weblate
2025-12-21 15:44:28 -06:00
lambolighting
cc48d9f26d
Translated using Weblate (Greek)
Currently translated at 26.9% (313 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/el/
2025-12-21 21:38:43 +00:00
Ahetek
ac08e897ee
Translated using Weblate (Polish)
Currently translated at 89.2% (1038 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/pl/
2025-12-21 21:38:43 +00:00
FiendFEARing
3c2eec8279
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1163 of 1163 strings)

Translation: Audiobookshelf/Abs Web Client
Translate-URL: https://hosted.weblate.org/projects/audiobookshelf/abs-web-client/zh_Hans/
2025-12-21 21:38:42 +00:00
advplyr
7b37c98e88
Book tags genres dedupe (#4927)
* Update Audible provider dedupe genres/tags and return tags as array

* Update custom metadata provider to dedupe tags/genres and return tags as array
2025-12-21 15:38:34 -06:00
advplyr
088353ae26
Merge pull request #4649 from votex001/multi-select-item-fix
[fix] prevent duplicates in multi-selects
2025-12-21 14:58:04 -06:00