Source code for app.config

import os
import secrets
from datetime import timedelta
from typing import List

from cachelib import FileSystemCache
from dotenv import load_dotenv
from redis import Redis

basedir = os.path.abspath(
    os.path.abspath(os.path.dirname(__file__)) + "/.."
)  # the repositories folder

load_dotenv(os.path.join(basedir, ".env"))


def _get_env_or_default(env: str, default: str, cast=None):
    if (val := os.environ.get(env, None)) is None:
        return default
    return cast(val) if cast is not None else val


def _get_int_env_or_default(env: str, default: str) -> int:
    try:
        return _get_env_or_default(env, default, int)
    except ValueError:
        return default


def _get_bool_env_or_false(env: str) -> bool:
    return os.environ.get(env, False) in ['True', 'true', 1]


[docs] class Config: SECRET_KEY = secrets.token_hex() MAX_CONTENT_LENGTH: int = 16 * 1000 * 1000 # max for file uplaods # see https://flask-session.readthedocs.io/en/latest/config.html# SESSION_TYPE: str = _get_env_or_default("SESSION_TYPE", "cachelib") if SESSION_TYPE == "cachelib": SESSION_CACHELIB = FileSystemCache( cache_dir=os.path.join(basedir, _get_env_or_default("SESSION_DIR", "resources/flask_sessions")), threshold=500, ) elif SESSION_TYPE == "redis": SESSION_REDIS = Redis.from_url(url=_get_env_or_default("SESSION_REDIS", "")) PERMANENT_SESSION_LIFETIME = _get_int_env_or_default("PERMANENT_SESSION_LIFETIME", timedelta(days=14)) SQLALCHEMY_DATABASE_URI: str = ("sqlite:///" + os.path.join(basedir, _get_env_or_default("SQLALCHEMY_DATABASE_URI", "resources/hackerschool.sqlite3"))) ROLES_PATH: str = os.path.join(basedir, _get_env_or_default("ROLES_PATH", "resources/roles.yaml")) IMAGES_PATH: str = os.path.join(basedir, _get_env_or_default("IMAGES_PATH", "resources/images/")) ROOT_URI = _get_env_or_default("ROOT_URI", "http://localhost:5000") ENABLED_ACCESS_CONTROL: bool = _get_bool_env_or_false("ENABLED_ACCESS_CONTROL") ORIGINS_WHITELIST: List = _get_env_or_default("ORIGINS_WHITELIST", "http://localhost:5173").split() CLIENT_ID: str = _get_env_or_default("CLIENT_ID", "") CLIENT_SECRET: str = _get_env_or_default("CLIENT_SECRET", "") FENIX_REDIRECT_ENDPOINT: str = _get_env_or_default("FENIX_REDIRECT_ENDPOINT", "/fenix-login-callback") SESSION_COOKIE_SAMESITE = _get_env_or_default("SAME_SITE_POLICY", "Strict") SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SECURE = True SENTRY_DSN: str = _get_env_or_default("SENTRY_DSN", "")