Compare commits

..

37 Commits

Author SHA1 Message Date
39f9c1cb91 chore: publish 6.5.2+2024.6.5 release 2024-10-01 23:04:03 +02:00
4809d780d0 update custom css 2024-10-01 22:55:54 +02:00
9f5a39abaf chore: publish 6.5.1+2024.6.5 release 2024-09-30 15:05:47 +02:00
bed917a28c added release note for bbb icon change 2024-09-25 14:55:25 +02:00
f281c5f902 switch bbb icon 2024-09-24 12:40:32 +02:00
ed41b0f113 add backup restore hook 2024-09-19 22:12:41 +02:00
4f8b505e1e update volumes and backupbot labels 2024-09-16 17:36:20 +02:00
18559defc1 chore: publish 6.5.0+2024.6.3 release 2024-09-11 14:23:47 +02:00
453e3d442a add traefik redirection for matrix well-known files 2024-09-11 13:47:39 +02:00
9214157959 update alaconnect.yml 2024-08-22 00:46:40 +02:00
99bd647613 add zammad integration 2024-08-22 00:46:37 +02:00
88333e2068 abra.sh: add get_user_uid() command 2024-08-21 23:05:51 +02:00
a3f114834f chore: publish 6.4.0+2024.6.3 release 2024-08-06 16:23:31 +02:00
3wc
e6e13eb1c7 chore: publish 6.3.1+2024.6.2 release 2024-08-01 13:21:39 -04:00
3bc925d3fa fix app icon paths 2024-07-17 14:42:25 +02:00
f322f6a09e fix monitoring blueprint pk 2024-07-17 14:27:34 +02:00
24ff7ee444 fix alaconnect.yml for monitoring-ng 2024-07-17 13:43:12 +02:00
38911193db better healthchecks 2024-07-17 12:53:15 +02:00
3b9bea3681 chore: publish 6.3.0+2024.6.1 release 2024-07-16 19:15:33 +02:00
e8016868fe possible fix for coop-cloud/authentik#6 2024-07-11 00:14:30 +02:00
a00c7deb2c chore: publish 6.2.0+2024.4.2 release 2024-06-10 14:31:56 +02:00
c1f0358f29 add admin mail env 2024-06-10 14:23:11 +02:00
0be7e95f48 make abra.sh less verbose by ignoring RuntimeWarnings 2024-05-27 12:10:32 +02:00
3wc
4fe52c1e5f Fix Drone CI 2024-05-16 15:18:09 -03:00
3wc
248a09c594 chore: publish 6.1.1+2024.4.2 release 2024-05-16 15:09:40 -03:00
b957425981 chore: publish 6.1.0+2024.4.2 release 2024-05-15 16:42:35 +02:00
20f99b13ad add alakazam integration file alaconnect.yml 2024-05-13 17:28:58 +02:00
c42017839f update quieten() function to make output less verbose 2024-05-08 21:50:39 +02:00
cdabec1b18 make get_certificate more general 2024-05-08 21:50:09 +02:00
a606a84a98 make import_user command more verbose 2024-05-08 21:00:19 +02:00
a0505e0dec add function to output certificate 2024-05-08 12:52:26 +02:00
17d40711e0 add kimai saml integration 2024-05-08 12:34:07 +02:00
fc33f285f4 make import_user command more verbose 2024-05-06 12:26:25 +02:00
3wc
d1f091da62 chore: publish 6.0.0+2024.4.0 release 2024-04-27 14:39:01 -03:00
3wc
3e339228f5 Merge branch 'custom-css' 2024-04-27 14:37:27 -03:00
3wc
03f8810462 chore: publish 5.2.1+2024.4.0 release 2024-04-25 17:27:05 -03:00
3wc
d19bf17781 Revert "feat: make themeing easier"
This reverts commit e07d57718a.
2024-04-25 17:26:01 -03:00
21 changed files with 366 additions and 451 deletions

View File

