- Separates the Authentik and Patternfly themes into their own namespaces, creating a bridge from Authentik’s definitions to Patternfly’s usages
- Renames “shadow” to “box-shadow”, to maintain compatibility with Patternfly
- Adds “Shadows” to the Authentik theme, and bridges it with Patternfly
- Updates the theme selector to distinguish clearly between “current” and “other” (rather than “light or dark”.
- Updates the ESLint configuration to allow `console` calls in build and lint scripts, and to use Javascript rules instead of Typescript rules when linting `.mjs` files like build and lint scripts.
- Moves the Patternfly reference files into a pure JavaScript module, so we don’t have to do brittle parsing.
- Corrects a specification in BorderRadii
- Adds a missing specification to BorderWidth
- Adds Motion to the Authentik theme, and bridges it with Patternfly
- Adds Z-Index to the Authentik theme, and bridges it with Patternfly
- Adds Typography to the Authentik theme, and bridges it with Patternfly
- Adds Breakpoints to the Authentik theme, and bridges it with Patternfly
As an experiment, I have added three visual comparisons:
- dashboard
- event notification rules table
- new prompt form
… which provides a wide variety of controls that I can see and compare. As we move toward a more robust testing scheme *and* toward a more dispersed repository of artifacts (theme, elements, etc), I wanted a way to ensure that our upgrades to Patternfly and components didn’t break anything. I spent the day learning much more about Playwright and the snapshot tests.
I don’t think @BeryJu’s concern for snapshot size isn’t wholly warranted. I’ve manually restricted the viewport to 1280x800, so each snapshot pair (“light” and “dark”) is about 220Kb. The current project repo is 795Mb in size; it would take 40 tests to increase the size of the repository by 1%. If we have half that many snapshot pairs by next year, I’ll be delighted.
One challenge these tests present is that they should be run on a completely fresh database with no modifications; the dashboard and notifications page should reflect only the default status of an authentik instance when it comes up. The purpose of the snapshots isn’t to record the utility of the front-end; it’s to record and preserve the appearance of select elements in the page.
* main: (103 commits)
sources/saml: add audience override field for SAML sources (#25029)
endpoints: handle error in facts (#25028)
web: Fix content_left/right layouts. (#25025)
enterprise/stages/source: configurable failure action (#24963)
translate: Updates for project authentik and language th_TH (#25015)
core: bump github.com/grafana/pyroscope-go from 1.4.1 to 1.4.2 (#25016)
core: bump axllent/mailpit from v1.30.6 to v1.30.7 in /tests/e2e (#25017)
core: bump packaging from 26.2 to 26.3 (#25018)
core: bump django-tenants from 3.12.0 to 3.13.0 (#25019)
core: bump thiserror from 2.0.19 to 2.0.20 (#25020)
core: bump pem from 3.0.6 to 4.0.0 (#25021)
ci: bump taiki-e/install-action from 2.85.10 to 2.85.11 in /.github/actions/setup (#25022)
core, web: update translations (#25011)
website/docs: document the hexworld event map (#24258)
website/integrations: cisco-fmc: Added step for launch URL (#25009)
tasks: aggregate status from logs instead of legacy field (#24792)
website/docs: preserve host and port in proxy provider nginx redirects (#24991)
enterprise/endpoints/connectors/fleet: decrease page size (#24995)
web/elements: fix prioritization in form serialization for dotted input-fields (#24987)
web: Add path-router primitives. (#23990)
...
Add a self-contained demo page, built by build-demo.mjs, that renders
every theme token — colors, typography, spacing, shape, shadow, motion —
so the design system can be eyeballed in isolation while it evolves.
Co-Authored-By: Ken Sternberg <ken@goauthentik.io>
Add @goauthentik/theme, which defines authentik's design tokens (color,
typography, fonts, spacing, shape, shadow, motion, z-index) in TypeScript
and builds them into CSS via styleframe.
Token names carry a distinct separator per category so the token type is
recoverable from the name alone. That is worth the verbosity: it keeps
the DX legible and leaves room for automatic theme management and future
tooling built on top of the token set.
Co-Authored-By: Ken Sternberg <ken@goauthentik.io>
Extract the bundled web fonts out of web/ into a dedicated
@goauthentik/fonts workspace package: the RedHat variable faces, the
PatternFly pficon icon face, and the FontAwesome Free solid face, each
with its upstream license recorded under licenses/.
web/ now pulls the faces and icons from the package's
@goauthentik/fonts/faces.css and @goauthentik/fonts/icons.css entry
points instead of the old #fonts/* import and the inlined pficon.scss
vendor sheet.
Anchor esbuild's [dir] at the monorepo root via outbase so assets pulled
from the out-of-web package no longer resolve to a "_.._" segment, which
Go's //go:embed silently drops from the embedded outpost build.
Co-Authored-By: Ken Sternberg <ken@goauthentik.io>
* website/docs: document the hexworld event map
* website/docs: drop the OSM tile server from the air-gapped outbound list
The events map no longer reaches tile.openstreetmap.org — the bundled
basemap makes no outbound connections. Note the one way it can reach out
again: a custom basemap configured on a brand.
---------
Co-authored-by: Teffen Ellis <teffen@Teffens-MacBook-Pro.local>
* website: use $host instead of $http_host for proxy provider redirects.
The Proxy Provider nginx recipes set the upstream Host header from
$host but built X-Original-URL and the sign-in redirect (rd=) from
$http_host, the raw client-supplied Host header. authentik's outpost
parses that value directly (getNginxForwardUrl), so an unvalidated
Host header flows into its own redirect construction. Use $host
consistently, matching what the same files already do for Host.
X-Forwarded-Host in the ingress-nginx snippet is left as $http_host;
that's a different, informational header, not authentik's own
redirect construction.
* Update to deal with non-standard ports
* WIP
---------
Co-authored-by: Dewi Roberts <dewi@goauthentik.io>
Co-authored-by: Dominic Roy <dominic@goauthentik.io>
* First push. WIP
* Remove scope
* Update request example
* Apply suggestions from code review
Co-authored-by: Dominic Roy <dominic@goauthentik.io>
Signed-off-by: Dewi Roberts <dewi@goauthentik.io>
* Apply suggestions
---------
Signed-off-by: Dewi Roberts <dewi@goauthentik.io>
Co-authored-by: Dominic Roy <dominic@goauthentik.io>
* blueprints: emit draft-07 `definitions` instead of `$defs`
The generated blueprint schema declares draft-07:
"$schema": "http://json-schema.org/draft-07/schema"
but stored every model definition under `$defs` and referenced them as
`#/$defs/...`. `$defs` is 2020-12 vocabulary; draft-07 spells it `definitions`.
A validator honouring the declared dialect therefore cannot resolve any of
those references, so nothing consuming the published schema.json can validate
a blueprint at all — which is what #24248 reports.
Switching the declared dialect to 2020-12 instead is not a drop-in: the schema
also uses draft-07-style plain-fragment `$id` values (`#/properties/version`),
which 2020-12 does not permit — it uses `$anchor` for that. Renaming the
keyword keeps the schema internally consistent with what it already claims to
be, and is the smaller change.
Adds a regression test that validates the schema the way a consumer does:
serialized through `json_default`, exactly as `build_schema` writes it, since
the in-memory dict still holds gettext_lazy proxies. It asserts the schema
passes `Draft7Validator.check_schema` and that every `$ref` resolves to a real
definition.
Verified:
manage.py test authentik.blueprints.tests.test_schema.TestSchema -> 5 passed
reverting schema.py -> 3 failed
ruff check / ruff format -> clean
Note: authentik.blueprints.tests.test_v1.TestBlueprintsV1.test_import_yaml_tags
fails identically with and without this change on current main.
closes#24248
* re-gen
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
---------
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Jens Langhammer <jens@goauthentik.io>