344 Commits

Author SHA1 Message Date
Emil Burzo
eabea2097d tenants: fix base URL validation rejecting internal hostnames (#25560) 2026-08-28 19:05:32 +03:00
DrummyFloyd
f93f230949 blueprints: add possibility enable/disable default brand (#11738)
feat(blueprints): add possibility enable/disable default brand

Co-authored-by: Jens L. <jens@goauthentik.io>
2026-08-17 12:46:26 +01:00
Jens L.
e5336c757f enterprise/stages/source: configurable failure action (#24963)
* enterprise/stages/source: configurable failure action

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rework to exception

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Revert "rework to exception"

This reverts commit 6b18fb6f10.

* Reapply "rework to exception"

This reverts commit 6f6ae67f99.

* actually nah fix it

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Revert "actually nah fix it"

This reverts commit a8e1d0e83d.

* Revert "Reapply "rework to exception""

This reverts commit 70d001a255.

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-08-12 12:56:30 +01:00
Abhishek Sharma
da1d219e41 blueprints: emit draft-07 definitions instead of $defs (#24981)
* 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>
2026-08-11 11:47:55 +01:00
Jens L.
03d0e5e264 providers/oauth2: move DCR to OSS (#24949)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-08-10 14:30:17 +00:00
Jens L.
c8a513c8c7 enterprise/agents: add (#24598)
* I think I'm happy with this structure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add api

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix missing engine mode

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* pull in the requests machinery

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup and gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-wire things up

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-add more web stuff

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test issue

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix mixin

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* plumb in flows

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial web

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix a couple things

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api tests & schema

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better pick request flow

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* change method

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix web lint

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* explicit perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix migrations

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* concrete m2m

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add some default config

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix permission check -> requesting user checks against rule bindings' policies

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api client

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix styling

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix more

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add banner

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* attributes mixin prep for object attrs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix typo

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test failure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* ensure no self-approval

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* configurable expiry

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add meta info to requestable target

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add more events

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* only unique apps

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial app card impl

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add entitlement modal

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* respect filters

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* improve ux

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix child bindings?

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better ux for rule bindings

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix type check

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial dcr

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* handle error

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* init

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rename

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rename

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* self-service

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* wip

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* move to user view

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* always expire self

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* t

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* actor

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* effective user early

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* extract agents

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* init

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Revert "extract agents"

This reverts commit dce02c0e89.

* update

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix navbar

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix and clamp username length

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* switch to rbac

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Fix translatins not apply.

* add admin ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add copy button

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
2026-08-05 16:19:52 +01:00
Jens L.
08c6b826fe blueprints: fix mismatched stage name in example 2fa login flow (#24668) 2026-08-04 16:19:13 +01:00
Jens L.
ea2a25785c core: Actors (#24353)
* I think I'm happy with this structure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add api

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix missing engine mode

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* pull in the requests machinery

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup and gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-wire things up

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-add more web stuff

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test issue

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix mixin

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* plumb in flows

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial web

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix a couple things

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api tests & schema

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better pick request flow

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* change method

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix web lint

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* explicit perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix migrations

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* concrete m2m

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add some default config

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix permission check -> requesting user checks against rule bindings' policies

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api client

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix styling

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix more

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add banner

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* attributes mixin prep for object attrs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix typo

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test failure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* ensure no self-approval

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* configurable expiry

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add meta info to requestable target

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add more events

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* only unique apps

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial app card impl

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add entitlement modal

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* respect filters

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* improve ux

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix child bindings?

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better ux for rule bindings

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix type check

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial dcr

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* handle error

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* init

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rename

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rename

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* self-service

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* wip

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* move to user view

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* always expire self

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* t

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* actor

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* effective user early

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* extract agents

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* optimize

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Apply suggestion from @rissson

Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
Signed-off-by: Jens L. <jens@beryju.org>

* fix

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Signed-off-by: Jens L. <jens@beryju.org>
Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
2026-08-03 20:46:20 +01:00
Jens L.
aa2343675f lib/sync/outgoing: allow discovery to be deactivated (#24667)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-08-03 15:31:58 +01:00
Teffen Ellis
4e092df177 web, packages/geo, server/static: Air Gapped Maps Merge Branch (#24254)
* server/static: cover range requests for static assets

The Go web server this originally fixed is gone — `ak server` now execs the
Rust binary, and its static handler is a tower-http `ServeDir` behind a
compression layer. Both halves of the old fix are moot there: `ServeDir`
serves ranges itself, tower-http never compresses a response carrying
`Content-Range`, and no ETag middleware survived the rewrite.

Nothing to port, then, but the events map still byte-serves its PMTiles
basemap out of `/static/dist/`, so pin the behavior it depends on: a ranged
request comes back as an uncompressed 206 with an accurate `Content-Length`,
while a full request is still gzipped. The compression layer moves behind a
named constructor so the test exercises the same configuration the router
builds.

refs #21849

* brands: add branding_map_tiles for the events map tile source (#24253)

* brands: add branding_map_tiles for the events map tile source

Brand-level override for where the events map loads its vector tiles:
empty keeps the bundled basemap, a pmtiles:// archive URL or XYZ template
points at your own. Includes the migration, schema, and regenerated
clients.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>

* packages/geo: add @goauthentik/geo and the hexworld event map (#24255)

A standalone Lit + MapLibre package for the events map: a tilted globe
that bins events into H3 cells and raises them as action-colored pie
columns, over a hex basemap bundled as a PMTiles archive — no tile server
and no external requests, so it works air-gapped. Zoom bands cross-fade
and columns animate between re-bins. Ships the archive, the generator CLI,
and node tests for the geometry, styling, and tiling plan.

Co-authored-by: Teffen Ellis <teffen@Teffens-MacBook-Pro.local>

---------

Signed-off-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
Co-authored-by: Teffen Ellis <teffen@Teffens-MacBook-Pro.local>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* web: replace the OpenLayers events map with ak-map (#24257)

* brands: add branding_map_tiles for the events map tile source

Brand-level override for where the events map loads its vector tiles:
empty keeps the bundled basemap, a pmtiles:// archive URL or XYZ template
points at your own. Includes the migration, schema, and regenerated
clients.

* packages/geo: add @goauthentik/geo and the hexworld event map

A standalone Lit + MapLibre package for the events map: a tilted globe
that bins events into H3 cells and raises them as action-colored pie
columns, over a hex basemap bundled as a PMTiles archive — no tile server
and no external requests, so it works air-gapped. Zoom bands cross-fade
and columns animate between re-bins. Ships the archive, the generator CLI,
and node tests for the geometry, styling, and tiling plan.

* web: replace the OpenLayers events map with ak-map

EventMap now renders @goauthentik/geo's globe: events show as extruded
columns split by action, hovering shows a localized breakdown, and
clicking a column filters the list to that cell's events. The build copies
the bundled archive and glyphs into dist. OpenLayers and the pin-marker
path are removed.

---------

Signed-off-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
Co-authored-by: Teffen Ellis <teffen@Teffens-MacBook-Pro.local>

* Format.

* brands: note that branding_map_tiles is served unauthenticated

The events map is admin-only, but branding_map_tiles rides along in
CurrentBrandSerializer, which /core/brands/current/ exposes with
AllowAny. Commercial tile providers carry their API key in the URL, and
the help text invites pasting exactly such a URL, so say plainly that
the value is world-readable.

Migration 0016 is edited in place rather than superseded — it has not
shipped, and makemigrations reports no pending changes. Schema and
clients regenerated.

* geo: strip build-machine paths from the shipped basemap archive

The committed hexworld.pmtiles carried the absolute path of the scratch
directory it was built in — including a session uuid — in its metadata
name, description and generator_options, shipped to every install.
tile-join inherits those fields from its first input file, so pass
--name/--description/--attribution explicitly to stop it recurring.

The archive itself is rewritten in place rather than regenerated:
pmtiles v3 lays out header, root directory, metadata, leaf directories
and tile data contiguously, and directory entries address tiles relative
to tileDataOffset, so resizing the metadata only shifts two header
offsets. Verified with the pmtiles reader — header fields match and 634
sampled tiles across z0-7 are byte-identical.

* web: drop the unused OpenLayers map pin

map_pin.svg was the marker icon the OpenLayers events map drew; ak-map
renders extruded columns instead and nothing references the file.

Also correct the preserveSymlinks comment. The flag is load-bearing, but
not for the stated reason: geo resolves its own dependencies fine from
its own node_modules. What it prevents is resolving them by realpath,
which pulls a second copy of the Lit runtime out of .pnpm alongside the
one in web/node_modules — two lit-html/lit-element/@lit-reactive-element
trees and two ReactiveElement hierarchies in one bundle.

* build: pin playwright through the pnpm catalog in both workspaces

The root and web/ are separate pnpm workspaces with separate lockfiles,
so a caret range let them resolve playwright independently — root landed
on 1.62.0 while web sat at 1.61.1, and `playwright install` downloads a
~95 MB browser build keyed to the exact version. Two versions, two
downloads. Catalog entries plus lint-catalogs turn that drift into a
failing check; the pin is exact because a range is what allowed it.

Held at 1.61.1 rather than the newest: 1.62.0 cannot resolve a bare
package name in a tsconfig `extends`, and web/tsconfig.json extends
"@goauthentik/tsconfig", so loading web's playwright.config.js fails and
the e2e suite never runs. `playwright test --list` discovers 25 tests on
1.61.1 and dies before discovery on 1.62.0.

vitest, vite and the @vitest/browser pair join the same catalog since
geo now uses them too and @vitest/browser-playwright drives whichever
playwright it finds.

* geo: rebuild ak-map on re-parent, run tests from source under vitest

disconnectedCallback tore the MapLibre instance down but firstUpdated
only ever fires once, so re-parenting <ak-map> left it permanently
blank. Rebuild from connectedCallback once the element has updated.
The new Chromium test covers exactly that: it fails without the fix and
passes with it, and no other test moves.

Tests move from node:test over compiled out/*.js to vitest over src, so
they exercise the source rather than a stale build and need no build
step. Six of them reached for ../out/*.js through a dynamic import and
would have kept asserting against whatever was last compiled.

Along the way, three things that were already broken:

  - `tsc -p scripts` never ran anywhere and does not compile — its
    tsconfig omits the DOM lib while its import graph reaches
    src/style.ts, which uses `window`. There is now a lint:types script
    covering src, scripts and test.
  - TippecanoeFeature extended a bare Feature though placeFeature
    always emits a Point with fixed properties.
  - The README described a previous generation of the generator: wrong
    script path, wrong cut names, a zoom band that stops at z7 rather
    than z8, a shipped archive listed at 8.8 MB when it is 22 MiB, and
    markers painted "via MapLibre feature-state" when they are a
    fill-extrusion source.

publishConfig is dropped rather than `private`: geo depends on
@goauthentik/api via link:, which cannot survive publication, so the
package is unpublishable either way and publishConfig was the dead half.

* rust nits

Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>

* 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.

* Ignore build info.

* Ignore build info.

* Fix pins.

* Fix formatting.

* Fix duplicate package entries.

* Move runtime code to web.

---------

Signed-off-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
Co-authored-by: Teffen Ellis <teffen@Teffens-MacBook-Pro.local>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
2026-07-31 18:54:08 +00:00
authentik-automation[bot]
5cb6ee93ea root: bump version to 2026.11.0-rc1 (#24523)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com>
2026-07-31 17:22:34 +00:00
Connor Peshek
934f56d90a stages/authenticator_webauthn: remove prevent_duplicate_devices (#24450) 2026-07-30 11:59:13 -05:00
Dominic Roy
a4548cfc56 core: add user switching (#22659)
Signed-off-by: Dominic Roy <dominic@goauthentik.io>
2026-07-30 11:10:12 -04:00
Jens L.
c213711211 enterprise/providers/oauth2: dynamic client registration (#24225)
* I think I'm happy with this structure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add api

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix missing engine mode

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* pull in the requests machinery

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup and gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-wire things up

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-add more web stuff

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test issue

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix mixin

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* plumb in flows

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial web

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix a couple things

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api tests & schema

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better pick request flow

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* change method

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix web lint

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* explicit perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix migrations

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* concrete m2m

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add some default config

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix permission check -> requesting user checks against rule bindings' policies

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api client

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix styling

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix more

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add banner

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* attributes mixin prep for object attrs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix typo

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test failure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* ensure no self-approval

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* configurable expiry

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add meta info to requestable target

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add more events

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* only unique apps

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial app card impl

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add entitlement modal

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* respect filters

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* improve ux

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix child bindings?

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better ux for rule bindings

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix type check

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial dcr

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* handle error

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix missing through

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* oops

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Clean up checkbox item types.

* Fix grant type translation.

* fix conflicting urls

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix duplicate url encoding

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* always create app

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rename options to function as override

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* copy pb

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix title

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* copy bindings from app if none set

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* show policy bindings

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix copy & tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unknown case

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
2026-07-30 13:02:37 +01:00
Emil Burzo
bc9771f65f web: improve base url helper text (#24455) 2026-07-29 14:21:16 +00:00
Jens L.
b902328194 enterprise/requests: Add ability to request access (#24183)
* I think I'm happy with this structure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add api

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix missing engine mode

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* pull in the requests machinery

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup and gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-wire things up

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-add more web stuff

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test issue

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix mixin

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* plumb in flows

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial web

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix a couple things

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api tests & schema

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better pick request flow

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* change method

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix web lint

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* explicit perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix migrations

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* concrete m2m

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix perms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add some default config

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix permission check -> requesting user checks against rule bindings' policies

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix api client

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix styling

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix more

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add banner

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* attributes mixin prep for object attrs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix typo

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix unrelated test failure

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* ensure no self-approval

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* configurable expiry

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add meta info to requestable target

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add more events

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* only unique apps

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* initial app card impl

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add entitlement modal

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* respect filters

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* improve ux

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix child bindings?

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* better ux for rule bindings

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix type check

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* bug fixes

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix expanded display

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix a couple more and re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* codespell

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* de-dupe

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-07-28 20:18:12 +01:00
Marcelo Elizeche Landó
41514e54ca enterprise/core: add scheduled user offboarding (#23624)
* add USER_OFFBOARDED event

* Add UserOffboarding model

* add shared offboard_user service

* add offboarding API and scheduled sweeper

* regenerate schema and TS client

* first pass of offboarding UI

* add initiator for event audit attribution

* refactor ReviewerUser to PartialUser since now that's the way to go

* make it atomic

* prevent 2 workers to offboard an user at the same time

* update migration file

* fix linting

* add missing migration

* add test for prevent self offboard

* Add UserOffboarding.cancel() and log who cancelled

* Add confirmation dialog for cancel offboarding and add IDs to strings

* Reference user_id, not user, to avoid a DB fetch

* update schema and clients

* Add enum overrides for offboarding

* prevent duplicate offboardings and show API errors

* use send_with_options(rel_obj=Schedule…) so executions show under their schedule

* use partial index

* refactor comment

* Add datetime-local fallback

* prevent cancel/excecute race condition, make records inmutable

* add authentik.enterprise.core.revocation for shared functionality

* refactor account lockdown to use shared revocation functionality

* Simplify transaction

* switch to mixin composition for UserOffboardingViewSet

* use new @enterprise_test decorator

* refactor lifecycle app between review and offboarding

* prevent unnecessary redaction of revoke_tokens boolean in the logs

* prevent an user/admin to cancel their own offboarding

* rename scheduled_at and executed_at fields

* improve help text to be more accurate

* change button color

* use task.rel_obj, apply code review suggestions

---------

Signed-off-by: Marcelo Elizeche Landó <marcelo@goauthentik.io>
2026-07-27 15:44:42 -03:00
Amélie-Laura Lilith Krejčí
e36c628342 sources/ldap: implement nested group parentship sync (#19069)
* sources/ldap: add sync_group_parentage field

* sources/ldap: regenerate schema after adding field

* sources/ldap: add group parentage synchronizer

* web/admin: add LDAP source toggle for sync_group_parentage

* sources/ldap: rename LDAPSource fields to more accurate names

* web/admin: update admin UI with new field names

Also added better descriptions to all relevant fields, explaining how they interact with each other.

* sources/ldap: add unit tests

* sources/ldap: fix problem discovered by test

* sources/ldap: lint

* web/admin: lint

* website/docs: update LDAP source docs about lookup fields & membership

* sources/ldap: fix renamed attributes

* web/admin: make web

* sources/ldap: update tests and entries.json fixture

* sources/ldap: update migration with current help_text

* sources/ldap: fix lint error

* sources/ldap: restore membership.py to main, with renamed fields

in prep for separating out the synchronizers

* sources/ldap: abstract get_group into BaseMembershipLDAPSynchronizer

* sources/ldap: add separate ParentshipLDAPSynchronizer

* sources/ldap: fix wrong attribute name in extra parents filtering

* remove renames

* rename `sync_group_parents` to `sync_group_hierarchy`

* set `sync_group_hierarchy` default to `False`

This is a breaking change if it's `True`. It should be changed
eventually, but not in this release.

* revert pagination function change

I'm not entirely sure why, but this change hangs the test
`test_membership_sync_special_chars_in_group_dn`.

* add `sync_group_hierarchy` guard to hierarchy sync

* simplify hierarchy sync

* reword group `parentship` to `hierarchy`

* fix lint

* remove dead code

* move `syncGroupHierarchy` toggle next to similar toggles

---------

Co-authored-by: Simonyi Gergő <28359278+gergosimonyi@users.noreply.github.com>
Co-authored-by: Simonyi Gergő <gergo@goauthentik.io>
2026-07-24 18:04:38 +02:00
Emil Burzo
b233d487bb core, web, docs: introduce base URL (#24159) 2026-07-24 12:33:08 +00:00
Jens L.
cd18cf3a5c enterprise/providers/ws_fed: add SAML 1.1 support (#23851)
* enterprise/providers/ws_fed: add SAML 1.1 support

thanks microsoft

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix session_index

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix issuer

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* show issuer url in ui too

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* app slug in URL to lookup realm when not in parameters

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* broader cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* sigh

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* sigh nr 2

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-07-23 12:52:42 +01:00
Jens L.
ed08e2c80e core: object attributes - minor fixes (#24292)
* fix incorrect default group

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix getting object from path in ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fair point ken

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-07-22 16:00:16 +01:00
Jens L.
9cb7da2183 core: Object attributes (#21544)
* core: object attributes

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rework render

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* render raw attributes too

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* more fixes

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix forms

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* account for codemirror for attributes coming after a field for attributes.xyz overriding the previous field

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add enabled flag

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* refactor UI

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix form

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add enabled ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add group

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove used by

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* start adding default user attrs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix managed behaviour

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* improve ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add validation

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rename flags

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix missing array flag

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* make unique on enabled

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* start integrating attrs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix validation for array and prevent array + unique

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-gen migrations

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update fields

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix fallback being optional

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Clean up components.

* fix?

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* slight text tweakss

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Fix type cast.

* Flesh out array support.

* add more labels

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix rendering for empty group

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* rework validation

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* dont modify key

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix default value

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove is_array for now

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

* update ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Signed-off-by: Jens L. <jens@goauthentik.io>
Co-authored-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
2026-07-21 17:04:24 +01:00
Dominic Roy
b69327d79e website/docs: document email magic link login example (#23402) 2026-07-21 11:59:21 -04:00
Faruk Zahiragić
a5cc2c9dbd sources/oauth: allow long authorization URLs on OAuth sources (#24132)
* sources/oauth: allow long authorization URLs on OAuth sources

CharField(max_length=255) is too short for Authorization URLs that
include static query parameters such as CILogon's idphint with multiple
IdP EntityIDs. Switch the OAuth source URL fields to TextField, matching
oidc_well_known_url / oidc_jwks_url.

Co-authored-by: Cursor <cursoragent@cursor.com>

* sources/oauth: add test and regenerate schema for long URL fields

Add an API test covering saving an authorization URL longer than 255
characters, and regenerate schema.yml to drop the maxLength: 255
constraint now that these fields are TextField.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* sources/oauth: fix long-URL test to patch all required URL fields

Verified locally: full backend dev environment (Postgres, uv sync,
migrations), full authentik.sources.oauth suite (49 passed), schema.yml
diffed byte-for-byte against 'make gen-build' output (no diff), Ruff/Black
clean, no pending migrations.

* sources/oauth: regenerate blueprints/schema.json for URL TextField change

CI's test-gen job diffs blueprints/schema.json against 'make gen-build'
output; the earlier commit only updated schema.yml and missed this file.

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 16:21:49 +02:00
Simonyi Gergő
d0824fa66a core: make all m2m models explicit (#23315)
* require explicit m2m models

* core: explicit m2m

* endpoints: explcit m2m

* events: explicit m2m

* outposts: explicit m2m

* providers/oauth2: explicit m2m

* providers/rac: explicit m2m

* providers/scim: explicit m2m

* rbac: explicit m2m

* stages/authenticator_validate: explicit m2m

* stages/authenticator_webauthn: explicit m2m

* stages/identification: explicit m2m

* stages/prompt: explicit m2m

* brands: explicit m2m

* providers/google_workspace: explicit m2m

* providers/microsoft_entra: explicit m2m

* providers/ssf: explicit m2m

* stages/mtls: explicit m2m

* lifecycle: explicit m2m

* remove renaming tables and columns

* add DjangoGroup exception to explicit m2m

* DRF: treat simple explicit through models as if they were implicit

* `make gen`

* create `SimpleThroughModel` to inherit from

* add `InternallyManagedMixin` to `SimpleThroughModel`

* fixup! add `InternallyManagedMixin` to `SimpleThroughModel`

* fixup! fixup! add `InternallyManagedMixin` to `SimpleThroughModel`
2026-07-20 03:22:33 +02:00
Ethan Heilman
428bd7d79b providers/oauth2: OpenID key binding support (#22590)
* Adds OpenID key binding and tests

* Ensures dpop_jkt only set for key_bound scope, only JKT covered claims written to cnf

* Checks scope and jkt for device flow, makes library use more consistant, fixes RSA key size computation

* Fixes linter issues

* Addresses linter errors

* Fixes scopes name in device flow

* Increase test coverage

* Simplify jti cache mechanism

* Increased the JTI replay window to 3 minutes

* Refactoring, simplifying code

* Fix wrong JWK library (working with openpubkey again)

* Fix test, refactor errors

* fix authorize error calls

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove cnf from introspection

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove duplicate code_sha256

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix double parsing of key

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* re-migrate

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Ethan Heilman <ethan.r.heilman@gmail.com>
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Jens Langhammer <jens@goauthentik.io>
2026-07-16 10:48:23 +00:00
Jens L.
7e224970ab sources/oauth: improve id_token validation for apple source (#24017)
* sources/oauth: improve id_token validation for apple source

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* sigh

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-07-14 14:14:08 +01:00
Connor Peshek
2c22ee3c09 sources/saml: fix issuer generation and change to issuer_override (#22177)
* sources/saml: fix issuer generation

* change field to issuer override

* fix field description and form location

* update front-end and docs

* Update index.md

Signed-off-by: Dewi Roberts <dewi@goauthentik.io>

* build docs

---------

Signed-off-by: Dewi Roberts <dewi@goauthentik.io>
Co-authored-by: Dewi Roberts <dewi@goauthentik.io>
2026-07-14 09:19:24 +00:00
Aubin Morand
37669f0ebc providers/oauth2: token exchange (#23900)
* providers/oauth2: add token exchange grant type and error codes

Add the RFC 8693 grant type identifier, the token type identifiers for
access tokens and JWTs, and the invalid_target error code. The grant is
added to the available choices only; existing providers are not opted in.

Signed-off-by: Aubin Morand <aubin.mora@gmail.com>

* providers/oauth2: implement RFC 8693 token exchange

Add the token exchange grant to the token endpoint, implementing the
impersonation case: a subject token issued by a federated provider or
source is traded for an access token that speaks for the same user.

Subject tokens are verified through the existing JWT federation trust,
so a provider may only exchange tokens it already trusts for
machine-to-machine authentication. Confidential clients must
authenticate; the subject token is not a substitute for client
credentials.

Delegation is out of scope, so an actor token is refused rather than
ignored. Token targeting is likewise unimplemented, so audience and
resource are refused with invalid_target as required by RFC 8693
section 2.2.2. Both would otherwise leave a client believing a
restriction had been applied when it had not.

Signed-off-by: Aubin Morand <aubin.mora@gmail.com>

* providers/oauth2: add token exchange tests

Cover the impersonation path, the rejection of delegation and token
targeting, unsupported token types, untrusted and unverifiable subject
tokens, and the client authentication requirement.

Signed-off-by: Aubin Morand <aubin.mora@gmail.com>

* website: document the token exchange grant

Describe the trust configuration the grant relies on, the supported
token type identifiers, and the parameters authentik refuses rather
than silently ignores.

Signed-off-by: Aubin Morand <aubin.mora@gmail.com>

* core: regenerate schema and API client for token exchange

Signed-off-by: Aubin Morand <aubin.mora@gmail.com>

* web/admin: expose the token exchange grant type

Add the grant to the selectable list. It is deliberately absent from the
default grant types, so the grant stays opt-in for new providers.

Signed-off-by: Aubin Morand <aubin.mora@gmail.com>

* include more in login event

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Aubin Morand <aubin.mora@gmail.com>
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Jens Langhammer <jens@goauthentik.io>
2026-07-10 15:12:33 +01:00
Jens L.
6719f877ac stages/authenticator_webauthn: disable prevent_duplicate_devices by default (#23823)
* stages/authenticator_webauthn: disable prevent_duplicate_devices by default

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* sigh

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* sigh

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-07-07 18:13:10 +01:00
Dominic R
6df226188f providers/scim: Add GitLab compatibility mode (#22906)
* providers/scim: Add GitLab compatibility mode

Add a GitLab SCIM compatibility mode that skips ServiceProviderConfig probing and document when to use it.

Also wrap non-JSON SCIM responses so providers that return HTML redirects fall back through the existing ServiceProviderConfig default path.

Agent-thread: https://sdko.org/internal/thr/per/019ea36a-92dd-7651-8a2d-0d838e724a7d

A7k-product: product

A7k-product-repo: 1

Co-authored-by: Agent <agent@svc.sdko.net>

* providers/scim: Fold GitLab mode into existing migration

Agent-thread: https://sdko.org/internal/thr/ak/019ea7bd-ce63-77a2-90d6-5dcc25d4402d

A7k-product: product

A7k-product-repo: 2

Co-authored-by: Agent <agent@svc.sdko.net>

---------

Co-authored-by: Agent <agent@svc.sdko.net>
2026-06-15 16:30:07 -04:00
Dominic R
fc8424ac50 stages/captcha: add Cap and JSON verification support (#22373)
* stages/captcha: add Cap and JSON verification support

Add a configurable verification request content type so CAPTCHA providers can use either form-encoded or JSON token verification.

Add Cap as a preset and flow controller, including module-script loading, interactive widget handling, generated API/client types, tests, and docs.

* web/admin: clarify Cap captcha configuration

Treat the Cap endpoint as a form-only alias for the existing public key field and document Cap alongside the other CAPTCHA providers.

Agent-thread: https://sdko.org/internal/threads/019e737a-314e-72d0-98ae-201cb855df3a

A7k-product: product

A7k-product-repo: 2

Co-authored-by: Agent <agent@svc.sdko.net>

* stages/captcha: prefer self-hosted Cap widget URL

Default the Cap provider guidance to the self-hosted widget asset and keep CDN usage pinned to reviewed releases.

Agent-thread: https://sdko.org/internal/thr/ak/019ead31-2435-7e12-b933-e873155d6894

A7k-product: product

A7k-product-repo: 2

Co-authored-by: Agent <agent@svc.sdko.net>

* floating

---------

Co-authored-by: Agent <agent@svc.sdko.net>
Co-authored-by: Simonyi Gergő <28359278+gergosimonyi@users.noreply.github.com>
2026-06-11 16:15:21 +00:00
Dominic R
226c69d213 core, web: Remove stale compatibility paths (#22192)
* Remove stale compatibility paths

* fix schema

* should have vibecoded this

---------

Co-authored-by: Simonyi Gergő <28359278+gergosimonyi@users.noreply.github.com>
2026-06-10 12:31:48 -04:00
Marc 'risson' Schmitt
f4e4bfcbe5 root: fix schema and API clients (#22735)
* regenerate schema

Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>

* update ts client

Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>

---------

Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
2026-06-01 18:42:06 +02:00
Connor Peshek
b9e1b27d59 events: fix certificate typo (#22542)
authentik/events: fix certificate typo
2026-05-21 21:52:01 +00:00
Jens L.
a712e5bb2f enterprise/providers/scim: add support for interactive OAuth2 (#22072)
* enterprise/providers/scim: add support for interactive OAuth2

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* prep different oauth mode

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* implement it

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add data to API

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update ui

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixes

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* start adding tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add more tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove not-needed migration

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix last_updated not being updated

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-05-13 18:27:34 +02:00
Dominic R
b5deeaa822 enterprise: fix account lockdown target handling (#22246)
- Use the pending lockdown target in the example blueprint warning and avoid repeating the username when email/name is not distinct.

- Hide the admin Account Lockdown action for internal service accounts.
2026-05-12 01:59:00 +00:00
authentik-automation[bot]
ea61e1cf3b root: bump version to 2026.8.0-rc1 (#22167)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com>
2026-05-08 17:15:32 +00:00
Alexander Tereshkin
93abd2e041 stage/authenticator*: expand attempt throttling to email- and sms-based 2FA (#21751)
* stages/authenticator*: enable attempt throttling for email- and sms-based second authentication factor

* stages/authenticator*: add throttling tests

* stage/authenticator_validate: add throttling documentation

* Update website/docs/add-secure-apps/flows-stages/stages/authenticator_validate/index.mdx

Co-authored-by: Dominic R <dominic@sdko.org>
Signed-off-by: Alexander Tereshkin <96586+atereshkin@users.noreply.github.com>

* Update website/docs/add-secure-apps/flows-stages/stages/authenticator_validate/index.mdx

Co-authored-by: Dominic R <dominic@sdko.org>
Signed-off-by: Alexander Tereshkin <96586+atereshkin@users.noreply.github.com>

* stages/authenticator_validate: update docs wording

* Update website/docs/add-secure-apps/flows-stages/stages/authenticator_validate/index.mdx

Co-authored-by: Dominic R <dominic@sdko.org>
Signed-off-by: Alexander Tereshkin <96586+atereshkin@users.noreply.github.com>

* Update website/docs/add-secure-apps/flows-stages/stages/authenticator_validate/index.mdx

Co-authored-by: Dominic R <dominic@sdko.org>
Signed-off-by: Alexander Tereshkin <96586+atereshkin@users.noreply.github.com>

* Update website/docs/add-secure-apps/flows-stages/stages/authenticator_validate/index.mdx

Co-authored-by: Dominic R <dominic@sdko.org>
Signed-off-by: Alexander Tereshkin <96586+atereshkin@users.noreply.github.com>

---------

Signed-off-by: Alexander Tereshkin <96586+atereshkin@users.noreply.github.com>
Co-authored-by: Dominic R <dominic@sdko.org>
2026-05-07 12:12:06 -05:00
Marcelo Elizeche Landó
a8db2882ec stages/invitation: Invitation wizard (#20399) 2026-05-05 11:47:31 -05:00
Connor Peshek
a3b0180049 providers/oauth: make rp init logout oidc certification changes (#21815)
* providers/oauth: make rp init logout oidc certification changes

* update test

* slight rework

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add oidc certification tests

* test

* fix backchannel url

* make urls uniform

* update to main

* remove env bind

* cleanup patch

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fixup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add traefik healthcheck

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix healthcheck

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Jens Langhammer <jens@goauthentik.io>
2026-05-04 19:11:59 +02:00
Dominic R
821b74d7c1 enterprise: account lockdown (#18615) 2026-04-30 23:02:46 +00:00
Dominic R
899994027d core: support hashed password in users API + automated install (#18686)
* core: add hash_password command and password_hash bootstrap support

* core: prevent hash format exposure in validation error

* core: remove redundant password length check

* core: remove extra blank lines from hash_password command

* core: add password_hash serializer tests, refine validation and imports

* core: add null password fields test, add hash warning to docs

* core: move hash validation to User.set_password_from_hash method

* core: emit password_changed signal in set_password_from_hash

* website: remove redundant hash security warning

* core: wrap conflict error message for translation

* core: wrap invalid hash error message for translation

* web, core: add set_password_hash API endpoint and admin UI

* core: simplify password_hash check to None comparison

* core: use None check for password conflict validation

* website: clarify Docker Compose $ escaping for .env vs compose.yml

* website: lint

* web: lint

* core: add nosec comment for empty password string in signal

* core: lint

* web: Fix Password Hash help text

* sources/kerberos,ldap: Gergo's review

* add testing for ^^ and type fix

* more general signal tests; not provider specific

* only used in tests

* add warning

* we can do this

* signals fix????

* core, web, website: review fixes

* style(docs): format automated install guide

* web: restore modal invoker import after rebase

Co-authored-by: Codex <codex@openai.com>

* fix generated clients

* core: trim hash password command tests

* core: add password hash permission

* core: cover service account password hashes

* web: remove password hash form

* core: regenerate password hash migration

* core: reuse password serializer for hashes

* docs: clarify hashed password imports

* Regenerate

* core: deduplicate user serializer writes

* core: deduplicate password update actions

* core: deduplicate password change signaling

* tests: reuse password hash API helper

* tests: reuse SSF credential assertions

* docs: centralize hashed password caveat

* core: name password hash signal source

* core: centralize password hash validation

* core: deduplicate serializer password saves

* docs: link source writeback caveats

* api: clarify password hash request field

* tests: deduplicate password hash API assertions

* web: reuse user display-name helper

* web: use existing user display formatter

* core: reuse reset password permission for hash endpoint

* core: keep separate password hash serializer

* tests: remove redundant password hash permission test

* 21745

Co-authored-by: Gergo <gergo@goauthentik.io>

* core: preserve empty password handling in user serializer

* core: inline blueprint user serializer fields

* Use password hash constant

* Simplify user serializer flow

* Inline password update handling

* Apply serializer cleanup

* Clean blueprint password handling

* Drop extra returns

* Split password hash signal

* Align hash signal receivers

* Remove stale password guards

* Inline password signal

---------

Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Gergo <gergo@goauthentik.io>
2026-04-29 06:27:59 +02:00
Connor Peshek
a2ca19d718 providers/saml: generate issuer url when provider is set on app (#18022)
* providers/saml: generate issuer url in saml processors unless overridded

* remove issuer

* remove duplicate

* Generate url when assertion is created and save to session

* cleanup

* Fix front-end rendering of issuer

* Update web/src/admin/providers/saml/SAMLProviderViewPage.ts

Co-authored-by: Jens L. <jens@goauthentik.io>
Signed-off-by: Connor Peshek <connor@connorpeshek.me>

* Update authentik/providers/saml/models.py

Co-authored-by: Jens L. <jens@goauthentik.io>
Signed-off-by: Connor Peshek <connor@connorpeshek.me>

* Update authentik/providers/saml/models.py

Co-authored-by: Jens L. <jens@goauthentik.io>
Signed-off-by: Connor Peshek <connor@connorpeshek.me>

* use reverse for urls and update tests

* update issuer description

* Don't absorb sp entity id

* rename issuer_url to issuer_override

* fix migration file to rename to override

* fix migration file order

* lint, fix tests

* fix tests

* fix once again not importing the sp issuer

* build

* use const for default issuer

---------

Signed-off-by: Connor Peshek <connor@connorpeshek.me>
Co-authored-by: connor peshek <connorpeshek@connors-MacBook-Pro.local>
Co-authored-by: Jens L. <jens@goauthentik.io>
2026-04-28 17:31:12 -05:00
Marcelo Elizeche Landó
05005f4eb9 core: add support for hiding applications from the user dashboard (#21530)
* Add meta_hide field to hide apps

* exclude hidden applications from user dashboard

* Add the hide option to the UI

* Add schema

* Add hide setting to application wizard

* Add typescript client changes

* fix linting

* Convert blank://blank to meta_hide=True in the migration

* fix tests

* update docs

* fix continuous login

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Apply suggestions from code review

Co-authored-by: Dewi Roberts <dewi@goauthentik.io>
Signed-off-by: Marcelo Elizeche Landó <marce@melizeche.com>

* fix linting

* fix migrations

* Apply suggestions from code review

Co-authored-by: Dominic R <dominic@sdko.org>
Signed-off-by: Marcelo Elizeche Landó <marce@melizeche.com>

* rename all mentions of dashboard to My applications

* generate schema

* generate TS client

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Signed-off-by: Marcelo Elizeche Landó <marce@melizeche.com>
Co-authored-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Dewi Roberts <dewi@goauthentik.io>
Co-authored-by: Dominic R <dominic@sdko.org>
2026-04-28 13:05:56 -03:00
Dominic R
620387f294 providers/scim: fix vCenter compatibility mode (#21830) 2026-04-27 12:00:00 +00:00
Jens L.
8f1bdc01b6 providers/oauth2: Configure allowed grant types (#20363)
* naming cleanup

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* adjust defaults, start adding tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* more tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* gen

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix proxy

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add UI

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* attempt to fix e2e

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* allow refresh token for conformance

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix e2e

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-04-27 13:36:57 +02:00
Jens L.
c6ee7b6881 core: complete rework to oobe and setup experience (#21753)
* initial

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* use same startup template

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix check not working

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* unrelated: fix inspector auth

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update docs

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* ensure oobe flow can only accessed via correct url

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* set setup flag when applying bootstrap blueprint when env is set

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add system visibility to flags to make them non-editable

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* set setup flag for e2e tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests and linting

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix tests

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* make github lint happy

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* make tests have less assumptions

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* Update docs

* include more heuristics in migration

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add management command to set any flag

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* migrate worker command to signal

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* improved api for setting flags

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* short circuit

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Dewi Roberts <dewi@goauthentik.io>
2026-04-24 14:47:05 +02:00
Bapuji Koraganti
24edee3e78 flows: add warning message for expired password reset links (#21395)
* flows: add warning message for expired password reset links

Fixes #21306

* Replace token expiry check with REQUIRE_TOKEN authentication requirement

Incorporate review comments to move expired/invalid token handling from executor-level check to flow planner authentication requirement. This avoids disclosing whether a token ever existed and handles already-cleaned-up tokens.

* The fix was changing gettext_lazy to gettext

* remove unneeded migration

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update form

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Jens Langhammer <jens@goauthentik.io>
2026-04-22 15:09:05 +02:00
Jens L.
915b5a73fc enterprise/endpoints/connectors/agent: add independent secure enclave support for tap to login (#20766)
* enterprise/endpoints/connectors/agent: add independent secure enclave support for tap to login

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* format

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* fix API url

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* remove optional settings

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* add a missing text

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2026-04-18 20:29:17 +02:00