@ -30,6 +30,7 @@ steps:
SECRET_ADMIN_TOKEN_VERSION: v1 SECRET_ADMIN_TOKEN_VERSION: v1
SECRET_ADMIN_PASS_VERSION: v1 SECRET_ADMIN_PASS_VERSION: v1
SECRET_EMAIL_PASS_VERSION: v1 SECRET_EMAIL_PASS_VERSION: v1
DB_ENTRYPOINT_VERSION: v1
trigger: trigger:
branch: branch:
- main - main

View File

@ -17,6 +17,9 @@ AUTHENTIK_LOG_LEVEL=info
## Outpost Integration ## Outpost Integration
# COMPOSE_FILE="$COMPOSE_FILE:compose.outposts.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.outposts.yml"
## ADMIN
AUTHENTIK_BOOTSTRAP_EMAIL=admin@example.com
## EMAIL ## EMAIL
AUTHENTIK_EMAIL__HOST=smtp AUTHENTIK_EMAIL__HOST=smtp
AUTHENTIK_EMAIL__PORT=587 AUTHENTIK_EMAIL__PORT=587
@ -46,11 +49,11 @@ 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 # Default CSS customisation
COMPOSE_FILE="$COMPOSE_FILE:compose.css.yml"
AUTHENTIK_COLOR_BACKGROUND_LIGHT=#1c1e21
# Custommise the entire custom CSS file
# COMPOSE_FILE="$COMPOSE_FILE:compose.css.yml" # 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
@ -67,6 +70,7 @@ AUTHENTIK_COLOR_BACKGROUND_LIGHT=#1c1e21
# COMPOSE_FILE="$COMPOSE_FILE:compose.matrix.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.matrix.yml"
# ELEMENT_DOMAIN=element-web.example.com # ELEMENT_DOMAIN=element-web.example.com
# MATRIX_DOMAIN=matrix-synapse.example.com
# SECRET_MATRIX_ID_VERSION=v1 # SECRET_MATRIX_ID_VERSION=v1
# SECRET_MATRIX_SECRET_VERSION=v1 # SECRET_MATRIX_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS matrix:~/.abra/recipes/authentik/icons/matrix.svg" # APP_ICONS="$APP_ICONS matrix:~/.abra/recipes/authentik/icons/matrix.svg"
@ -89,11 +93,21 @@ AUTHENTIK_COLOR_BACKGROUND_LIGHT=#1c1e21
# SECRET_OUTLINE_SECRET_VERSION=v1 # SECRET_OUTLINE_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS outline:~/.abra/recipes/authentik/icons/outline.png" # APP_ICONS="$APP_ICONS outline:~/.abra/recipes/authentik/icons/outline.png"
# COMPOSE_FILE="$COMPOSE_FILE:compose.kimai.yml"
# KIMAI_DOMAIN=kimai.example.com
# SECRET_KIMAI_ID_VERSION=v1
# SECRET_KIMAI_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS kimai:~/.abra/recipes/authentik/icons/kimai_logo.png"
# COMPOSE_FILE="$COMPOSE_FILE:compose.zammad.yml"
# ZAMMAD_DOMAIN=zammad.example.com
# APP_ICONS="$APP_ICONS zammad:~/.abra/recipes/authentik/icons/zammad.svg"
# COMPOSE_FILE="$COMPOSE_FILE:compose.monitoring.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.monitoring.yml"
# MONITORING_DOMAIN=monitoring.example.com # MONITORING_DOMAIN=monitoring.example.com
# SECRET_MONITORING_ID_VERSION=v1 # SECRET_MONITORING_ID_VERSION=v1
# SECRET_MONITORING_SECRET_VERSION=v1 # SECRET_MONITORING_SECRET_VERSION=v1
# APP_ICONS="$APP_ICONS monitoring:~/.abra/recipes/authentik/icons/monitoring.png" # APP_ICONS="$APP_ICONS monitoring:~/.abra/recipes/authentik/icons/monitoring.svg"
# COMPOSE_FILE="$COMPOSE_FILE:compose.rallly.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.rallly.yml"
# RALLLY_DOMAIN=rallly.example.com # RALLLY_DOMAIN=rallly.example.com
@ -109,4 +123,4 @@ AUTHENTIK_COLOR_BACKGROUND_LIGHT=#1c1e21
# 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/"}'
# APP_ICONS="$APP_ICONS Calendar:~/.abra/recipes/authentik/icons/calendar.svg" # APP_ICONS="$APP_ICONS Calendar:~/.abra/recipes/authentik/icons/calendar.svg"
# APP_ICONS="$APP_ICONS BBB:~/.abra/recipes/authentik/icons/bbb.jpg" # APP_ICONS="$APP_ICONS BBB:~/.abra/recipes/authentik/icons/bbb.png"

