Commit graph

13520 commits

Author SHA1 Message Date
Cathie Integra
021bdeb428 Setup: Default to MariaDB 12.3 (LTS) in compose examples #5705 2026-06-28 15:15:27 +02:00
Michael Mayer
71c14fc68b Docs: Update tagline in README.md
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-28 10:36:59 +02:00
Michael Mayer
ba82cefb83 Setup: Add PHOTOPRISM_OIDC_PROMPT to compose & Helm examples #5698
Lists the new OIDC authorization prompt option alongside the other
PHOTOPRISM_OIDC_ settings (in flag order) in the dev compose files and the
Plus Helm chart values/questions. Empty default preserves current behavior.
2026-06-27 12:39:25 +00:00
Michael Mayer
9d0aca64b8 OIDC: Add configurable authorization prompt option #5698
Add PHOTOPRISM_OIDC_PROMPT (--oidc-prompt) to forward the OpenID Connect
"prompt" parameter (login, select_account, consent) on the authorization
request, so a rejected user can re-authenticate or pick another account
instead of being silently signed in again. Unsupported values (including
"none", which would break interactive login) are dropped with a warning;
empty preserves the seamless-SSO default.
2026-06-27 12:35:04 +00:00
Michael Mayer
063f3c1245 Backend: Update Go deps in go.mod and go.sum
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-27 13:41:03 +02:00
Michael Mayer
b1318d57fa Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-27 13:38:53 +02:00
Michael Mayer
f351d5a5a7 Frontend: Recompile translation JSON for new auth messages #5699 #5682 2026-06-27 11:34:54 +00:00
Michael Mayer
0575659c08 Frontend: Render auth error toasts in the current UI locale #5699 #5682 2026-06-27 11:34:54 +00:00
Michael Mayer
a2e8592dd5 Auth: Localize login/session/OIDC error responses via messageId #5699 #5682 2026-06-27 11:34:54 +00:00
Weblate
0293736a08 Weblate: Update frontend translations 2026-06-27 12:29:30 +02:00
Weblate
4c86c71417 Weblate: Update backend translations 2026-06-27 12:29:16 +02:00
Michael Mayer
68a6ad24f4 Translations: Regenerate .po and .pot files from source #5699
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-27 12:27:09 +02:00
Michael Mayer
d081997cff Frontend: Move batch edit dialog close button to toolbar start 2026-06-27 08:19:00 +00:00
Michael Mayer
03c22ca66c UX: Fix 404 page logo text rendering under RTL locales 2026-06-27 08:19:00 +00:00
Michael Mayer
69de3d7a05 Tests: Alias "app.vue" so Portal hooks.test.js resolves the root component 2026-06-26 13:45:38 +00:00
Ömer Duran
b2b1785126
Tests: Add unit tests for recent metadata, auth, and config changes #5697 2026-06-26 14:12:59 +02:00
Michael Mayer
9fe532914d Update tagline in README.md
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-26 09:48:44 +02:00
Michael Mayer
d13b9e50ca Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-25 20:46:45 +02:00
Cathie Integra
16eb3fb708 Frontend: Revert dep bump that broke options.js in prod bundle
Reverts 0182c46bb. The webpack 5.107.2->5.108.0 bump changed prod-bundle
scope-hoisting so option-builders in src/options/options.js (Languages,
TimeZones, StartPages, MapsAnimate) threw "Cannot read properties of
undefined", breaking the login and Settings pages on all editions.
Re-apply the photo-sphere-viewer/tar patch bumps separately.
2026-06-25 20:11:57 +02:00
Michael Mayer
7654e676b7 Frontend: Remove unused babel-plugin-istanbul and dead Karma config #5659
The babel-plugin-istanbul coverage plugin was only wired into the retired karma.conf.js; Vitest measures coverage via @vitest/coverage-v8 (.babelrc has no plugins). Dropping it removes the orphaned @istanbuljs/load-nyc-config -> js-yaml@3 subtree and clears the GHSA-h67p-54hq-rp68 DoS advisory; npm audit now reports 0 vulnerabilities.
2026-06-25 16:29:40 +00:00
Michael Mayer
d2a2597ab6 Users: Centralize Add Account auth field gating in the user model 2026-06-25 16:24:55 +00:00
Michael Mayer
41fdb578b2 Users: Prevent a non-super-admin admin from locking out the super admin 2026-06-25 16:24:51 +00:00
Michael Mayer
0182c46bbb Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-25 18:18:08 +02:00
Michael Mayer
57e4de738e Vision: Fix data race in image classifier during parallel indexing #5694
Indexing workers share one classify.Model whose Run() built tensors into a single shared ImageTensorBuilder buffer with no lock, so concurrent classification corrupted images and produced garbage labels. Pool a per-call builder instead, restoring the pre-#5164 concurrency safety.

