Commit graph

54 commits

Author SHA1 Message Date
Keith Martin
b6687b6c29
Tests: Improve isolation and add fixes #5263
* Tests: fix random selection of deleted record causing test failure
* Tests: fix test folders being left after test
* Tests: ensure that required records are available
* Tests: make each package execute against it's own testdata folder to ensure no interpackage test failures
* Tests: add unit tests of CleanupTestFolder
* Tests:  Allow defer in TestMain
* Tests: rename testMain to runTestMain
2026-07-12 05:47:21 +02:00
Cathie Integra
3f096a592b Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
Michael Mayer
974321b8a1 Cluster: Re-register node config on restart via OAuth credentials 2026-06-13 12:54:48 +00:00
Michael Mayer
e308fd7b58 Auth: Land cluster sign-out on the Portal login without return_to 2026-06-12 19:56:44 +00:00
Michael Mayer
d594edd5de Cluster: Declare per-node group config via instance env/flags 2026-06-12 18:52:54 +00:00
Michael Mayer
f29413c7eb Tests: Replace customer names with neutral placeholders
Use "Acme Media" instead of real customer names in the SiteName and node DisplayName test fixtures.
2026-06-10 14:28:33 +00:00
Cathie Integra
a10de3b616 Config: Add SITE_NAME option and use siteName for instance labels 2026-06-10 14:28:22 +02:00
Michael Mayer
6d0add2e69 Cluster: Address review findings on sign-out, OIDC bootstrap, errors
- /logout route guard now signs out cluster-wide: session.signOut shares
  revokePeerSessions with logoutEverywhere, so a direct /logout revokes peer
  sessions and clears shared storage too, not just the current session.
- Decouple PHOTOPRISM_CLUSTER_OIDC from the auto-join/theme toggles: InitConfig
  now always runs resolveNodeOIDCClient for an instance (join/theme moved into
  bootstrapClusterNode), so a registered node re-wires its OIDC RP on restart
  even with both bootstrap toggles disabled.
- Map redirected OAuth server_error / temporarily_unavailable to ErrUnexpected
  instead of "Invalid credentials", so a Portal-side failure isn't shown as a
  credential problem.
2026-06-09 10:38:22 +00:00
Michael Mayer
b88429f557 Cluster: Compact code comments in the OIDC follow-up changes 2026-06-09 10:20:17 +00:00
Michael Mayer
872af5d8fd Cluster: Add cluster OIDC, branded authorize errors, and sign-out
Implements three OIDC follow-ups from specs/portal/cluster-oidc.md:

- Zero-touch instance OIDC RP config: PHOTOPRISM_CLUSTER_OIDC derives the
  OIDC RP client_id/secret from the node client credentials and defaults
  the issuer to the instance's own origin (scheme.OriginURL), so a single
  boot reaches a working Portal login. Explicit oidc-client/secret/uri win.
- Human-friendly authorize errors: redirectable errors 302 back to the
  validated redirect_uri; non-redirectable ones content-negotiate a
  branded HTML page (oauth-error.gohtml) vs JSON via shared helpers in
  internal/api/oauth_error.go. The RP callback surfaces inbound ?error=.
- Cluster-wide Sign-Out (Tier 2): session.logoutEverywhere fans out a
  best-effort DELETE per peer session, clears their storage, then signs
  out locally; session-delete clears the OP cookie on any shared-domain
  OIDC-against-Portal node (OIDCSessionCookieClearPath).