33
abra.sh
View File

@ -4,16 +4,18 @@ 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=v1
export WORDPRESS_CONFIG_VERSION=v2 export WORDPRESS_CONFIG_VERSION=v2
export MATRIX_CONFIG_VERSION=v1 export MATRIX_CONFIG_VERSION=v1
export WEKAN_CONFIG_VERSION=v3 export WEKAN_CONFIG_VERSION=v3
export VIKUNJA_CONFIG_VERSION=v1 export VIKUNJA_CONFIG_VERSION=v1
export OUTLINE_CONFIG_VERSION=v2 export OUTLINE_CONFIG_VERSION=v2
export KIMAI_CONFIG_VERSION=v1
export ZAMMAD_CONFIG_VERSION=v1
export RALLLY_CONFIG_VERSION=v2 export RALLLY_CONFIG_VERSION=v2
export HEDGEDOC_CONFIG_VERSION=v1 export HEDGEDOC_CONFIG_VERSION=v1
export MONITORING_CONFIG_VERSION=v1 export MONITORING_CONFIG_VERSION=v2
export DB_ENTRYPOINT_VERSION=v1 export DB_ENTRYPOINT_VERSION=v1
customize() { customize() {
@ -55,15 +57,19 @@ with open('/tmp/$1', newline='') as file:
email = row[2].strip() email = row[2].strip()
groups = row[3].split(';') groups = row[3].split(';')
if User.objects.filter(username=username): if User.objects.filter(username=username):
print(f'{username} already exists')
continue continue
new_user = User.objects.create(name=name, username=username, email=email) new_user = User.objects.create(name=name, username=username, email=email)
print(f'{username} created')
for group_name in groups: for group_name in groups:
group_name = group_name.strip() group_name = group_name.strip()
if Group.objects.filter(name=group_name): if Group.objects.filter(name=group_name):
group = Group.objects.get(name=group_name) group = Group.objects.get(name=group_name)
else: else:
group = Group.objects.create(name=group_name) group = Group.objects.create(name=group_name)
print(f'{group_name} created')
group.users.add(new_user) group.users.add(new_user)
print(f'add {username} to group {group_name}')
""" 2>&1 | quieten """ 2>&1 | quieten
} }
@ -171,7 +177,9 @@ for name, url in applications.items():
quieten(){ quieten(){
grep -v -e '{"event"' -e '{"action"' # 'SyntaxWarning|version_regex|"http\['
# is a workaround to get rid of some verbose syntax warnings, this might be fixed with another version
grep -Pv '"level": "(info|debug)"|SyntaxWarning|version_regex|"http\[|RuntimeWarning:'
} }
add_email_templates(){ add_email_templates(){
@ -222,3 +230,22 @@ Brand.objects.filter(default=True).delete()
""" 2>&1 | quieten """ 2>&1 | quieten
apply_blueprints apply_blueprints
} }
get_certificate() {
/manage.py shell -c """
provider_name='$1'
if not provider_name:
print('no Provider Name given')
exit(1)
provider = Provider.objects.filter(name=provider_name).first()
saml = provider.samlprovider
cert = saml.signing_kp
print(''.join(cert.certificate_data.splitlines()[1:-1]))
""" 2>&1 | quieten
}
get_user_uid() {
/manage.py shell -c """
print(User.objects.filter(username='$1').first().uid)
""" 2>&1 | quieten
}

89
alaconnect.yml Normal file
View File