Add a concurrent regression test and consolidate the model benchmark.
2026-06-25 15:01:23 +00:00
Michael Mayer
80437299da OIDC: Send and validate a nonce on authorization requests #5695 2026-06-25 16:54:29 +02:00
Michael Mayer
9a25a19824 JPEG XL: Decode natively via libvips with "djxl" fallback #5693
Route JPEG XL through the native libvips path (govips jxlload) like
HEIC/AVIF, keeping the external "djxl" decoder as an automatic fallback
for runtimes whose libvips lacks JPEG XL support.

Decouple format enablement from "djxl": DisableJpegXL now stays enabled
when either the decoder is present or libvips can decode JPEG XL natively.
The libvips capability probe (thumb.JpegXLSupported) is cached and runs
only when no decoder is present, so config introspection on standard
installs (which ship "djxl") does not start libvips.

Add a shared assets/samples/dice.jxl fixture and focused tests for the
native conversion path, the djxl fallback command, and the capability
decision table.
2026-06-25 14:31:10 +00:00
Weblate
a88264df82 Weblate: Update backend translations 2026-06-25 15:47:49 +02:00
Theresa Gresch
cd0deacbc1 Tests: Make acceptance tests more stable 2026-06-25 15:29:11 +02:00
Cathie Integra
9ff36af70c Docs: Update project tagline in README 2026-06-25 15:00:42 +02:00
Michael Mayer
6b485b7308 Frontend: Regenerate src/locales/json/fr.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-24 23:03:31 +02:00
Michael Mayer
6ee98a14ad Auth: Chain RP-initiated OIDC logout on direct /logout entry #5684 2026-06-24 22:52:48 +02:00
Weblate
05669ccdcc Weblate: Update frontend translations 2026-06-24 21:21:20 +02:00
Michael Mayer
8a3c3fb8f1 Tests: Make TestService_Discovery use a local WebDAV server
Service discovery was probing the live https://www.photoprism.app/ and asserting
success, so the test broke when the website migrated to Hugo (no PROPFIND
support). Point it at a local httptest WebDAV-like server and allow the loopback
host via servicesCIDR, making the test deterministic and offline-safe.
2026-06-24 15:31:31 +00:00
Michael Mayer
11c074cb85 Auth: Delegate cluster OIDC logout to the Portal end-session endpoint #5684
On a cluster-OIDC Sign-Out the instance now delegates the Portal session and the
upstream RP-logout to the Portal's end-session endpoint instead of doing them
itself: revokePeerSessions skips the Portal peer's backend DELETE (still clearing
its storage), and DeleteSession skips clearing the OP session cookie when it
returns a providerLogoutUri — otherwise the Portal OP could not resolve the
session (via that cookie) to chain the upstream logout. onLogout now resolves to
the chosen landing URL so the /logout route guard follows the provider logout URL
too. Adds the oidcLogout client-config accessor and an instance.portal session
marker so the Portal peer is identified explicitly rather than by URL shape.
2026-06-24 15:22:04 +00:00
Michael Mayer
50976f427e Auth: Add RP-initiated OIDC logout via PHOTOPRISM_OIDC_LOGOUT #5684 #5433
Sign-out of an OIDC session redirects the browser to the provider's
discovered end_session_endpoint (id_token_hint + absolute
post_logout_redirect_uri) when PHOTOPRISM_OIDC_LOGOUT is enabled, so the
provider SSO session ends and the next login re-prompts. Opt-in (default
off); local/LDAP logout and providers without an end-session endpoint fall
back to local logout.

