ADMIN_EMAIL={{ lookup('users', 'administrator').email | dotenv_quote }} ADMIN_PASSWORD={{ lookup('users', 'administrator').password | dotenv_quote }} ADMIN_USERNAME={{ lookup('users', 'administrator').username | dotenv_quote }} APP_BASE_URL={{ lookup('tls', application_id, 'url.base') }} BIBER_EMAIL={{ (lookup('users', 'biber').username ~ '@' ~ lookup('config', 'web-app-mailu', 'services.mailu.domain')) | dotenv_quote }} BIBER_PASSWORD={{ lookup('users', 'biber').password | dotenv_quote }} BIBER_USERNAME={{ lookup('users', 'biber').username | dotenv_quote }} CANONICAL_DOMAIN={{ lookup('domain', application_id) | dotenv_quote }} # nocheck: playwright-service-gate — platform mail provider presence, no Mailu spec surface EMAIL_SERVICE_ENABLED={{ lookup('config', application_id, 'services.email.enabled') | string | lower }} LOGOUT_SERVICE_ENABLED={{ lookup('config', application_id, 'services.logout.enabled') | string | lower }} MAILU_BASE_URL={{ lookup('tls', 'web-app-mailu', 'url.base') | dotenv_quote }} MATOMO_BASE_URL={{ lookup('tls', 'web-app-matomo', 'url.base') | dotenv_quote }} MATOMO_SERVICE_ENABLED={{ lookup('config', application_id, 'services.matomo.enabled') | string | lower }} OIDC_ISSUER_URL={{ OIDC.CLIENT.ISSUER_URL | dotenv_quote }} # nocheck: persona-block-rationale — Mailu's admin surface is a separate Flask app mounted at WEB_ADMIN=/admin (templates/env.j2), not the /webmail/ Roundcube surface the OIDC callback lands on; the shared adminInteraction never leaves webmail and its logout matcher hits Roundcube's openid-connect/logout link first, so the bespoke scenario navigates /admin and signs out at /admin/ui/logout instead (see README "Persona contract opt-outs"). PERSONA_ADMINISTRATOR_BLOCKED=true # nocheck: persona-block-rationale — Mailu's OIDC fork interposes its own /sso/login page carrying a local form plus an openid-connect/auth link, while the authenticated Roundcube surface carries an openid-connect/logout link; the shared helper's name-based login matcher cannot tell the two apart and clicks logout, so the bespoke scenario targets the auth href explicitly (see README "Persona contract opt-outs"). PERSONA_BIBER_BLOCKED=true # nocheck: playwright-service-gate — SSO surface; auth flow gated by Keycloak realm not Playwright env var SSO_SERVICE_ENABLED={{ lookup('config', application_id, 'services.sso.enabled') | string | lower }}