@ -0,0 +1,89 @@
nextcloud:
uncomment:
- compose.nextcloud.yml
- NEXTCLOUD_DOMAIN
- SECRET_NEXTCLOUD_ID_VERSION
- SECRET_NEXTCLOUD_SECRET_VERSION
- nextcloud.png
wordpress:
uncomment:
- compose.wordpress.yml
- WORDPRESS_DOMAIN
- WORDPRESS_GROUP
- SECRET_WORDPRESS_ID_VERSION
- SECRET_WORDPRESS_SECRET_VERSION
- wordpress.png
matrix-synapse:
uncomment:
- compose.matrix.yml
- ELEMENT_DOMAIN
- MATRIX_DOMAIN
- SECRET_MATRIX_ID_VERSION
- SECRET_MATRIX_SECRET_VERSION
- matrix.svg
secrets:
matrix_id: matrix
wekan:
uncomment:
- compose.wekan.yml
- WEKAN_DOMAIN
- SECRET_WEKAN_ID_VERSION
- SECRET_WEKAN_SECRET_VERSION
- wekan.png
secrets:
wekan_id: wekan
vikunja:
uncomment:
- compose.vikunja.yml
- VIKUNJA_DOMAIN
- SECRET_VIKUNJA_ID_VERSION
- SECRET_VIKUNJA_SECRET_VERSION
- vikunja.svg
secrets:
vikunja_id: vikunja
kimai:
uncomment:
- compose.kimai.yml
- KIMAI_DOMAIN
- SECRET_KIMAI_ID_VERSION
- SECRET_KIMAI_SECRET_VERSION
- kimai_logo.png
zammad:
uncomment:
- compose.zammad.yml
- ZAMMAD_DOMAIN
- zammad.svg
monitoring-ng:
uncomment:
- compose.monitoring.yml
- MONITORING_DOMAIN
- SECRET_MONITORING_ID_VERSION
- SECRET_MONITORING_SECRET_VERSION
- monitoring.png
outline:
uncomment:
- compose.outline.yml
- OUTLINE_DOMAIN
- SECRET_OUTLINE_ID_VERSION
- SECRET_OUTLINE_SECRET_VERSION
- outline.png
secrets:
outline_id: outline
rallly:
uncomment:
- compose.rallly.yml
- RALLLY_DOMAIN
- SECRET_RALLLY_ID_VERSION
- SECRET_RALLLY_SECRET_VERSION
- rallly.png
secrets:
rallly_id: rallly
hedgedoc:
uncomment:
- compose.hedgedoc.yml
- HEDGEDOC_DOMAIN
- SECRET_HEDGEDOC_ID_VERSION
- SECRET_HEDGEDOC_SECRET_VERSION
- hedgedoc.png
secrets:
hedgedoc_id: hedgedoc

14
compose.kimai.yml Normal file
View File

@ -0,0 +1,14 @@
version: "3.8"
services:
worker:
environment:
- KIMAI_DOMAIN
configs:
- source: kimai
target: /blueprints/kimai.yaml
configs:
kimai:
name: ${STACK_NAME}_kimai_${KIMAI_CONFIG_VERSION}
file: kimai.yaml.tmpl
template_driver: golang

View File

@ -1,5 +1,11 @@
version: "3.8" version: "3.8"
services: services:
app:
deploy:
labels:
- "traefik.http.routers.${STACK_NAME}.middlewares=redirect-matrix-well-known"
- "traefik.http.middlewares.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"
worker: worker:
secrets: secrets:
- matrix_id - matrix_id

View File

