Commit Graph

1395 Commits

Author SHA1 Message Date
Alessandro (Ale) Segala
22cf4eab93 tests: run the E2E suite against a standalone Francis runtime
Adds a matrix entry that starts a SQLite-backed Francis runtime next to
Pocket ID and points FRANCIS_HOST at it, so the same Playwright suite runs
with the actor state, alarms, and placement owned by the runtime instead of
embedded in Pocket ID.

The suite needs no changes to work in that topology: the E2E reset seeds
every actor through actors.Service() and deliberately leaves the actor
store alone, so it behaves the same whichever side owns it.

The CLI spec is the exception, since export and import are the two commands
whose behaviour genuinely differs. It now picks the right Compose file,
expects an export to carry no francis.bin, feeds the import an archive
without one, and gains a case asserting that an archive that does carry one
is refused.

The runtime is reached over the Compose network on its UDP port, so nothing
is published to the host, and the cluster CA is left unpinned, which
exercises the same trust-on-first-use path an operator gets without
FRANCIS_CA. Pinning is covered by a unit test instead.
2026-08-31 05:27:04 +00:00
Alessandro (Ale) Segala
2e48aaf0a4 feat: export and import Pocket ID's own data against a standalone runtime
With a standalone Francis runtime the actor data lives in the runtime's
store, which Pocket ID cannot reach: the Francis protocol has no backup
or restore operation, and a restore refuses to run while any host is
connected, so a CLI that joined the cluster would block its own restore.

Rather than refusing outright, both commands now cover everything Pocket
ID does own and say plainly what they leave out, pointing at the
runtime's own backup and restore commands for the rest. The export writes
no francis.bin entry, which the import side already tolerates, and the
import refuses an archive that carries one, since restoring only its
Pocket ID half would leave the runtime holding another deployment's actor
state. The import also skips the exclusive-access lease, which lives in
the actor tables of a database this deployment does not use, and warns
that the replicas have to be stopped by hand.
2026-08-31 05:26:59 +00:00
Alessandro (Ale) Segala
7ee7caae8f feat: support JWT bootstrap and CLI access to a standalone Francis runtime
Pocket ID can now authenticate to a standalone runtime with a JWT as well
as a pre-shared key: FRANCIS_HOST_JWT carries the token inline, while
FRANCIS_HOST_JWT_FILE keeps a path that Francis re-reads on every
connection, so a rotated token (a Kubernetes projected service account
token, say) is picked up without a restart. Exactly one bootstrap method
must be configured, which the config validates up front.

The one-time-access-token command works against a standalone runtime
again. It has no actor host of its own, so it joins the cluster as a
client-only host for just long enough to write the token: that hosts no
actor, so the runtime never places one on it, and it disconnects before
the command returns.
2026-08-31 05:26:59 +00:00
Alessandro (Ale) Segala
600ca3f31f feat: add FRANCIS_HOST to connect to a standalone Francis runtime
FRANCIS_HOST decides where the Francis actor runtime lives. When it is
empty or set to "embedded" (the default) nothing changes: Pocket ID starts
the runtime inside its own process, backed by its own database. Any other
value is the address, or a comma-separated list of addresses, of a
standalone Francis runtime; Pocket ID then connects to it as a remote actor
host and starts no embedded runtime.

Connecting to a standalone runtime also needs FRANCIS_HOST_PSK, the host
bootstrap pre-shared key the runtime is configured with, and optionally
FRANCIS_CA, the PEM-encoded cluster CA to pin before the first connection.
Without a pinned CA Francis trusts the certificate it is served on first
use, and warns about it.