2026-06-09 09:39:01 +00:00
Michael Mayer
aae8137168 Cluster: Drop SiteCaption from the node DisplayName fallback 2026-06-09 07:56:45 +00:00
Michael Mayer
680469e781 Cluster: Add a per-instance node DisplayName field 2026-06-09 07:23:05 +00:00
Michael Mayer
570a563748 Docs: Bump copyright year to 2026 in Go package headers 2026-05-25 14:39:38 +00:00
Michael Mayer
c8390a2e8d Config: Centralize SQL driver identifiers in pkg/dsn #5588 2026-05-17 14:47:43 +00:00
Michael Mayer
6bc8527097 Cluster: Revalidate portal proxy cache & tighten OAuth scope usage
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-26 22:42:05 +01:00
Michael Mayer
5334ef3a68 Cluster: Require OAuth for existing-node register mutations
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-26 22:06:53 +01:00
Michael Mayer
34be2f0bd8 Cluster: Protect register mutations and enforce CIDR gate
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-26 19:59:33 +01:00
Michael Mayer
a79eb6e1a4 Cluster: Refactor configuration and secret persistence
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-24 06:57:35 +01:00
Michael Mayer
fbaf356b1d Cluster: Fix stale secret retry auth and stop implicit DB provisioning
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-24 04:20:19 +01:00
Michael Mayer
8b61ffc8aa Cluster: Retry credential refresh without stale node UUID
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-24 03:35:40 +01:00
Michael Mayer
50ded66db3 Cluster: Endure complete registration payload in node/bootstrap.go
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-24 03:14:17 +01:00
Michael Mayer
a0070dce1c Cluster: Improve usage of canonical terms in code/docs based on glossary
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-23 16:16:29 +01:00
Michael Mayer
c1467cb3f5 Cluster: Rename the "tenant" node role to "instance" for accuracy
This more accurately reflects the multi-instance architecture.

Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-23 04:27:43 +01:00
Michael Mayer
5f50802384 Cluster: Rename the "app" node role to "tenant"
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-23 03:27:11 +01:00
Michael Mayer
f07f46fec8 Backend: Clean up error handling and unit tests in internal/ packages
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-09 12:00:33 +01:00
Michael Mayer
5fd1e13a96 Cluster: Don't enforce TLS for internal connections
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-02-06 12:34:10 +01:00
Michael Mayer
f4858212d1 Services: Resolve issues in node/bootstrap.go and options_apply.go #5330
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-11-21 10:30:19 +01:00
Michael Mayer
06df64281d Config: Move database DSN-related functionality to "pkg/dsn" #47 #5285
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-11-03 13:40:34 +01:00
Michael Mayer
82f5c5f818 Cluster: Change "photoprism_" database / user prefix to "cluster_" #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-31 18:18:18 +01:00
Michael Mayer
755ebe0aee Cluster: Rename RoleInstance to RoleApp in service/cluster/roles.go #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-31 16:46:42 +01:00
Michael Mayer
5365e214ad Cluster: Shorten log messages in node/bootstrap.go
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-29 20:14:01 +01:00
Michael Mayer
0f68b65da6 Config: Add authentication logs to cluster/node/bootstrap.go #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-27 19:06:49 +01:00
Michael Mayer
ceab5e619d Config: Add register fallback to cluster/node/bootstrap.go #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-27 17:50:50 +01:00
Michael Mayer
107888a8da Cluster: Improve theme installation and startup logs #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-27 16:20:26 +01:00
Michael Mayer
dd8698c938 Cluster: Shorten log message in node/bootstrap.go
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-26 11:34:22 +01:00
Michael Mayer
f2313b8dfe Cluster: Shortened log message in node/bootstrap.go
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-23 14:09:22 +02:00
Michael Mayer
f23069dd2c Security: Improve credential handling across the cluster tooling #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-20 00:06:17 +02:00
Michael Mayer
a921f82a17 Pkg: Move /service/http/... to /http/... and add package /http/dns
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 21:08:48 +02:00
Michael Mayer
50abe4ddaf Config: Automatically download, install and activate cluster theme #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 16:09:26 +02:00
Michael Mayer
e6959e7e96 Cluster: Report Config.About() instead of Config.Name() as app name #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 14:30:10 +02:00
Michael Mayer
695b33f097 Cluster: Change conf.AppName() to Name() in node register request #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 13:15:45 +02:00
Michael Mayer
1b85f84943 Cluster: Add AppName, AppVersion and Theme request/response fields #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 12:44:21 +02:00
Michael Mayer
6ed9d2715a Cluster: Improve defaultClusterDomain() in bootstrap.go #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 02:52:57 +02:00
Michael Mayer
a779c5d89a Cluster: Auto-derive Advertise/Site URLs from node name #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 02:40:06 +02:00
Michael Mayer
bad4b84267 Cluster: Improve log messages in internal/service/cluster/node #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-19 02:12:45 +02:00
Michael Mayer
b5c4fd3dcf Cluster: Refactor registration and database provisioning
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-18 23:54:56 +02:00
Michael Mayer
b47ee0fddc Cluster: Refactor request/response structs and JSON serialization
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-18 17:42:22 +02:00
Michael Mayer
04f015bdf0 Cluster: Improve logging in node/bootstrap.go
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-18 16:19:08 +02:00
Michael Mayer
bf6d7e4f94 Config: Add StaticBuildFile() and StaticImgFile() functions #5274
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-18 09:09:56 +02:00
Michael Mayer
cb9d8d236a Config: Move Portal flag to ClientConfig struct
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-10-15 23:32:54 +02:00