@ -17,10 +17,11 @@ 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
- WELCOME_MESSAGE - WELCOME_MESSAGE
- DEFAULT_LANGUAGE - DEFAULT_LANGUAGE
- EMAIL_SUBJECT - EMAIL_SUBJECT
@ -28,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.4.0 image: ghcr.io/goauthentik/server:2024.6.5
command: server command: server
depends_on: depends_on:
- db - db
@ -51,16 +53,13 @@ services:
- internal - internal
- proxy - proxy
healthcheck: healthcheck:
test: "bash -c 'printf \"GET / HTTP/1.1\n\n\" > /dev/tcp/127.0.0.1/9000; exit $$?;'" test: "ak healthcheck"
interval: 30s interval: 30s
timeout: 10s timeout: 30s
retries: 10 retries: 10
start_period: 5m start_period: 5m
environment: *env environment: *env
deploy: deploy:
update_config:
failure_action: rollback
order: start-first
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.docker.network=proxy" - "traefik.docker.network=proxy"
@ -73,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=5.2.1+2024.4.0" - "coop-cloud.${STACK_NAME}.version=6.5.2+2024.6.5"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}" - "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
worker: worker:
image: ghcr.io/goauthentik/server:2024.4.0 image: ghcr.io/goauthentik/server:2024.6.5
command: worker command: worker
depends_on: depends_on:
- db - db
@ -92,10 +91,10 @@ services:
- internal - internal
- proxy - proxy
volumes: volumes:
- backups:/backups
- media:/media - media:/media
- /dev/null:/blueprints/default/flow-oobe.yaml - /dev/null:/blueprints/default/flow-oobe.yaml
- templates:/templates - templates:/templates
- certs:/certs
configs: configs:
- source: flow_recovery - source: flow_recovery
target: /blueprints/1_flow_recovery.yaml target: /blueprints/1_flow_recovery.yaml
@ -110,9 +109,15 @@ services:
- source: flow_invalidation - source: flow_invalidation
target: /blueprints/6_flow_invalidation.yaml target: /blueprints/6_flow_invalidation.yaml
environment: *env environment: *env
healthcheck:
test: "ak healthcheck"
interval: 30s
timeout: 30s
retries: 10
start_period: 5m
db: db:
image: postgres:15.5 image: postgres:15.7
secrets: secrets:
- db_password - db_password
configs: configs:
@ -140,10 +145,13 @@ services:
backupbot.backup: "true" backupbot.backup: "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: "PGPASSWORD=$$(cat /run/secrets/db_password) pg_dump -U $${POSTGRES_USER} $${POSTGRES_DB} > /var/lib/postgresql/data/backup.sql"
backupbot.backup.post-hook: "rm -rf /var/lib/postgresql/data/backup.sql" backupbot.backup.post-hook: "rm -rf /var/lib/postgresql/data/backup.sql"
backupbot.backup.path: "/var/lib/postgresql/data" backupbot.backup.volumes.database.path: "backup.sql"
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'
redis: redis:
image: redis:7.2.4-alpine image: redis:7.4.0-alpine
command: --save 60 1 --loglevel warning
networks: networks:
- internal - internal
healthcheck: healthcheck:
@ -152,6 +160,8 @@ services:
timeout: 10s timeout: 10s
retries: 10 retries: 10
start_period: 1m start_period: 1m
volumes:
- redis:/data
secrets: secrets:
db_password: db_password:
@ -176,8 +186,9 @@ networks:
internal: internal:
volumes: volumes:
backups:
media: media:
certs:
redis:
templates: templates:
assets: assets:
database: database:

14
compose.zammad.yml Normal file
View File

@ -0,0 +1,14 @@
version: "3.8"
services:
worker:
environment:
- ZAMMAD_DOMAIN
configs:
- source: zammad
target: /blueprints/zammad.yaml
configs:
zammad:
name: ${STACK_NAME}_zammad_${ZAMMAD_CONFIG_VERSION}
file: zammad.yaml.tmpl
template_driver: golang

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

BIN
icons/bbb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
icons/kimai_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