The actor host is now held as the topology-agnostic francis host.Host
interface, since the concrete type depends on the configuration. The
commands that reach the actor data through Pocket ID's own database
(export, import, and one-time-access-token) fail with an explicit error
when a standalone runtime owns that data instead, rather than silently
operating on the wrong store.
2026-08-31 05:26:59 +00:00
Alessandro (Ale) Segala
7c79a9e14b feat: add explicit public keys for federated client credentials (#1702)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-08-28 21:12:15 +00:00
Elias Schneider
6ff9a5ba7e ci/cd: update golangci-lint version 2026-08-28 23:05:52 +02:00
Elias Schneider
f235104aed chore(deps): update Go to v1.27.0 2026-08-28 23:02:49 +02:00
dependabot[bot]
429793f33c chore(deps): Bump the "all-dependencies" group with 3 updates across multiple ecosystems (#1725)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Elias Schneider <login@eliasschneider.com>
2026-08-28 21:49:39 +02:00
Elias Schneider
3657012f93 fix: make sorting of strings case insensitive 2026-08-28 21:49:20 +02:00
Elias Schneider
2abdf44320 chore(translations): update translations via Crowdin (#1723) 2026-08-26 23:20:02 +02:00
Elias Schneider
dd2fc67c87 chore(translations): add Hungarian language files 2026-08-26 23:15:00 +02:00
Elias Schneider
059d45d50e fix: show long login code button regardless where the user is coming from 2026-08-25 18:54:40 +02:00
Kyle Mendell
d75523fed0 feat: list allowed groups when hovering over allowed group count (#1671) 2026-08-25 18:30:16 +02:00
Alessandro (Ale) Segala
29a6fd6c29 feat: show admin UI warning for SQLite on networked filesystem (#1713)
Co-authored-by: Elias Schneider <login@eliasschneider.com>
2026-08-24 15:03:31 -07:00
dependabot[bot]
d258d952b1 chore(deps): Bump the "all-dependencies" group with 2 updates across multiple ecosystems (#1711)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-22 22:15:28 +02:00
tw-
0bf0f3922d fix(i18n): Update de.json Translation (#1705) 2026-08-20 16:37:11 +02:00
Elias Schneider
5521266227 release: 2.14.0 v2.14.0 2026-08-18 22:07:53 +02:00
Alessandro (Ale) Segala
8c095afd78 refactor: migrate SCIM sync to actor + add tests (#1680)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-08-18 21:54:06 +02:00
Elias Schneider
a099d9457c chore(translations): update translations via Crowdin (#1703) 2026-08-18 21:38:29 +02:00
Elias Schneider
a487c78550 feat: reduce one time access code length for better UX 2026-08-18 21:31:22 +02:00
Elias Schneider
900346a1c3 fix: remove unnecessary information from oidc client details 2026-08-18 21:30:01 +02:00
Elias Schneider
6a441b1f9b feat: improve tooltip design 2026-08-18 21:29:02 +02:00
Elias Schneider
915a6bcf08 feat: allow admins to auto grant APIs to CIMD clients (#1692) 2026-08-18 20:02:14 +02:00
tw-
22354581df fix(i18n): update de.json Translation (#1699) 2026-08-17 14:25:28 +02:00
Alessandro (Ale) Segala
be4c395528 refactor: move remaining database cleanup jobs to actors (#1698) 2026-08-17 08:38:35 +02:00
github-actions[bot]
0e8ae3b1c7 chore: update AAGUIDs (#1696)
Co-authored-by: stonith404 <58886915+stonith404@users.noreply.github.com>
2026-08-17 08:35:16 +02:00
Elias Schneider
9421d43f8e fix: ignore trailing slash in resources 2026-08-17 08:34:28 +02:00
Elias Schneider
07580d9f9f chore(deps): use fix version for github.com/italypaleale/go-kit 2026-08-16 23:24:37 +02:00
dependabot[bot]
c7cab3af84 chore(deps): Bump the "all-dependencies" group with 4 updates across multiple ecosystems (#1693)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Elias Schneider <login@eliasschneider.com>
2026-08-15 01:17:57 +02:00
Elias Schneider
b7232a0a4a chore(translations): update translations via Crowdin (#1674) 2026-08-15 00:39:36 +02:00
Alessandro (Ale) Segala
2dc062ac0f refactor: move API key cleanup job to actor (#1687) 2026-08-15 00:39:02 +02:00
Alessandro (Ale) Segala
6fba970159 tests: fix flaky update application image e2e test (#1690) 2026-08-15 00:35:15 +02:00
Elias Schneider
1bb21c5d73 refactor: move iss param handling to Fosite 2026-08-12 23:25:35 +02:00
Jean-François Roy
46b8d54e15 feat: serve RFC 8414 authorization server metadata (#1685)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Elias Schneider <login@eliasschneider.com>
2026-08-12 23:13:05 +02:00
Anthony Clerici
86cf73b86c docs: add error responses to openapi spec (#1684) 2026-08-11 19:26:48 +02:00
Alessandro (Ale) Segala
155a1fcba0 feat: support multiple client secrets per OIDC client (#1679) 2026-08-11 00:54:52 +00:00
Elias Schneider
03498e2f51 fix: don't show "show hidden apps" if none available 2026-08-10 23:04:44 +02:00
Elias Schneider
3ca9a55c71 feat: hide apps without launch url on My Apps page 2026-08-10 22:53:35 +02:00
Alessandro (Ale) Segala
84a58cd757 fix: ignore unsupported grant types in client ID metadata documents (#1682) 2026-08-10 09:45:34 -07:00
Elias Schneider
2f43ce41fe fix: wrong loading indicator shown on device page 2026-08-10 18:40:12 +02:00
github-actions[bot]
e21202e59b chore: update AAGUIDs (#1678)
Co-authored-by: stonith404 <58886915+stonith404@users.noreply.github.com>
2026-08-09 23:41:54 -05:00
Alessandro (Ale) Segala
875e7f0848 chore: update Francis to beta 22 (#1676) 2026-08-09 15:45:09 +02:00
Elias Schneider
0c9a03e519 feat: add animated logo as default logo 2026-08-08 20:50:37 +02:00
Elias Schneider
987d1a8b59 chore: remove unnecessary curl dependency from Dockerfile 2026-08-08 17:37:31 +02:00
Elias Schneider
9e637d5aec fix: improve validation of app config variables 2026-08-08 16:37:14 +02:00
Elias Schneider
76f6b249f2 docs: change logo image in README.md 2026-08-08 00:38:10 +02:00
Elias Schneider
8afe5a1936 chore(translations): update translations via Crowdin (#1667) 2026-08-07 15:02:41 -05:00
Kyle Mendell
981a41cf0a chore(deps): bump pnpm to v11.20.0 (#1670) 2026-08-07 20:26:06 +02:00
Alessandro (Ale) Segala
563c0f93a6 refactor: migrate LDAP sync to an actor (#1651)
Co-authored-by: Kyle Mendell <kmendell@ofkm.us>
2026-08-07 09:18:30 -07:00
Alessandro (Ale) Segala
f8db1d8a86 chore: update francis to beta 21 (#1669) 2026-08-07 15:40:14 +00:00