Compare commits

...

58 Commits
main ... main

Author SHA1 Message Date
08118088a8 chore: publish 7.3.1+2025.6.1 release 2025-06-11 13:24:23 -04:00
14e1d61343 chore: publish 7.3.0+2025.6.0 release 2025-06-04 13:22:03 -04:00
3wc
04a370699d chore: publish 7.2.0+2025.4.1 release 2025-05-16 20:13:46 +02:00
efd67032cf Merge pull request 'add commands to generate client id and secret' (#15) from benjaminlyng/authentik:docs/generating_nextcloud_SSO_secrets into main
Reviewed-on: coop-cloud/authentik#15
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2025-04-19 07:15:05 +00:00
6b627c6db7 add commands to generate client id and secret 2025-04-19 06:26:18 +02:00
3wc
c90b3c6881 chore: publish 7.1.0+2025.2.4 release 2025-04-09 13:53:38 +01:00
3wc
e7af2b541e README tweaks 2025-04-09 13:52:41 +01:00
ea9b0ebd55
Update custom css readme 2025-04-01 16:44:34 +02:00
06aafce852
README: custom css 2025-04-01 16:40:03 +02:00
3wc
3c2b248304 chore: publish 7.0.3+2025.2.3 release 2025-03-28 16:42:41 +00:00
bda409290e chore: publish 7.0.2+2025.2.2 release 2025-03-23 12:01:40 +01:00
many
77d79b3a07 chore: publish 7.0.1+2025.2.0 release 2025-02-28 16:34:52 -05:00
ac7192e6ab Merge pull request 'Fix race condition when setting admin password with POST_DEPLOY_CMDS' (#13) from virtualboys/authentik:main into main
Reviewed-on: coop-cloud/authentik#13
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
Reviewed-by: ammaratef45 <ammaratef45@proton.me>
2025-02-27 16:41:42 +00:00
many
d6bd030880 Fix race condition when setting admin password with POST_DEPLOY_CMDS 2025-02-26 17:21:09 -05:00
3wc
7a2c45137f chore: publish 7.0.0+2025.2.0 release 2025-02-26 12:16:17 -05:00
86ce0820bc
add vaultwarden icon 2025-02-24 15:22:15 +01:00
6fcba9ff03 add pretix icon 2025-02-13 14:45:32 +01:00
43700b2562 add shell command 2025-02-11 15:07:52 +01:00
3wc
35d48cc4c4 chore: publish 6.12.0+2024.12.3 release 2025-02-05 12:16:36 -05:00
3wc
64100ce3a4 Merge branch 'main' of ssh://git.coopcloud.tech:2222/coop-cloud/authentik 2025-02-05 12:15:13 -05:00
3wc
abc1ed307c Updates in response to PR feedback 2025-02-05 12:15:07 -05:00
a5b5395bdf update .env.sample and drop unused volume 2025-02-05 12:15:07 -05:00
97ce2e451a don't create a new volume 2025-02-05 12:15:07 -05:00
3wc
98a5d4b726 Work towards custom CSS in volume 2025-02-05 12:15:07 -05:00
d0c924a864 chore: publish 6.11.1+2024.10.5 release 2025-01-20 22:28:24 +01:00
5df1f34cd7 UX: rename matrix to element 2025-01-20 22:28:24 +01:00
bc62831e58 fix blueprints: add redirect_uris 2025-01-20 22:28:20 +01:00
fa854f6490 fix add_applications 2025-01-20 17:54:46 +01:00
6abe8e67d4 add set_extra_icons function 2025-01-20 17:54:40 +01:00
d494d3ea5f Update .drone.yml 2025-01-08 10:09:12 -08:00
344db235b0 Merge pull request 'Custom CSS in volume' (#9) from custom-css-volume into main
Reviewed-on: coop-cloud/authentik#9
2025-01-07 15:16:21 +00:00
3wc
40e613f861 Updates in response to PR feedback 2025-01-07 10:15:53 -05:00
47793df102 chore: publish 6.11.0+2024.10.5 release 2024-12-23 11:04:48 +01:00
e2a8f2340f update .env.sample and drop unused volume 2024-12-03 17:06:22 +01:00
fc846af1e3 don't create a new volume 2024-12-03 16:39:32 +01:00
52719f8d3a update readme on ldap outpost 2024-11-22 16:40:40 +01:00
0175c0b0f4 chore: publish 6.10.1+2024.10.4 release 2024-11-22 16:10:07 +01:00
9db9d077ca chore: publish 6.10.0+2024.10.4 release 2024-11-22 16:00:34 +01:00
66e31d8632 chore: publish 6.9.0+2024.10.0 release 2024-11-22 15:56:55 +01:00
f1aec8ce90 add ldap outpost configuration 2024-11-22 15:54:52 +01:00
3wc
03797a34db Work towards custom CSS in volume 2024-11-18 15:59:07 -05:00
5e5da361e5 chore: publish 6.8.1+2024.10.0 release 2024-11-04 17:38:10 +01:00
830214b1fd fix custom css version 2024-11-04 17:26:02 +01:00
6d46686a24 chore: publish 6.8.0+2024.10.0 release 2024-11-04 17:09:21 +01:00
912691844e fix provider blueprints 2024-11-04 17:09:21 +01:00
84f8f5b165 fix traefik redirection for matrix well-known files 2024-11-04 13:13:30 +01:00
aa107d0ad4 fix drone runner 2024-10-30 15:49:57 +01:00
5e49903b3f chore: publish 6.7.1+2024.8.3 release 2024-10-30 15:12:37 +01:00
9124dab6ab update pg_backup.sh 2024-10-22 21:32:26 +02:00
197feb32f3 add ENABLE_BACKUPS label 2024-10-22 17:26:10 +02:00
df670cea2b add backup script 2024-10-15 19:39:57 +02:00
eeef43529e remove zammad meta_launch_url to enable autologin 2024-10-15 10:57:46 +02:00
6b0195e5a1 update .env comment 2024-10-15 10:04:29 +02:00
f342673d43 Merge pull request 'default config sets POST_DEPLOY_CMDS, so that admin pass will get initialized' (#8) from marlon/authentik:main into main
Reviewed-on: coop-cloud/authentik#8
2024-10-15 08:01:56 +00:00
f6f6f90bed update custom css 2024-10-01 22:57:54 +02:00
f1f5b96309 chore: publish 6.7.0+2024.8.3 release 2024-09-30 15:10:48 +02:00
3wc
3cba20afd9 chore: publish 6.6.0+2024.8.2 release 2024-09-25 13:40:14 -04:00
bed917a28c added release note for bbb icon change 2024-09-25 14:55:25 +02:00
31 changed files with 318 additions and 477 deletions

View File

@ -31,6 +31,7 @@ steps:
SECRET_ADMIN_PASS_VERSION: v1 SECRET_ADMIN_PASS_VERSION: v1
SECRET_EMAIL_PASS_VERSION: v1 SECRET_EMAIL_PASS_VERSION: v1
DB_ENTRYPOINT_VERSION: v1 DB_ENTRYPOINT_VERSION: v1
PG_BACKUP_VERSION: v2
trigger: trigger:
branch: branch:
- main - main
@ -46,7 +47,7 @@ steps:
from_secret: drone_abra-bot_token from_secret: drone_abra-bot_token
fork: true fork: true
repositories: repositories:
- coop-cloud/auto-recipes-catalogue-json - toolshed/auto-recipes-catalogue-json
trigger: trigger:
event: tag event: tag

View File

@ -2,8 +2,9 @@ TYPE=authentik
TIMEOUT=900 TIMEOUT=900
ENABLE_AUTO_UPDATE=true ENABLE_AUTO_UPDATE=true
POST_DEPLOY_CMDS="worker set_admin_pass" POST_DEPLOY_CMDS="worker set_admin_pass"
# POST_DEPLOY_CMDS="worker set_admin_pass|worker apply_blueprints|worker add_applications" # Example values for post deploy cmds: "worker set_admin_pass|worker apply_blueprints|worker add_applications"
LETS_ENCRYPT_ENV=production LETS_ENCRYPT_ENV=production
ENABLE_BACKUPS=true
DOMAIN=authentik.example.com DOMAIN=authentik.example.com
## Domain aliases ## Domain aliases
@ -17,6 +18,8 @@ AUTHENTIK_LOG_LEVEL=info
## Outpost Integration ## Outpost Integration
# COMPOSE_FILE="$COMPOSE_FILE:compose.outposts.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.outposts.yml"
# COMPOSE_FILE="$COMPOSE_FILE:compose.outposts.ldap.yml"
# SECRET_LDAP_TOKEN_VERSION=v1
## ADMIN ## ADMIN
AUTHENTIK_BOOTSTRAP_EMAIL=admin@example.com AUTHENTIK_BOOTSTRAP_EMAIL=admin@example.com
@ -46,15 +49,20 @@ SECRET_EMAIL_PASS_VERSION=v1
# EMAIL_SUBJECT="Account Recovery" # EMAIL_SUBJECT="Account Recovery"
# EMAIL_TOKEN_EXPIRY_MINUTES=30 # EMAIL_TOKEN_EXPIRY_MINUTES=30
## assets
COPY_ASSETS="flow_background.jpg|app:/web/dist/assets/images/" COPY_ASSETS="flow_background.jpg|app:/web/dist/assets/images/"
COPY_ASSETS="$COPY_ASSETS icon_left_brand.svg|app:/web/dist/assets/icons/" COPY_ASSETS="$COPY_ASSETS icon_left_brand.svg|app:/web/dist/assets/icons/"
COPY_ASSETS="$COPY_ASSETS icon.png|app:/web/dist/assets/icons/" COPY_ASSETS="$COPY_ASSETS icon.png|app:/web/dist/assets/icons/"
# Default CSS customisation, just background colour # store custom CSS in a css-volume
COMPOSE_FILE="$COMPOSE_FILE:compose.css.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.css-volume.yml"
AUTHENTIK_COLOR_BACKGROUND_LIGHT=#1c1e21 # NOTE: this causes the authentik container to run as `root` initially; it uses `su` to drop privileges but technically could introduce a security risk. proceed with caution!
# Custommise the entire custom CSS file
#COMPOSE_FILE="$COMPOSE_FILE:compose.css.yml" # Default CSS customisation
# COMPOSE_FILE="$COMPOSE_FILE:compose.css.yml"
# BACKGROUND_FONT_COLOR=white
# BACKGROUND_BOX_COLOR='#eaeaeacf'
# THEME_BACKGROUND="url('https://authentik.example.com/static/dist/assets/images/flow_background.jpg'); background-position: center; background-repeat: no-repeat; background-size: cover;"
# COMPOSE_FILE="$COMPOSE_FILE:compose.nextcloud.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.nextcloud.yml"
# NEXTCLOUD_DOMAIN=nextcloud.example.com # NEXTCLOUD_DOMAIN=nextcloud.example.com
@ -122,6 +130,5 @@ AUTHENTIK_COLOR_BACKGROUND_LIGHT=#1c1e21
# SECRET_HEDGEDOC_SECRET_VERSION=v1 # SECRET_HEDGEDOC_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS hedgedoc:~/.abra/recipes/authentik/icons/hedgedoc.png" # APP_ICONS="$APP_ICONS hedgedoc:~/.abra/recipes/authentik/icons/hedgedoc.png"
# APPLICATIONS='{"Calendar": "https://nextcloud.example.com/apps/calendar/", "BBB": "https://nextcloud.example.com/apps/bbb/"}' # APPLICATIONS='{"Calendar": "https://nextcloud.example.com/apps/calendar/", "BBB": "https://nextcloud.example.com/apps/bbb/", "Pretix": "https://pretix.example.com/control/"}'
# APP_ICONS="$APP_ICONS Calendar:~/.abra/recipes/authentik/icons/calendar.svg" # EXTRA_ICONS={"Calendar": "~/.abra/recipes/authentik/icons/calendar.svg", "BBB": "~/.abra/recipes/authentik/icons/bbb.png", "Pretix": "~/.abra/recipes/authentik/icons/pretix.svg"}
# APP_ICONS="$APP_ICONS BBB:~/.abra/recipes/authentik/icons/bbb.png"

View File

@ -52,8 +52,26 @@ APP_ICONS="nextcloud:~/.abra/recipes/authentik/icons/nextcloud.png"
Set the nextcloud Icon using `abra app cmd -l -d <app_name> set_icons` Set the nextcloud Icon using `abra app cmd -l -d <app_name> set_icons`
Generate OAuth client id and secret using `abra app secret generate <app_name> -a` (all secrets) or individually:
- `abra app secret generate <app_name> nextcloud_id`
- `abra app secret generate <app_name> nextcloud_secret`
Add the id and secret to nextcloud as secrets with:
- `abra app secret insert <nextcloud_app_name> authentik_id v1 <id>`
- `abra app secret insert <nextcloud_app_name> authentik_secret v1 <secret>`
Redeploy Authentik to enable the nextcloud client.
The configuration inside Nextcloud can be found in the [nextcloud recipe](https://git.coopcloud.tech/coop-cloud/nextcloud#authentik-integration) The configuration inside Nextcloud can be found in the [nextcloud recipe](https://git.coopcloud.tech/coop-cloud/nextcloud#authentik-integration)
## Add LDAP outpost
- Follow [this official guide](https://docs.goauthentik.io/docs/add-secure-apps/providers/ldap/generic_setup) and skip the LDAP Flow as we don't need it.
- Copy token under `Applications` -> `Outposts` `-> `View Deployment Info`
- Comment in envs for compose.outposts.ldap.yaml and secret version
- Insert token as secret `abra app secret insert <DOMAIN> ldap_token v1 <TOKEN>`
- Update deployment -> Outpost should be up and running
## Import User from CSV ## Import User from CSV
Users can be imported from a CSV file of the following format: Users can be imported from a CSV file of the following format:
@ -87,6 +105,25 @@ Run this command after every deploy/upgrade:
`abra app command --local <app-name> customize <assets_path>` `abra app command --local <app-name> customize <assets_path>`
## Custom CSS
Uncomment the following env:
```
COMPOSE_FILE="$COMPOSE_FILE:compose.css-volume.yml"
```
Redeploy the app:
```
abra app deploy -f <app_name>
```
Copy the CSS and restart the container:
```
abra app cp <app_name> my_custom.css app:/web/dist/assets/custom.css
abra app restart <app_name> app
```
## Email templates ## Email templates
Add custom [email templates](https://goauthentik.io/docs/flow/stages/email/#custom-templates): Add custom [email templates](https://goauthentik.io/docs/flow/stages/email/#custom-templates):
@ -97,15 +134,15 @@ Add custom [email templates](https://goauthentik.io/docs/flow/stages/email/#cust
These blueprints overwrite default blueprint values: These blueprints overwrite default blueprint values:
- flow_translation.yaml - `flow_translation.yaml`
- flow_authentication.yaml - `flow_authentication.yaml`
The following default blueprints will be overwritten by customizations: The following default blueprints will be overwritten by customizations:
- flow-password-change.yaml - `flow-password-change.yaml`
- flow-default-authentication-flow.yaml - `flow-default-authentication-flow.yaml`
- flow-default-user-settings-flow.yaml - `flow-default-user-settings-flow.yaml`
- flow-default-source-enrollment.yaml - `flow-default-source-enrollment.yaml`
The `abra.sh` function `apply_blueprints` needs to be executed to deactivate these blueprints to ensure that the customizations won't be overwritten. It will further execute flow_translation.yaml and flow_authentication.yaml again. The `abra.sh` function `apply_blueprints` needs to be executed to deactivate these blueprints to ensure that the customizations won't be overwritten. It will further execute flow_translation.yaml and flow_authentication.yaml again.

73
abra.sh
View File

@ -1,22 +1,24 @@
export CUSTOM_CSS_VERSION=v2 export CUSTOM_CSS_VERSION=v3
export FLOW_AUTHENTICATION_VERSION=v4 export FLOW_AUTHENTICATION_VERSION=v4
export FLOW_INVITATION_VERSION=v2 export FLOW_INVITATION_VERSION=v2
export FLOW_INVALIDATION_VERSION=v2 export FLOW_INVALIDATION_VERSION=v2
export FLOW_RECOVERY_VERSION=v1 export FLOW_RECOVERY_VERSION=v1
export FLOW_TRANSLATION_VERSION=v3 export FLOW_TRANSLATION_VERSION=v3
export SYSTEM_BRAND_VERSION=v3 export SYSTEM_BRAND_VERSION=v4
export NEXTCLOUD_CONFIG_VERSION=v1 export NEXTCLOUD_CONFIG_VERSION=v3
export WORDPRESS_CONFIG_VERSION=v2 export WORDPRESS_CONFIG_VERSION=v4
export MATRIX_CONFIG_VERSION=v1 export MATRIX_CONFIG_VERSION=v3
export WEKAN_CONFIG_VERSION=v3 export WEKAN_CONFIG_VERSION=v5
export VIKUNJA_CONFIG_VERSION=v1 export VIKUNJA_CONFIG_VERSION=v3
export OUTLINE_CONFIG_VERSION=v2 export OUTLINE_CONFIG_VERSION=v4
export KIMAI_CONFIG_VERSION=v1 export KIMAI_CONFIG_VERSION=v3
export ZAMMAD_CONFIG_VERSION=v1 export ZAMMAD_CONFIG_VERSION=v4
export RALLLY_CONFIG_VERSION=v2 export RALLLY_CONFIG_VERSION=v4
export HEDGEDOC_CONFIG_VERSION=v1 export HEDGEDOC_CONFIG_VERSION=v3
export MONITORING_CONFIG_VERSION=v2 export MONITORING_CONFIG_VERSION=v4
export DB_ENTRYPOINT_VERSION=v1 export DB_ENTRYPOINT_VERSION=v1
export PG_BACKUP_VERSION=v2
export ENTRYPOINT_CSS_VERSION=v1
customize() { customize() {
if [ -z "$1" ] if [ -z "$1" ]
@ -33,6 +35,15 @@ customize() {
done done
} }
shell(){
if [ -z "$1" ]
then
echo "Usage: ... shell <python code>"
exit 1
fi
ak shell -c "$1" 2>&1 | quieten
}
import_user() { import_user() {
if [ -z "$1" ] if [ -z "$1" ]
then then
@ -77,6 +88,16 @@ set_admin_pass() {
password=$(cat /run/secrets/admin_pass) password=$(cat /run/secrets/admin_pass)
token=$(cat /run/secrets/admin_token) token=$(cat /run/secrets/admin_token)
/manage.py shell -c """ /manage.py shell -c """
import time
i = 0
while (not User.objects.filter(username='akadmin')):
print('Waiting for akadmin to be created...')
time.sleep(10)
i += 1
if i > 6:
print('Failed to find admin user!')
exit()
akadmin = User.objects.get(username='akadmin') akadmin = User.objects.get(username='akadmin')
akadmin.set_password('$password') akadmin.set_password('$password')
akadmin.save() akadmin.save()
@ -157,11 +178,13 @@ print(f'{blueprint.name} enabled: {blueprint.enabled}')
} }
add_applications(){ add_applications(){
export APPLICATIONS
/manage.py shell -c """ /manage.py shell -c """
import json import json
if '$APPLICATIONS' == '': import os
if os.environ['APPLICATIONS'] == '':
exit() exit()
applications = json.loads('$APPLICATIONS') applications = json.loads(os.environ['APPLICATIONS'])
for name, url in applications.items(): for name, url in applications.items():
print(f'Add {name}: {url}') print(f'Add {name}: {url}')
app = Application.objects.filter(name=name).first() app = Application.objects.filter(name=name).first()
@ -190,6 +213,10 @@ done
} }
set_icons(){ set_icons(){
if [ -n "$1" ]
then
APP_ICONS="$1"
fi
for icon in $APP_ICONS; do for icon in $APP_ICONS; do
app=$(echo $icon | cut -d ":" -f1) app=$(echo $icon | cut -d ":" -f1)
file_path=$(eval echo $(echo $icon | cut -d ":" -f2)) file_path=$(eval echo $(echo $icon | cut -d ":" -f2))
@ -200,6 +227,22 @@ for icon in $APP_ICONS; do
done done
} }
set_extra_icons(){
if [ -z "$EXTRA_ICONS" ]
then
echo "Variable EXTRA_ICONS is not set"
exit 1
fi
export EXTRA_ICONS
icon_key_values=$(python3 -c "
import json
import os
for key, value in json.loads(os.environ['EXTRA_ICONS']).items():
print(f'{key}:{value}')
")
set_icons "$icon_key_values"
}
set_app_icon() { set_app_icon() {
TOKEN=$(cat /run/secrets/admin_token) TOKEN=$(cat /run/secrets/admin_token)
python -c """ python -c """

16
compose.css-volume.yml Normal file
View File

@ -0,0 +1,16 @@
---
version: "3.8"
services:
app:
user: root
entrypoint: /docker-entrypoint.sh
configs:
- source: entrypoint_css
target: /docker-entrypoint.sh
mode: 0555
configs:
entrypoint_css:
name: ${STACK_NAME}_entrypoint_css_${ENTRYPOINT_CSS_VERSION}
file: entrypoint-css-volume.sh

View File

@ -3,15 +3,16 @@ services:
app: app:
deploy: deploy:
labels: labels:
- "traefik.http.routers.${STACK_NAME}.middlewares=redirect-matrix-well-known" - "traefik.http.routers.${STACK_NAME}.middlewares=${STACK_NAME}-redirect-matrix-well-known"
- "traefik.http.middlewares.redirect-matrix-well-known.redirectregex.regex=^https://(.*)/.well-known/matrix/(.*)" - "traefik.http.middlewares.${STACK_NAME}-redirect-matrix-well-known.redirectregex.regex=^https://(.*)/.well-known/matrix/(.*)"
- "traefik.http.middlewares.redirect-matrix-well-known.redirectregex.replacement=https://${MATRIX_DOMAIN}/.well-known/matrix/$$2" - "traefik.http.middlewares.${STACK_NAME}-redirect-matrix-well-known.redirectregex.replacement=https://${MATRIX_DOMAIN}/.well-known/matrix/$$2"
worker: worker:
secrets: secrets:
- matrix_id - matrix_id
- matrix_secret - matrix_secret
environment: environment:
- ELEMENT_DOMAIN - ELEMENT_DOMAIN
- MATRIX_DOMAIN
configs: configs:
- source: matrix - source: matrix
target: /blueprints/matrix.yaml target: /blueprints/matrix.yaml

23
compose.outposts.ldap.yml Normal file
View File

@ -0,0 +1,23 @@
version: "3.8"
services:
authentik_ldap:
image: ghcr.io/goauthentik/ldap:2025.6.1
# Optionally specify which networks the container should be
# might be needed to reach the core authentik server
networks:
- internal
- proxy
ports:
- 389:3389
- 636:6636
secrets:
- ldap_token
environment:
- AUTHENTIK_HOST=https://${DOMAIN}
- AUTHENTIK_INSECURE=true
- AUTHENTIK_TOKEN=file:///run/secrets/ldap_token
secrets:
ldap_token:
external: true
name: ${STACK_NAME}_ldap_token_${SECRET_LDAP_TOKEN_VERSION}

View File

@ -17,8 +17,8 @@ x-env: &env
- AUTHENTIK_EMAIL__TIMEOUT - AUTHENTIK_EMAIL__TIMEOUT
- AUTHENTIK_EMAIL__FROM - AUTHENTIK_EMAIL__FROM
- AUTHENTIK_LOG_LEVEL - AUTHENTIK_LOG_LEVEL
- AUTHENTIK_SETTINGS__THEME__BACKGROUND - BACKGROUND_FONT_COLOR=${BACKGROUND_FONT_COLOR:-white}
- AUTHENTIK_COLOR_BACKGROUND_LIGHT - BACKGROUND_BOX_COLOR=${BACKGROUND_BOX_COLOR:-#eaeaeacf}
- AUTHENTIK_FOOTER_LINKS - AUTHENTIK_FOOTER_LINKS
- AUTHENTIK_IMPERSONATION - AUTHENTIK_IMPERSONATION
- AUTHENTIK_BOOTSTRAP_EMAIL - AUTHENTIK_BOOTSTRAP_EMAIL
@ -29,11 +29,12 @@ x-env: &env
- DOMAIN - DOMAIN
- LOGOUT_REDIRECT - LOGOUT_REDIRECT
- APPLICATIONS - APPLICATIONS
- THEME_BACKGROUND
version: '3.8' version: '3.8'
services: services:
app: app:
image: ghcr.io/goauthentik/server:2024.6.3 image: ghcr.io/goauthentik/server:2025.6.1
command: server command: server
depends_on: depends_on:
- db - db
@ -71,11 +72,11 @@ services:
- "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLHost=${DOMAIN}" - "traefik.http.middlewares.${STACK_NAME}-redirect.headers.SSLHost=${DOMAIN}"
- "traefik.http.middlewares.${STACK_NAME}-frameOptions.headers.customFrameOptionsValue=SAMEORIGIN" - "traefik.http.middlewares.${STACK_NAME}-frameOptions.headers.customFrameOptionsValue=SAMEORIGIN"
- "traefik.http.middlewares.${STACK_NAME}-frameOptions.headers.contentSecurityPolicy=frame-ancestors ${X_FRAME_OPTIONS_ALLOW_FROM}" - "traefik.http.middlewares.${STACK_NAME}-frameOptions.headers.contentSecurityPolicy=frame-ancestors ${X_FRAME_OPTIONS_ALLOW_FROM}"
- "coop-cloud.${STACK_NAME}.version=6.5.0+2024.6.3" - "coop-cloud.${STACK_NAME}.version=7.3.1+2025.6.1"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}" - "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
worker: worker:
image: ghcr.io/goauthentik/server:2024.6.3 image: ghcr.io/goauthentik/server:2025.6.1
command: worker command: worker
depends_on: depends_on:
- db - db
@ -116,13 +117,16 @@ services:
start_period: 5m start_period: 5m
db: db:
image: postgres:15.7 image: postgres:15.13
secrets: secrets:
- db_password - db_password
configs: configs:
- source: db_entrypoint - source: db_entrypoint
target: /docker-entrypoint.sh target: /docker-entrypoint.sh
mode: 0555 mode: 0555
- source: pg_backup
target: /pg_backup.sh
mode: 0555
entrypoint: entrypoint:
/docker-entrypoint.sh /docker-entrypoint.sh
volumes: volumes:
@ -141,15 +145,14 @@ services:
- POSTGRES_DB=authentik - POSTGRES_DB=authentik
deploy: deploy:
labels: labels:
backupbot.backup: "true" backupbot.backup: "${ENABLE_BACKUPS:-true}"
backupbot.backup.pre-hook: "PGPASSWORD=$$(cat /run/secrets/db_password) pg_dump -U $${POSTGRES_USER} $${POSTGRES_DB} > /var/lib/postgresql/data/backup.sql" backupbot.backup.pre-hook: "/pg_backup.sh backup"
backupbot.backup.post-hook: "rm -rf /var/lib/postgresql/data/backup.sql"
backupbot.backup.volumes.database.path: "backup.sql" backupbot.backup.volumes.database.path: "backup.sql"
backupbot.backup.volumes.redis: "false" backupbot.backup.volumes.redis: "false"
backupbot.restore.post-hook: 'psql -U authentik -d postgres -c "DROP DATABASE authentik WITH (FORCE);" && createdb -U authentik authentik && psql -U authentik -d authentik -f /var/lib/postgresql/data/backup.sql' backupbot.restore.post-hook: '/pg_backup.sh restore'
redis: redis:
image: redis:7.4.0-alpine image: redis:8.0.2-alpine
command: --save 60 1 --loglevel warning command: --save 60 1 --loglevel warning
networks: networks:
- internal - internal
@ -221,3 +224,6 @@ configs:
name: ${STACK_NAME}_db_entrypoint_${DB_ENTRYPOINT_VERSION} name: ${STACK_NAME}_db_entrypoint_${DB_ENTRYPOINT_VERSION}
file: entrypoint.postgres.sh.tmpl file: entrypoint.postgres.sh.tmpl
template_driver: golang template_driver: golang
pg_backup:
name: ${STACK_NAME}_pg_backup_${PG_BACKUP_VERSION}
file: pg_backup.sh

View File

@ -1,24 +1,13 @@
/* my custom css */ /* my custom css */
:root { :root {
--ak-accent: #fd4b2d; --pf-global--BackgroundColor--100: {{ env "BACKGROUND_BOX_COLOR" }} !important;
--ak-dark-foreground: #fafafa;
--ak-dark-foreground-darker: #bebebe;
--ak-dark-foreground-link: #5a5cb9;
--ak-dark-background: #18191a;
--ak-dark-background-darker: #000000;
--ak-dark-background-light: {{ env "AUTHENTIK_COLOR_BACKGROUND_LIGHT" }};
--ak-dark-background-light-ish: #212427;
--ak-dark-background-lighter: #2b2e33;
--pf-c-background-image--BackgroundImage: var(--ak-flow-background);
--pf-c-background-image--BackgroundImage-2x: var(--ak-flow-background);
--pf-c-background-image--BackgroundImage--sm: var(--ak-flow-background);
--pf-c-background-image--BackgroundImage--sm-2x: var(--ak-flow-background);
--pf-c-background-image--BackgroundImage--lg: var(--ak-flow-background);
} }
.pf-c-login__main {
background-color: {{ env "BACKGROUND_BOX_COLOR" }};
}
.pf-c-content h1 {
color: {{ env "BACKGROUND_FONT_COLOR" }};
}

View File

@ -1,405 +0,0 @@
version: 1
metadata:
labels:
blueprints.goauthentik.io/instantiate: "true"
name: Custom - Flows
context:
welcome_message: {{ if eq (env "WELCOME_MESSAGE") "" }} "Welcome to authentik!" {{ else }} {{ env "WELCOME_MESSAGE" }} {{ end }}
####### Translations ########
transl_recovery: {{ if eq (env "DEFAULT_LANGUAGE") "de" }} "Passwort Zurücksetzen" {{ else }} "Reset your password" {{ end }}
transl_password: {{ if eq (env "DEFAULT_LANGUAGE") "de" }} "Passwort" {{ else }} "Password" {{ end }}
transl_password_repeat: {{ if eq (env "DEFAULT_LANGUAGE") "de" }} "Passwort (wiederholen)" {{ else }} "Password (repeat)" {{ end }}
transl_username: {{ if eq (env "DEFAULT_LANGUAGE") "de" }} "Benutzername" {{ else }} "Username" {{ end }}
transl_name: {{ if eq (env "DEFAULT_LANGUAGE") "de" }} "Vor- und Nachname" {{ else }} "Full name" {{ end }}
entries:
######## Email Recovery Flow ########
- identifiers:
slug: default-recovery-flow
id: recovery_flow
model: authentik_flows.flow
attrs:
name: Default recovery flow
title: !Context transl_recovery
designation: recovery
### PROMPTS
- identifiers:
field_key: password
id: prompt-field-password
model: authentik_stages_prompt.prompt
attrs:
label: !Context transl_password
type: password
required: true
placeholder: !Context transl_password
order: 30
placeholder_expression: false
- identifiers:
field_key: password_repeat
id: prompt-field-password-repeat
model: authentik_stages_prompt.prompt
attrs:
label: !Context transl_password_repeat
type: password
required: true
placeholder: !Context transl_password_repeat
order: 31
placeholder_expression: false
### STAGES
- identifiers:
name: default-recovery-email
id: default-recovery-email
model: authentik_stages_email.emailstage
attrs:
use_global_settings: true
token_expiry: {{ if eq (env "EMAIL_TOKEN_EXPIRY_MINUTES") "" }} 30 {{ else }} {{ env "EMAIL_TOKEN_EXPIRY_MINUTES" }} {{ end }}
subject: {{ if eq (env "EMAIL_SUBJECT") "" }} "Account Recovery" {{ else }} "{{ env "EMAIL_SUBJECT" }}" {{ end }}
template: email/password_reset.html
activate_user_on_success: true
- identifiers:
name: default-recovery-user-write
id: default-recovery-user-write
model: authentik_stages_user_write.userwritestage
- identifiers:
name: default-recovery-identification
id: default-recovery-identification
model: authentik_stages_identification.identificationstage
attrs:
user_fields:
- email
- username
- identifiers:
name: default-recovery-user-login
id: default-recovery-user-login
model: authentik_stages_user_login.userloginstage
attrs:
session_duration: seconds=0
- identifiers:
name: Change your password
id: stage-prompt-password
model: authentik_stages_prompt.promptstage
attrs:
fields:
- !KeyOf prompt-field-password
- !KeyOf prompt-field-password-repeat
validation_policies: []
### STAGE BINDINGS
- identifiers:
target: !KeyOf recovery_flow
stage: !KeyOf default-recovery-identification
order: 10
model: authentik_flows.flowstagebinding
id: flow-binding-identification
attrs:
evaluate_on_plan: true
re_evaluate_policies: true
policy_engine_mode: any
invalid_response_action: retry
- identifiers:
target: !KeyOf recovery_flow
stage: !KeyOf default-recovery-email
order: 20
model: authentik_flows.flowstagebinding
id: flow-binding-email
attrs:
evaluate_on_plan: true
re_evaluate_policies: true
policy_engine_mode: any
invalid_response_action: retry
- identifiers:
target: !KeyOf recovery_flow
stage: !KeyOf stage-prompt-password
order: 30
model: authentik_flows.flowstagebinding
attrs:
evaluate_on_plan: true
re_evaluate_policies: false
policy_engine_mode: any
invalid_response_action: retry
- identifiers:
target: !KeyOf recovery_flow
stage: !KeyOf default-recovery-user-write
order: 40
model: authentik_flows.flowstagebinding
attrs:
evaluate_on_plan: true
re_evaluate_policies: false
policy_engine_mode: any
invalid_response_action: retry
- identifiers:
target: !KeyOf recovery_flow
stage: !KeyOf default-recovery-user-login
order: 100
model: authentik_flows.flowstagebinding
attrs:
evaluate_on_plan: true
re_evaluate_policies: false
policy_engine_mode: any
invalid_response_action: retry
### POLICIES
## ISSUES with this policy
## https://github.com/goauthentik/authentik/blob/493cdd5c0f8caaec7a7dd474f1aa131e32fd39c3/blueprints/example/flows-recovery-email-verification.yaml#L37
## https://github.com/goauthentik/authentik/commit/317e9ec6053742e17ba74fb6aa38dc15aaf6657f#diff-a5c56bb7c60e27dda1b131b3fc2a17e3af6624e7cfaaa2337ec6b077ca489f34
# - identifiers:
# name: default-recovery-skip-if-restored
# id: default-recovery-skip-if-restored
# model: authentik_policies_expression.expressionpolicy
# attrs:
# expression: |
# return request.context.get('is_restored', False)
### POLICY BINDINGS
# - identifiers:
# policy: !KeyOf default-recovery-skip-if-restored
# target: !KeyOf flow-binding-identification
# order: 0
# model: authentik_policies.policybinding
# attrs:
# negate: false
# enabled: true
# timeout: 30
# - identifiers:
# policy: !KeyOf default-recovery-skip-if-restored
# target: !KeyOf flow-binding-email
# order: 0
# model: authentik_policies.policybinding
# attrs:
# negate: false
# enabled: true
# timeout: 30
######## Authentication Flow ########
- attrs:
designation: authentication
name: custom-authentication-flow
title: !Context welcome_message
identifiers:
slug: custom-authentication-flow
id: authentication_flow
model: authentik_flows.flow
### STAGES
- attrs:
backends:
- authentik.core.auth.InbuiltBackend
- authentik.sources.ldap.auth.LDAPBackend
- authentik.core.auth.TokenBackend
configure_flow: !Find [authentik_flows.flow, [slug, default-password-change]]
identifiers:
name: custom-authentication-password
id: custom-authentication-password
model: authentik_stages_password.passwordstage
- identifiers:
name: custom-authentication-mfa-validation
id: custom-authentication-mfa-validation
model: authentik_stages_authenticator_validate.authenticatorvalidatestage
- attrs:
password_stage: !KeyOf custom-authentication-password
recovery_flow: !KeyOf recovery_flow # !Find [authentik_flows.flow, [slug, default-recovery-flow]]
user_fields:
- email
- username
identifiers:
name: custom-authentication-identification
id: custom-authentication-identification
model: authentik_stages_identification.identificationstage
- attrs:
session_duration: seconds=0
identifiers:
name: custom-authentication-login
id: custom-authentication-login
model: authentik_stages_user_login.userloginstage
### STAGE BINDINGS
- identifiers:
order: 10
stage: !KeyOf custom-authentication-identification
target: !KeyOf authentication_flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 30
stage: !KeyOf custom-authentication-mfa-validation
target: !KeyOf authentication_flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 100
stage: !KeyOf custom-authentication-login
target: !KeyOf authentication_flow
model: authentik_flows.flowstagebinding
######## Invitation Enrollment Flow ########
- attrs:
designation: enrollment
name: invitation-enrollment-flow
title: !Context welcome_message
identifiers:
slug: invitation-enrollment-flow
id: invitation-enrollment-flow
model: authentik_flows.flow
### PROMPTS
- identifiers:
field_key: username
id: prompt-field-username
model: authentik_stages_prompt.prompt
attrs:
label: !Context transl_username
type: username
required: true
placeholder: !Context transl_username
order: 0
placeholder_expression: false
- identifiers:
field_key: name
id: prompt-field-name
model: authentik_stages_prompt.prompt
attrs:
label: !Context transl_name
type: text
required: true
placeholder: !Context transl_name
order: 1
placeholder_expression: false
- identifiers:
field_key: email
label: Email
id: prompt-field-email
model: authentik_stages_prompt.prompt
attrs:
type: email
required: true
placeholder: muster@example.com
order: 2
placeholder_expression: false
### STAGES
- id: invitation-stage
identifiers:
name: invitation-stage
model: authentik_stages_invitation.invitationstage
- attrs:
fields:
- !KeyOf prompt-field-username
- !KeyOf prompt-field-name
- !KeyOf prompt-field-email
- !KeyOf prompt-field-password
- !KeyOf prompt-field-password-repeat
id: enrollment-prompt-userdata
identifiers:
name: enrollment-prompt-userdata
model: authentik_stages_prompt.promptstage
- id: enrollment-user-write
identifiers:
name: enrollment-user-write
model: authentik_stages_user_write.userwritestage
- attrs:
session_duration: seconds=0
id: enrollment-user-login
identifiers:
name: enrollment-user-login
model: authentik_stages_user_login.userloginstage
### STAGE BINDINGS
- identifiers:
order: 1
stage: !KeyOf invitation-stage
target: !KeyOf invitation-enrollment-flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 10
stage: !KeyOf enrollment-prompt-userdata
target: !KeyOf invitation-enrollment-flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 20
stage: !KeyOf enrollment-user-write
target: !KeyOf invitation-enrollment-flow
model: authentik_flows.flowstagebinding
- identifiers:
order: 100
stage: !KeyOf enrollment-user-login
target: !KeyOf invitation-enrollment-flow
model: authentik_flows.flowstagebinding
######## Invalidation Flow ########
- identifiers:
slug: logout-flow
id: logout-flow
model: authentik_flows.flow
attrs:
name: Logout
title: Logout Flow
designation: invalidation
### STAGES
- id: logout-stage
identifiers:
name: logout-stage
model: authentik_stages_user_logout.userlogoutstage
### STAGE BINDINGS
- identifiers:
order: 0
stage: !KeyOf logout-stage
target: !KeyOf logout-flow
model: authentik_flows.flowstagebinding
attrs:
re_evaluate_policies: true
id: logout-stage-binding
### POLICIES
- attrs:
execution_logging: true
expression: 'context[''flow_plan''].context[''redirect''] = ''{{ env "LOGOUT_REDIRECT" }}''
return True'
identifiers:
name: redirect-policy
id: redirect-policy
model: authentik_policies_expression.expressionpolicy
### POLICY BINDINGS
- identifiers:
policy: !KeyOf redirect-policy
target: !KeyOf logout-stage-binding
order: 0
model: authentik_policies.policybinding
attrs:
enabled: {{ if eq (env "LOGOUT_REDIRECT") "" }} false {{ else }} true {{ end }}
timeout: 30
######## System Brand ##########
- attrs:
attributes:
settings:
locale: {{ if eq (env "DEFAULT_LANGUAGE") "" }} en {{ else }} {{ env "DEFAULT_LANGUAGE" }} {{ end }}
# branding_favicon: /static/dist/assets/icons/icon.png
# branding_logo: /static/dist/assets/icons/icon_left_brand.svg
# branding_title: Authentik
# default: true
domain: {{ env "DOMAIN" }}
# event_retention: days=365
flow_authentication: !KeyOf authentication_flow
flow_recovery: !KeyOf recovery_flow
flow_invalidation: !KeyOf logout-flow
flow_user_settings: !Find [authentik_flows.flow, [slug, default-user-settings-flow]]
identifiers:
pk: 047cce25-aae2-4b02-9f96-078e155f803d
id: system_brand
model: authentik_brands.brand

5
entrypoint-css-volume.sh Normal file
View File

@ -0,0 +1,5 @@
#!/bin/sh
cp -f /web/dist/assets/custom.css /web/dist/custom.css
su $(id -un 1000) -s /bin/bash -c 'dumb-init -- ak server'

View File

@ -8,12 +8,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "hedgedoc_id" }} client_id: {{ secret "hedgedoc_id" }}
client_secret: {{ secret "hedgedoc_secret" }} client_secret: {{ secret "hedgedoc_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "HEDGEDOC_DOMAIN" }}/auth/oauth2/callback
name: Hedgedoc name: Hedgedoc
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]
@ -30,7 +35,7 @@ entries:
state: present state: present
- attrs: - attrs:
meta_launch_url: https://{{ env "HEDGEDOC_DOMAIN" }} meta_launch_url: https://{{ env "HEDGEDOC_DOMAIN" }}/auth/oauth2
open_in_new_tab: true open_in_new_tab: true
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf hedgedoc_provider provider: !KeyOf hedgedoc_provider

8
icons/help.svg Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="48" height="48" fill="white" fill-opacity="0.01"/>
<path d="M24 44C29.5228 44 34.5228 41.7614 38.1421 38.1421C41.7614 34.5228 44 29.5228 44 24C44 18.4772 41.7614 13.4772 38.1421 9.85786C34.5228 6.23858 29.5228 4 24 4C18.4772 4 13.4772 6.23858 9.85786 9.85786C6.23858 13.4772 4 18.4772 4 24C4 29.5228 6.23858 34.5228 9.85786 38.1421C13.4772 41.7614 18.4772 44 24 44Z" fill="#2F88FF" stroke="#000000" stroke-width="4" stroke-linejoin="round"/>
<path d="M24 28.6249V24.6249C27.3137 24.6249 30 21.9386 30 18.6249C30 15.3112 27.3137 12.6249 24 12.6249C20.6863 12.6249 18 15.3112 18 18.6249" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 37.6249C25.3807 37.6249 26.5 36.5056 26.5 35.1249C26.5 33.7442 25.3807 32.6249 24 32.6249C22.6193 32.6249 21.5 33.7442 21.5 35.1249C21.5 36.5056 22.6193 37.6249 24 37.6249Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

1
icons/pretix.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="Ebene_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><defs><style>.cls-1{fill:#3b1c4a;}</style></defs><path class="cls-1" d="m50.67,56.95c-.72.1-1.22.3-1.66.5l2.38,16.91c.41.08.95.13,1.6.04,3.52-.5,4.61-3.64,3.81-9.39-.83-5.87-2.53-8.56-6.12-8.06Z"/><path class="cls-1" d="m116.04,35.05c.71-.17,1.16-.76,1.06-1.48L112.54,1.13c-.1-.72-.77-1.22-1.49-1.12l-37.5,5.27.73,5.22c.16,1.12-.62,2.15-1.74,2.31s-2.15-.62-2.31-1.74l-.73-5.22L1.13,15.46c-.72.1-1.22.77-1.12,1.49l4.56,32.44c.1.72.7,1.17,1.42,1.13,11.25-.92,21.43,7.1,23.03,18.46,1.6,11.36-5.99,21.81-17.07,23.96-.71.17-1.16.76-1.06,1.48l4.56,32.44c.1.72.77,1.22,1.49,1.12l68.37-9.61-.73-5.22c-.16-1.15.59-2.15,1.74-2.31s2.15.62,2.31,1.74l.73,5.22,37.5-5.27c.72-.1,1.22-.77,1.12-1.49l-4.56-32.44c-.1-.72-.7-1.17-1.42-1.13-11.25.92-21.42-7.04-23.02-18.4-1.6-11.36,5.98-21.87,17.06-24.03Zm-59.84,44.75c-1.76.25-3.29.26-4.04.17l1.59,11.29-9.92,1.39-5.3-37.73c2.5-1.62,5.96-3.03,11.38-3.8,8.68-1.22,15.27,2.58,16.66,12.44,1.25,8.88-3.12,15.21-10.36,16.23Zm30.73,20.71c.16,1.12-.62,2.15-1.74,2.31-1.12.16-2.15-.62-2.31-1.74l-1.47-10.44c-.16-1.12.62-2.15,1.74-2.31s2.16.66,2.31,1.74l1.47,10.44Zm-3.17-22.58c.15,1.08-.66,2.16-1.74,2.31s-2.16-.66-2.31-1.74l-1.47-10.44c-.16-1.15.59-2.15,1.74-2.31,1.12-.16,2.15.62,2.31,1.74l1.47,10.44Zm-3.16-22.45c.16,1.12-.62,2.15-1.74,2.31-1.12.16-2.15-.62-2.31-1.74l-1.47-10.44c-.16-1.12.62-2.15,1.74-2.31s2.16.66,2.31,1.74l1.47,10.44Zm-3.17-22.58c.15,1.08-.66,2.16-1.74,2.31s-2.16-.66-2.31-1.74l-1.47-10.44c-.16-1.15.59-2.15,1.74-2.31s2.15.62,2.31,1.74l1.47,10.44Z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

12
icons/support.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>support</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="support" fill="#000000" transform="translate(42.666667, 42.666667)">
<path d="M379.734355,174.506667 C373.121022,106.666667 333.014355,-2.13162821e-14 209.067688,-2.13162821e-14 C85.1210217,-2.13162821e-14 45.014355,106.666667 38.4010217,174.506667 C15.2012632,183.311569 -0.101643453,205.585799 0.000508304259,230.4 L0.000508304259,260.266667 C0.000508304259,293.256475 26.7445463,320 59.734355,320 C92.7241638,320 119.467688,293.256475 119.467688,260.266667 L119.467688,230.4 C119.360431,206.121456 104.619564,184.304973 82.134355,175.146667 C86.4010217,135.893333 107.307688,42.6666667 209.067688,42.6666667 C310.827688,42.6666667 331.521022,135.893333 335.787688,175.146667 C313.347976,184.324806 298.68156,206.155851 298.667688,230.4 L298.667688,260.266667 C298.760356,283.199651 311.928618,304.070103 332.587688,314.026667 C323.627688,330.88 300.801022,353.706667 244.694355,360.533333 C233.478863,343.50282 211.780225,336.789048 192.906491,344.509658 C174.032757,352.230268 163.260418,372.226826 167.196286,392.235189 C171.132153,412.243552 188.675885,426.666667 209.067688,426.666667 C225.181549,426.577424 239.870491,417.417465 247.041022,402.986667 C338.561022,392.533333 367.787688,345.386667 376.961022,317.653333 C401.778455,309.61433 418.468885,286.351502 418.134355,260.266667 L418.134355,230.4 C418.23702,205.585799 402.934114,183.311569 379.734355,174.506667 Z M76.8010217,260.266667 C76.8010217,269.692326 69.1600148,277.333333 59.734355,277.333333 C50.3086953,277.333333 42.6676884,269.692326 42.6676884,260.266667 L42.6676884,230.4 C42.6676884,224.302667 45.9205765,218.668499 51.2010216,215.619833 C56.4814667,212.571166 62.9872434,212.571166 68.2676885,215.619833 C73.5481336,218.668499 76.8010217,224.302667 76.8010217,230.4 L76.8010217,260.266667 Z M341.334355,230.4 C341.334355,220.97434 348.975362,213.333333 358.401022,213.333333 C367.826681,213.333333 375.467688,220.97434 375.467688,230.4 L375.467688,260.266667 C375.467688,269.692326 367.826681,277.333333 358.401022,277.333333 C348.975362,277.333333 341.334355,269.692326 341.334355,260.266667 L341.334355,230.4 Z">
</path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

6
icons/vaultwarden.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -12,6 +12,7 @@ entries:
audience: https://{{ env "KIMAI_DOMAIN" }}/auth/saml audience: https://{{ env "KIMAI_DOMAIN" }}/auth/saml
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]] authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
digest_algorithm: http://www.w3.org/2001/04/xmlenc#sha256 digest_algorithm: http://www.w3.org/2001/04/xmlenc#sha256
issuer: https://{{ env "DOMAIN" }} issuer: https://{{ env "DOMAIN" }}
name: Kimai name: Kimai
@ -24,6 +25,7 @@ entries:
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: Groups"]] - !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: Groups"]]
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: UPN"]] - !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: UPN"]]
session_valid_not_on_or_after: minutes=86400 session_valid_not_on_or_after: minutes=86400
sign_assertion: true
signature_algorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 signature_algorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
signing_kp: !Find [authentik_crypto.certificatekeypair, [name, authentik Self-signed Certificate]] signing_kp: !Find [authentik_crypto.certificatekeypair, [name, authentik Self-signed Certificate]]
sp_binding: post sp_binding: post
@ -35,7 +37,7 @@ entries:
state: present state: present
- attrs: - attrs:
meta_launch_url: https://{{ env "KIMAI_DOMAIN" }} meta_launch_url: https://{{ env "KIMAI_DOMAIN" }}/auth/saml/login
open_in_new_tab: true open_in_new_tab: true
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf kimai_provider provider: !KeyOf kimai_provider
@ -45,4 +47,4 @@ entries:
identifiers: identifiers:
name: Kimai name: Kimai
model: authentik_core.application model: authentik_core.application
state: present state: present

View File

@ -8,12 +8,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "matrix_id" }} client_id: {{ secret "matrix_id" }}
client_secret: {{ secret "matrix_secret" }} client_secret: {{ secret "matrix_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "MATRIX_DOMAIN" }}/_synapse/client/oidc/callback
name: Matrix name: Matrix
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]
@ -34,10 +39,10 @@ entries:
open_in_new_tab: true open_in_new_tab: true
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf matrix_provider provider: !KeyOf matrix_provider
slug: matrix name: Element
conditions: [] conditions: []
id: matrix_application id: matrix_application
identifiers: identifiers:
name: Matrix slug: matrix
model: authentik_core.application model: authentik_core.application
state: present state: present

View File

@ -8,12 +8,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "monitoring_id" }} client_id: {{ secret "monitoring_id" }}
client_secret: {{ secret "monitoring_secret" }} client_secret: {{ secret "monitoring_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "MONITORING_DOMAIN" }}/login/generic_oauth
name: Monitoring name: Monitoring
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]

View File

@ -20,12 +20,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "nextcloud_id" }} client_id: {{ secret "nextcloud_id" }}
client_secret: {{ secret "nextcloud_secret" }} client_secret: {{ secret "nextcloud_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "NEXTCLOUD_DOMAIN" }}/apps/sociallogin/custom_oidc/authentik
name: Nextcloud name: Nextcloud
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]

View File

@ -8,12 +8,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "outline_id" }} client_id: {{ secret "outline_id" }}
client_secret: {{ secret "outline_secret" }} client_secret: {{ secret "outline_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "OUTLINE_DOMAIN" }}/auth/oidc.callback
name: Outline name: Outline
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]
@ -30,7 +35,7 @@ entries:
state: present state: present
- attrs: - attrs:
meta_launch_url: https://{{ env "OUTLINE_DOMAIN" }} meta_launch_url: https://{{ env "OUTLINE_DOMAIN" }}/auth/oidc
open_in_new_tab: true open_in_new_tab: true
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf outline_provider provider: !KeyOf outline_provider

34
pg_backup.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/bash
set -e
BACKUP_FILE='/var/lib/postgresql/data/backup.sql'
function backup {
export PGPASSWORD=$(cat /run/secrets/db_password)
pg_dump -U ${POSTGRES_USER} ${POSTGRES_DB} > $BACKUP_FILE
}
function restore {
cd /var/lib/postgresql/data/
restore_config(){
# Restore allowed connections
cat pg_hba.conf.bak > pg_hba.conf
su postgres -c 'pg_ctl reload'
}
# Don't allow any other connections than local
cp pg_hba.conf pg_hba.conf.bak
echo "local all all trust" > pg_hba.conf
su postgres -c 'pg_ctl reload'
trap restore_config EXIT INT TERM
# Recreate Database
psql -U ${POSTGRES_USER} -d postgres -c "DROP DATABASE ${POSTGRES_DB} WITH (FORCE);"
createdb -U ${POSTGRES_USER} ${POSTGRES_DB}
psql -U ${POSTGRES_USER} -d ${POSTGRES_DB} -1 -f $BACKUP_FILE
trap - EXIT INT TERM
restore_config
}
$@

View File

@ -8,12 +8,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "rallly_id" }} client_id: {{ secret "rallly_id" }}
client_secret: {{ secret "rallly_secret" }} client_secret: {{ secret "rallly_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "RALLLY_DOMAIN" }}/api/auth/callback/oidc
name: Rallly name: Rallly
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]

1
release/6.11.0+2024.10.5 Normal file
View File

@ -0,0 +1 @@
Fix Impersonate Bug

1
release/6.6.0+2024.8.2 Normal file
View File

@ -0,0 +1 @@
Replaced icon bbb.jpg with icon.png - configs need to be updated when upgrading!

3
release/6.7.0+2024.8.3 Normal file
View File

@ -0,0 +1,3 @@
Two critical vulnerabilities were closed:
https://github.com/goauthentik/authentik/security/advisories/GHSA-7jxf-mmg9-9hg7
https://github.com/goauthentik/authentik/security/advisories/GHSA-8gfm-pr6x-pfh9

View File

@ -27,7 +27,10 @@ entries:
- attrs: - attrs:
attributes: attributes:
settings: settings:
locale: {{ if eq (env "DEFAULT_LANGUAGE") "" }} en {{ else }} {{ env "DEFAULT_LANGUAGE" }} {{ end }} locale: {{ if eq (env "DEFAULT_LANGUAGE") "" }} en {{ else }} {{ env "DEFAULT_LANGUAGE" }} {{ end }} {{ if ne (env "THEME_BACKGROUND") "" }}
theme:
background: >
background: {{ env "THEME_BACKGROUND" }} {{ end }}
flow_recovery: !Find [authentik_flows.flow, [slug, default-recovery-flow]] flow_recovery: !Find [authentik_flows.flow, [slug, default-recovery-flow]]
identifiers: identifiers:
default: true default: true

View File

@ -8,12 +8,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "vikunja_id" }} client_id: {{ secret "vikunja_id" }}
client_secret: {{ secret "vikunja_secret" }} client_secret: {{ secret "vikunja_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "VIKUNJA_DOMAIN" }}/auth/openid/authentik
name: Vikunja name: Vikunja
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]

View File

@ -25,12 +25,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "wekan_id" }} client_id: {{ secret "wekan_id" }}
client_secret: {{ secret "wekan_secret" }} client_secret: {{ secret "wekan_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "WEKAN_DOMAIN" }}/_oauth/oidc
name: Wekan name: Wekan
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]

View File

@ -8,12 +8,17 @@ entries:
- attrs: - attrs:
access_code_validity: minutes=1 access_code_validity: minutes=1
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
client_id: {{ secret "wordpress_id" }} client_id: {{ secret "wordpress_id" }}
client_secret: {{ secret "wordpress_secret" }} client_secret: {{ secret "wordpress_secret" }}
client_type: confidential client_type: confidential
include_claims_in_id_token: true include_claims_in_id_token: true
issuer_mode: per_provider issuer_mode: per_provider
redirect_uris:
- matching_mode: strict
url: https://{{ env "WORDPRESS_DOMAIN" }}/openid-connect-authorize
name: Wordpress name: Wordpress
property_mappings: property_mappings:
- !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]] - !Find [authentik_providers_oauth2.scopemapping, [scope_name, openid]]

View File

@ -36,6 +36,7 @@ entries:
audience: https://{{ env "ZAMMAD_DOMAIN" }}/auth/saml/metadata audience: https://{{ env "ZAMMAD_DOMAIN" }}/auth/saml/metadata
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]] authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]] authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
invalidation_flow: !Find [authentik_flows.flow, [slug, default-provider-invalidation-flow]]
digest_algorithm: http://www.w3.org/2001/04/xmlenc#sha256 digest_algorithm: http://www.w3.org/2001/04/xmlenc#sha256
issuer: https://{{ env "ZAMMAD_DOMAIN" }}/auth/saml/metadata issuer: https://{{ env "ZAMMAD_DOMAIN" }}/auth/saml/metadata
name: zammad name: zammad
@ -43,6 +44,7 @@ entries:
- !KeyOf zammad_name_mapping - !KeyOf zammad_name_mapping
- !KeyOf zammad_email_mapping - !KeyOf zammad_email_mapping
session_valid_not_on_or_after: minutes=86400 session_valid_not_on_or_after: minutes=86400
sign_assertion: true
signature_algorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 signature_algorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
signing_kp: !Find [authentik_crypto.certificatekeypair, [name, authentik Self-signed Certificate]] signing_kp: !Find [authentik_crypto.certificatekeypair, [name, authentik Self-signed Certificate]]
sp_binding: post sp_binding: post
@ -54,7 +56,7 @@ entries:
state: present state: present
- attrs: - attrs:
meta_launch_url: https://{{ env "ZAMMAD_DOMAIN" }} meta_launch_url: ""
open_in_new_tab: true open_in_new_tab: true
policy_engine_mode: any policy_engine_mode: any
provider: !KeyOf zammad_provider provider: !KeyOf zammad_provider