From 5b26c2dfaddecc599998f7bf9fde91b1aff37e07 Mon Sep 17 00:00:00 2001
From: Thomas Schneider <thomas@fsmpi.rwth-aachen.de>
Date: Sat, 14 Sep 2024 14:50:32 +0200
Subject: [PATCH] Add example config for login

---
 examples/config.py | 112 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)

diff --git a/examples/config.py b/examples/config.py
index f3cc2d0..ae122ff 100644
--- a/examples/config.py
+++ b/examples/config.py
@@ -1,3 +1,11 @@
+# Import as needed
+from onelogin.saml2.idp_metadata_parser import (
+    OneLogin_Saml2_IdPMetadataParser as IdPMetadataParser,
+)
+from deepmerge import always_merger
+from pathlib import Path
+
+
 SQLALCHEMY_DATABASE_URI = "postgresql+psycopg:///schilder2000"
 # To generate a secret key:
 #   % python -c 'import secrets; print(secrets.token_hex())'
@@ -11,3 +19,107 @@ PRINTERS = {
     "Office": "ipps://printserver.example.com:443/printers/Office",
     "Kitchen": "ipp://kitchenprinter.local:631/ipp/print",
 }
+
+REQUIRE_LOGIN = True
+
+
+# See upstream documentation for reference:
+# https://flask-multipass.readthedocs.io
+
+_ldap_config = {
+    "uri": "ldaps://dc.example.org:636",
+    "bind_dn": "CN=schilder2000,CN=Service Accounts,CN=Users,DC=example,DC=org",
+    "bind_password": "hunter2",
+    "timeout": 30,
+    "verify_cert": True,
+    # optional: if not present, uses certifi's CA bundle (if installed)
+    # "cert_file": "path/to/server/cert",
+    "starttls": False,
+    "page_size": 1000,
+    "uid": "sAMAccountName",
+    "user_base": "CN=Users,DC=example,DC=org",
+    "user_filter": "(objectCategory=person)",
+}
+
+_saml_config = always_merger.merge(
+    IdPMetadataParser.parse_remote(
+        "https://idp.example.org/realms/owca/protocol/saml/descriptor"
+    ),
+    {
+        "debug": False,
+        "sp": {
+            "entityId": "https://schilder2000.example.org/multipass/saml/fsmpi-saml/metadata",
+            "x509cert": (Path(__file__).parent / "saml-cert.pem").read_text(),
+            "privateKey": (Path(__file__).parent / "saml-key.pem").read_text(),
+            # We don’t use the name anyway
+            "NameIDFormat": "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
+        },
+        "security": {
+            # Keycloak wants this, even though it doesn’t say so
+            "logoutRequestSigned": True,
+        },
+    },
+)
+
+_oidc_config = {
+    "client_id": "schilder2000",
+    "client_secret": "hunter2",
+    "server_metadata_url": "https://idp.example.org/realms/owca/.well-known/openid-configuration",
+    "client_kwargs": {
+        "scope": "openid",
+    },
+}
+
+MULTIPASS_AUTH_PROVIDERS = {
+    "test_auth_provider": {
+        "type": "static",
+        "title": "Insecure dummy auth",
+        "identities": {
+            "gustav": "hunter2",
+        },
+    },
+    "fsmpi-ldap": {
+        "type": "ldap",
+        "title": "O.W.C.A. LDAP",
+        "ldap": _ldap_config,
+    },
+    "fsmpi-saml": {
+        "type": "saml",
+        "title": "O.W.C.A. SAML",
+        "saml_config": _saml_config,
+    },
+    "fsmpi-oidc": {
+        "type": "authlib",
+        "title": "O.W.C.A. OIDC",
+        "authlib_args": _oidc_config,
+    },
+}
+
+MULTIPASS_IDENTITY_PROVIDERS = {
+    "test_identity_provider": {
+        "type": "static",
+        "identities": {
+            "gustav": {},
+        },
+    },
+    "ldap": {
+        "type": "ldap",
+        "ldap": _ldap_config,
+    },
+    "saml": {
+        "type": "saml",
+    },
+    "oidc": {
+        "type": "authlib",
+        "title": "OIDC",
+    },
+}
+
+MULTIPASS_PROVIDER_MAP = {
+    "test_auth_provider": "test_identity_provider",
+    "ldap": "ldap",
+    "saml": "saml",
+    "oidc": "oidc",
+}
+
+MULTIPASS_IDENTITY_INFO_KEYS = []
-- 
GitLab