2026-03-06 01:36:23 +05:45
|
|
|
FLASK_APP=manage.py
|
2026-01-08 01:00:26 +10:30
|
|
|
FLASK_ENV=development
|
2026-03-06 01:36:23 +05:45
|
|
|
FLASK_DEBUG=1
|
2026-01-08 01:00:26 +10:30
|
|
|
|
2026-04-04 16:51:19 +10:30
|
|
|
# ═════════════════════════════════════════════════════════════════════════════
|
|
|
|
|
# Docker / Production
|
|
|
|
|
# ═════════════════════════════════════════════════════════════════════════════
|
|
|
|
|
COMPOSE_PROJECT_NAME=authy2
|
|
|
|
|
FLASK_ENV=production
|
2026-04-05 13:58:48 +00:00
|
|
|
POSTGRES_USER=appuser
|
|
|
|
|
POSTGRES_PASSWORD=change-me-in-production
|
|
|
|
|
POSTGRES_DB=secuird
|
2026-04-04 16:51:19 +10:30
|
|
|
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
|
|
|
|
|
SQLALCHEMY_DATABASE_URI=${DATABASE_URL}
|
|
|
|
|
REDIS_URL=redis://redis:6379/0
|
|
|
|
|
SESSION_REDIS_URL=redis://redis:6379/0
|
|
|
|
|
RATELIMIT_STORAGE_URL=redis://redis:6379/1
|
|
|
|
|
HTTP_PORT=80
|
|
|
|
|
HTTPS_PORT=443
|
|
|
|
|
API_PORT=5000
|
|
|
|
|
|
|
|
|
|
# Database (overridden by Docker values above)
|
2026-01-08 01:00:26 +10:30
|
|
|
SQLALCHEMY_ECHO=False
|
2026-01-08 15:59:53 +10:30
|
|
|
SQLALCHEMY_LOG_LEVEL=WARNING
|
2026-01-08 01:00:26 +10:30
|
|
|
|
2026-03-06 01:36:23 +05:45
|
|
|
# Security / Encryption
|
|
|
|
|
SECRET_KEY=change-me-in-production
|
|
|
|
|
ENCRYPTION_KEY=change-me-in-production-32-bytes!!
|
|
|
|
|
# Used to encrypt SSH CA private keys stored in the database
|
|
|
|
|
CA_ENCRYPTION_KEY=change-me-in-production
|
2026-01-08 01:00:26 +10:30
|
|
|
BCRYPT_LOG_ROUNDS=12
|
2026-03-06 01:36:23 +05:45
|
|
|
|
|
|
|
|
# Session cookies
|
2026-04-04 16:51:19 +10:30
|
|
|
SESSION_COOKIE_SECURE=True
|
2026-01-08 01:00:26 +10:30
|
|
|
SESSION_COOKIE_SAMESITE=Lax
|
2026-03-06 01:36:23 +05:45
|
|
|
# Only needed when sharing cookies across subdomains (e.g. api.example.com + ui.example.com)
|
|
|
|
|
# SESSION_COOKIE_DOMAIN=example.com
|
2026-01-08 01:00:26 +10:30
|
|
|
MAX_SESSION_DURATION=86400
|
|
|
|
|
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# JWT
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
JWT_SECRET_KEY=change-me-in-production
|
2026-01-08 01:00:26 +10:30
|
|
|
JWT_ACCESS_TOKEN_EXPIRES=3600
|
|
|
|
|
JWT_REFRESH_TOKEN_EXPIRES=2592000
|
|
|
|
|
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# Redis (session storage + rate limiting)
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
2026-01-08 01:00:26 +10:30
|
|
|
REDIS_URL=redis://localhost:6379/0
|
2026-03-06 01:36:23 +05:45
|
|
|
SESSION_REDIS_URL=redis://localhost:6379/0
|
|
|
|
|
RATELIMIT_STORAGE_URL=redis://localhost:6379/1
|
2026-01-08 01:00:26 +10:30
|
|
|
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# CORS
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
CORS_ORIGINS=http://localhost:8080,http://localhost:5173
|
|
|
|
|
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# Frontend / App URLs
|
|
|
|
|
# All three should point at the browser-facing SPA. They are used for:
|
|
|
|
|
# FRONTEND_URL → OAuth callback redirects after provider auth
|
|
|
|
|
# APP_URL → Password-reset and email-verify links in emails
|
|
|
|
|
# OIDC_UI_URL → OIDC /authorize redirects to the React consent/login UI
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
FRONTEND_URL=http://localhost:8080
|
|
|
|
|
APP_URL=http://localhost:8080
|
|
|
|
|
OIDC_UI_URL=http://localhost:8080
|
|
|
|
|
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# OIDC / OAuth issuer
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
2026-01-08 01:00:26 +10:30
|
|
|
OIDC_ISSUER_URL=http://localhost:5000
|
2026-03-06 01:36:23 +05:45
|
|
|
OIDC_BASE_URL=http://localhost:5000
|
|
|
|
|
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# WebAuthn
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
WEBAUTHN_RP_ID=localhost
|
2026-04-04 16:51:19 +10:30
|
|
|
WEBAUTHN_RP_NAME=Secuird
|
2026-03-06 01:36:23 +05:45
|
|
|
WEBAUTHN_ORIGIN=http://localhost:8080
|
|
|
|
|
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# SSH CA (pick one)
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
SSH_CA_KEY_PATH=/path/to/ca-users
|
|
|
|
|
# SSH_CA_PRIVATE_KEY= # raw key content; takes priority over SSH_CA_KEY_PATH
|
2026-01-08 01:00:26 +10:30
|
|
|
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# Email / SMTP
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
EMAIL_ENABLED=False
|
|
|
|
|
SMTP_HOST=smtp.gmail.com
|
|
|
|
|
SMTP_PORT=587
|
|
|
|
|
SMTP_USE_TLS=True
|
|
|
|
|
SMTP_USERNAME=
|
|
|
|
|
SMTP_PASSWORD=
|
|
|
|
|
FROM_ADDRESS=noreply@gatehouse.local
|
|
|
|
|
|
2026-04-04 16:51:19 +10:30
|
|
|
# Email Provider (smtp, mailgun, sendgrid)
|
|
|
|
|
# Note: SMTP is the default. Set to "mailgun" or "sendgrid" to use those providers
|
|
|
|
|
EMAIL_PROVIDER=smtp
|
|
|
|
|
|
|
|
|
|
# Mailgun Configuration (used when EMAIL_PROVIDER=mailgun)
|
|
|
|
|
# MAILGUN_API_KEY=your-mailgun-api-key
|
|
|
|
|
# MAILGUN_DOMAIN=mg.yourdomain.com
|
|
|
|
|
# MAILGUN_API_URL=https://api.mailgun.net/v3
|
|
|
|
|
|
|
|
|
|
# SendGrid Configuration (used when EMAIL_PROVIDER=sendgrid)
|
|
|
|
|
# SENDGRID_API_KEY=SG.your-sendgrid-api-key
|
|
|
|
|
# SENDGRID_FROM_EMAIL=noreply@yourdomain.com
|
|
|
|
|
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
2026-01-08 01:00:26 +10:30
|
|
|
# Logging
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
2026-01-08 01:00:26 +10:30
|
|
|
LOG_LEVEL=INFO
|
|
|
|
|
LOG_TO_STDOUT=True
|
|
|
|
|
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
2026-01-08 01:00:26 +10:30
|
|
|
# Rate Limiting
|
2026-03-06 01:36:23 +05:45
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
2026-01-08 01:00:26 +10:30
|
|
|
RATELIMIT_ENABLED=True
|
2026-03-06 01:36:23 +05:45
|
|
|
# Per-endpoint auth limits (optional — defaults shown)
|
|
|
|
|
# RATELIMIT_AUTH_REGISTER=10 per minute; 50 per hour
|
|
|
|
|
# RATELIMIT_AUTH_LOGIN=20 per minute; 100 per hour
|
|
|
|
|
# RATELIMIT_AUTH_TOTP_VERIFY=20 per minute; 100 per hour
|
|
|
|
|
# RATELIMIT_AUTH_FORGOT_PASSWORD=5 per minute; 20 per hour
|
|
|
|
|
# RATELIMIT_AUTH_RESET_PASSWORD=10 per minute; 30 per hour
|
2026-03-20 21:50:20 +10:30
|
|
|
|
|
|
|
|
ZEROTIER_API_TOKEN=
|
2026-03-06 01:36:23 +05:45
|
|
|
ZEROTIER_API_URL=
|
|
|
|
|
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# OIDC token lifetimes & security (optional — defaults shown)
|
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
|
# OIDC_ACCESS_TOKEN_LIFETIME=3600
|
|
|
|
|
# OIDC_REFRESH_TOKEN_LIFETIME=2592000
|
|
|
|
|
# OIDC_ID_TOKEN_LIFETIME=3600
|
|
|
|
|
# OIDC_AUTHORIZATION_CODE_LIFETIME=600
|
|
|
|
|
# OIDC_REQUIRE_PKCE=True
|
|
|
|
|
# OIDC_ALLOW_IMPLICIT_FLOW=False
|
|
|
|
|
# OIDC_KEY_ROTATION_DAYS=90
|
|
|
|
|
# OIDC_KEY_GRACE_PERIOD_DAYS=30
|
|
|
|
|
# OIDC_RATE_LIMIT_AUTHORIZE=10/minute
|
|
|
|
|
# OIDC_RATE_LIMIT_TOKEN=20/minute
|
|
|
|
|
# OIDC_RATE_LIMIT_USERINFO=60/minute
|