Files
paperless-ngx-deployment/authentik-setup.py
T
feedc0de fbafa72cba
Test and deploy / test (push) Successful in 11s
Test and deploy / deploy (push) Failing after 17s
Add authenticated scanner UI and Paperless handoff
2026-10-04 19:17:01 +02:00

94 lines
3.9 KiB
Python

from django.db import transaction
from authentik.core.models import Application, Group, User
from authentik.policies.models import PolicyBinding
from authentik.providers.oauth2.models import OAuth2Provider
from authentik.providers.proxy.models import ProxyProvider
from authentik.outposts.models import Outpost
with transaction.atomic():
template = OAuth2Provider.objects.get(name="Argo CD")
redirect = template.redirect_uris[0]
provider, _ = OAuth2Provider.objects.get_or_create(
name="Paperless-ngx",
defaults={
"authorization_flow": template.authorization_flow,
"invalidation_flow": template.invalidation_flow,
"client_type": "confidential",
"grant_types": ["authorization_code", "refresh_token"],
"client_id": "paperless-ngx",
"client_secret": CLIENT_SECRET,
"signing_key": template.signing_key,
},
)
provider.authorization_flow = template.authorization_flow
provider.invalidation_flow = template.invalidation_flow
provider.client_type = "confidential"
provider.grant_types = ["authorization_code", "refresh_token"]
provider.client_id = "paperless-ngx"
provider.client_secret = CLIENT_SECRET
provider.signing_key = template.signing_key
provider.redirect_uris = [
type(redirect)(
matching_mode=redirect.matching_mode,
url="https://paper.brunner.ninja/accounts/oidc/authentik/login/callback/",
redirect_uri_type=redirect.redirect_uri_type,
)
]
provider.save()
provider.property_mappings.set(
template.property_mappings.filter(managed__startswith="goauthentik.io/providers/oauth2/scope-")
)
app, _ = Application.objects.get_or_create(
slug="paperless-ngx", defaults={"name": "Paperless-ngx", "provider": provider}
)
app.name = "Paperless-ngx"
app.provider = provider
app.meta_launch_url = "https://paper.brunner.ninja"
app.save()
group, _ = Group.objects.get_or_create(name="Paperless Users")
admin_group, _ = Group.objects.get_or_create(name="Paperless Admins")
owner = User.objects.get(username="feedc0de")
group.users.add(owner)
admin_group.users.add(owner)
binding, _ = PolicyBinding.objects.get_or_create(
target=app, group=group, defaults={"order": 0, "enabled": True}
)
if not binding.enabled:
binding.enabled = True
binding.save(update_fields=["enabled"])
proxy_template = ProxyProvider.objects.get(name="Provider for 30-birthday-admin")
scanner_provider, _ = ProxyProvider.objects.get_or_create(
name="Paperless scanner",
defaults={
"authorization_flow": proxy_template.authorization_flow,
"invalidation_flow": proxy_template.invalidation_flow,
"mode": "forward_single",
"external_host": "https://scanner.brunner.ninja/",
},
)
scanner_provider.authorization_flow = proxy_template.authorization_flow
scanner_provider.invalidation_flow = proxy_template.invalidation_flow
scanner_provider.mode = "forward_single"
scanner_provider.external_host = "https://scanner.brunner.ninja/"
scanner_provider.save()
scanner_app, _ = Application.objects.get_or_create(
slug="paperless-scanner",
defaults={"name": "Paperless scanner", "provider": scanner_provider},
)
scanner_app.name = "Paperless scanner"
scanner_app.provider = scanner_provider
scanner_app.meta_launch_url = "https://scanner.brunner.ninja/"
scanner_app.save()
scanner_binding, _ = PolicyBinding.objects.get_or_create(
target=scanner_app, group=group, defaults={"order": 0, "enabled": True}
)
if not scanner_binding.enabled:
scanner_binding.enabled = True
scanner_binding.save(update_fields=["enabled"])
Outpost.objects.get(name="authentik Embedded Outpost").providers.add(scanner_provider)
print("PAPERLESS_AUTHENTIK_AND_SCANNER_READY")