Adds the shared CE /api/v1/oauth/logout route and OAuthLogoutHandler hook
plus the Portal OP end_session_endpoint advertised in the Portal discovery
document, for Portal builds to serve via the override hook.
2026-06-24 17:21:00 +02:00
Cathie Integra
3f096a592b Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
Michael Mayer
e1c9eafe88 Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-24 10:45:53 +02:00
Michael Mayer
95ae2be80c Frontend: Harden i18n positional shim against literal % in translations #5682
interpolatePositional now matches only real Go fmt verb letters and disallows the space flag, so a literal percent in a translated message (e.g. "100% sicher") is not mistaken for a verb and corrupted. Adds a regression test.
2026-06-23 13:30:22 +00:00
Michael Mayer
c5658a053d API: Align i18n.Response Go field names with JSON keys #5682
Rename the Response struct fields to match their json tags (Err to Error, Msg to Message) and the Error() method to ErrorString() to avoid a field/method clash; update callers and tests. JSON wire format is unchanged.
2026-06-23 12:42:57 +00:00
Michael Mayer
fd8448d6de UX: Name message fields messageId/messageParams in i18n payloads #5682
Rename the i18n notification/error envelope fields from id/params to messageId/messageParams across the WS notify Data and the i18n.Response body, so they are unambiguous next to session, log, and correlation ids. Updates the frontend consumers (notify.vue, api.js), tests, swagger, and the event/locales READMEs.
2026-06-23 12:22:30 +00:00
Michael Mayer
2fd9e93247 Tests: Fix label toast assertions after %{name} change #5682
labels.vue now notifies via $gettext("Removed/Added %{name}"); update the expected toast strings to match.
2026-06-23 12:07:01 +00:00
Michael Mayer
f5373ccec6 UX: Render backend error responses in the current UI locale #5682
The i18n.Response envelope now carries the untranslated source id and params; the frontend (api.js) renders them via Tp in the user's UI locale, with the server-rendered error/message as the instance-locale fallback. Common not-found/conflict/bad-request handlers were switched from hardcoded literals and raw err.Error() to Abort/i18n.Message helpers, so they benefit automatically.
2026-06-23 12:06:49 +00:00
Michael Mayer
49c6535c81 Storage: Fix duf path lookup to resolve the containing mount #5683
FindByPath now resolves a path's containing filesystem by longest-prefix match against the raw mount list, instead of the df-style display filter that hides overlay/pseudo roots. This fixes PathInfo/Free/StorageLow for paths like "/" whose mount is hidden (e.g. a container overlay root), which previously resolved to an arbitrary masked tmpfs.
2026-06-23 11:18:13 +00:00
Michael Mayer
a12d287c19 Docs: Document per-user notification localization in READMEs #5682
Describe the event *Msg structured payload and frontend per-user rendering in the event and backend-locales READMEs; fix a stale go-generate path (/internal/i18n to /pkg/i18n).
2026-06-23 09:23:31 +00:00
Michael Mayer
9ec70731e2 UX: Fix notification messages that bypassed translation #5682
Route user-facing notifications through extractable $gettext (aliased ctx.$gettext is not extracted), wrap hardcoded English strings, replace concatenation with interpolation, and drop redundant English backend label toasts already covered by localized frontend ones.
2026-06-23 09:06:56 +00:00
Michael Mayer
9ecdb0ae26 UX: Render backend notifications in the current UI locale #5682
Backend *Msg helpers now publish the untranslated message id and params alongside the rendered fallback; the frontend translates the id and applies a positional-placeholder shim so notifications render in each user's UI language.
2026-06-23 09:06:46 +00:00
Michael Mayer
544a4cfef2 Lightbox: Handle each Escape press once in face-marker mode #5672 2026-06-23 10:51:21 +02:00
Michael Mayer
a930ae24d7 Assets: Normalize locales/he/default.po
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-23 10:20:08 +02:00
Michael Mayer
deb2a5b71d Weblate: Update frontend translation .json files #5681
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-06-23 10:19:07 +02:00
Weblate
2f70683d0d Weblate: Update frontend translations 2026-06-23 10:18:02 +02:00