30
icons/zammad.svg Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="126px" height="108px" viewBox="0 0 42 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
<!-- Generator: Sketch 3.3.2 (12043) - http://www.bohemiancoding.com/sketch -->
<title>logo</title>
<desc>Created with Sketch.</desc>
<defs/>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
<g id="logo" sketch:type="MSArtboardGroup">
<g sketch:type="MSLayerGroup" transform="translate(1.000000, 0.000000)" id="Shape">
<path d="M27.3375,12.6 L36.72,9.72 L31.1625,13.2525 L27.3375,12.6 Z" fill="#CA2317" sketch:type="MSShapeGroup"/>
<path d="M33.0525,19.62 L31.1625,13.2525 L36.72,9.72 L35.055,15.435 L33.0525,19.62 Z" fill="#E84F83" sketch:type="MSShapeGroup"/>
<path d="M39.465,7.9875 L38.43,9.72 L35.055,15.435 L36.72,9.72 L39.465,7.9875 Z" fill="#CA2317" sketch:type="MSShapeGroup"/>
<path d="M39.8025,9.1125 L37.1925,11.79 L38.43,9.72 L39.8025,9.1125 Z" fill="#E54011" sketch:type="MSShapeGroup"/>
<path d="M27.9,10.8225 L35.5725,10.0575 L30.24,11.7 L27.9,10.8225 Z" fill="#E54011" sketch:type="MSShapeGroup"/>
<path d="M28.1925,15.165 L31.1625,13.2525 L33.0525,19.62 L32.0625,21.645 L28.1925,15.165 Z" fill="#CA2317" sketch:type="MSShapeGroup"/>
<path d="M23.76,22.725 L22.3425,5.4 L32.0625,21.645 L23.76,22.725 Z" fill="#B7DFF2" sketch:type="MSShapeGroup"/>
<path d="M19.7325,27.1575 L23.76,22.725 L32.0625,21.645 L19.7325,27.1575 Z" fill="#E54011" sketch:type="MSShapeGroup"/>
<path d="M0.1575,35.865 L19.7325,27.1575 L23.76,22.725 L17.37,22.0725 L0.1575,35.865 Z" fill="#FFCE33" sketch:type="MSShapeGroup"/>
<path d="M0.9,28.755 L10.9575,27.225 L14.085,24.705 L12.555,24.03 L0.9,28.755 Z" fill="#D6B12D" sketch:type="MSShapeGroup"/>
<path d="M4.5225,20.5425 L14.085,24.705 L17.37,22.0725 L4.5225,20.5425 Z" fill="#FFDE85" sketch:type="MSShapeGroup"/>
<path d="M21.6225,11.6775 L20.4075,11.88 L17.37,22.0725 L20.655,20.0025 L21.6225,11.6775 Z" fill="#009EC6" sketch:type="MSShapeGroup"/>
<path d="M23.4,18.2475 L20.655,20.0025 L22.3425,5.4 L23.4,18.2475 Z" fill="#5EAFCE" sketch:type="MSShapeGroup"/>
<path d="M13.0275,13.05 L21.6225,11.6775 L22.005,8.28 L13.0275,13.05 Z" fill="#045972" sketch:type="MSShapeGroup"/>
<path d="M12.105,5.085 L19.575,9.585 L22.005,8.28 L22.0725,7.8075 L12.105,5.085 Z" fill="#5A8591" sketch:type="MSShapeGroup"/>
<path d="M13.5675,0.18 L20.3625,7.335 L22.0725,7.8075 L22.3425,5.4 L13.5675,0.18 Z" fill="#009EC6" sketch:type="MSShapeGroup"/>
<path d="M17.37,22.0725 L23.4,18.2475 L23.76,22.725 L17.37,22.0725 Z" fill="#F39804" sketch:type="MSShapeGroup"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

48
kimai.yaml.tmpl Normal file
View File

@ -0,0 +1,48 @@
version: 1
metadata:
labels:
blueprints.goauthentik.io/instantiate: "true"
name: kimai
entries:
- attrs:
acs_url: https://{{ env "KIMAI_DOMAIN" }}/auth/saml/acs
assertion_valid_not_before: minutes=-5
assertion_valid_not_on_or_after: minutes=5
audience: https://{{ env "KIMAI_DOMAIN" }}/auth/saml
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
digest_algorithm: http://www.w3.org/2001/04/xmlenc#sha256
issuer: https://{{ env "DOMAIN" }}
name: Kimai
name_id_mapping: !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: Username"]]
property_mappings:
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: Name"]]
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: Email"]]
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: User ID"]]
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: Username"]]
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: Groups"]]
- !Find [authentik_providers_saml.samlpropertymapping, [name, "authentik default SAML Mapping: UPN"]]
session_valid_not_on_or_after: minutes=86400
signature_algorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
signing_kp: !Find [authentik_crypto.certificatekeypair, [name, authentik Self-signed Certificate]]
sp_binding: post
conditions: []
id: kimai_provider
identifiers:
pk: 9991
model: authentik_providers_saml.samlprovider
state: present
- attrs:
meta_launch_url: https://{{ env "KIMAI_DOMAIN" }}
open_in_new_tab: true
policy_engine_mode: any
provider: !KeyOf kimai_provider
slug: kimai
conditions: []
id: kimai_application
identifiers:
name: Kimai
model: authentik_core.application
state: present

View File

@ -25,7 +25,7 @@ entries:
conditions: [] conditions: []
id: monitoring_provider id: monitoring_provider
identifiers: identifiers:
pk: 9994 pk: 9990
model: authentik_providers_oauth2.oauth2provider model: authentik_providers_oauth2.oauth2provider
state: present state: present

1
release/6.0.0+2024.4.0 Normal file
View File

@ -0,0 +1 @@
Alerta! ⚠️ If you are using AUTHENTIK_COLOR_BACKGROUND_LIGHT, you will need to set COMPOSE_FILE="$COMPOSE_FILE:compose.css.yml"

1
release/6.1.0+2024.4.2 Normal file
View File

@ -0,0 +1 @@
Blueprint for Kimai SSO integration added

5
release/6.5.1+2024.6.5 Normal file
View File

@ -0,0 +1,5 @@
Replaced icon bbb.jpg with icon.png - configs need to be updated when upgrading!
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

67
zammad.yaml.tmpl Normal file
View File

@ -0,0 +1,67 @@
version: 1
metadata:
labels:
blueprints.goauthentik.io/instantiate: "true"
name: zammad
entries:
- attrs:
expression: return request.user.name
managed: null
name: 'Zammad SAML Mapping: name'
saml_name: name
conditions: []
identifiers:
name: zammad_name_mapping
id: zammad_name_mapping
model: authentik_providers_saml.samlpropertymapping
state: present
- attrs:
expression: return request.user.email
managed: null
name: 'Zammad SAML Mapping: email'
saml_name: email
conditions: []
identifiers:
name: zammad_email_mapping
id: zammad_email_mapping
model: authentik_providers_saml.samlpropertymapping
state: present
- attrs:
acs_url: https://{{ env "ZAMMAD_DOMAIN" }}/auth/saml/callback
assertion_valid_not_before: minutes=-5
assertion_valid_not_on_or_after: minutes=5
audience: https://{{ env "ZAMMAD_DOMAIN" }}/auth/saml/metadata
authentication_flow: !Find [authentik_flows.flow, [slug, default-authentication-flow]]
authorization_flow: !Find [authentik_flows.flow, [slug, default-provider-authorization-implicit-consent]]
digest_algorithm: http://www.w3.org/2001/04/xmlenc#sha256
issuer: https://{{ env "ZAMMAD_DOMAIN" }}/auth/saml/metadata
name: zammad
property_mappings:
- !KeyOf zammad_name_mapping
- !KeyOf zammad_email_mapping
session_valid_not_on_or_after: minutes=86400
signature_algorithm: http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
signing_kp: !Find [authentik_crypto.certificatekeypair, [name, authentik Self-signed Certificate]]
sp_binding: post
conditions: []
id: zammad_provider
identifiers:
pk: 9989
model: authentik_providers_saml.samlprovider
state: present
- attrs:
meta_launch_url: https://{{ env "ZAMMAD_DOMAIN" }}
open_in_new_tab: true
policy_engine_mode: any
provider: !KeyOf zammad_provider
slug: zammad
conditions: []
id: zammad_application
identifiers:
name: Zammad
model: authentik_core.application
state: present