import os from urllib.parse import quote_plus basedir = os.path.abspath(os.path.dirname(__file__)) def env_str(name, default=None): value = os.environ.get(name) return default if value is None else value def env_int(name, default): value = os.environ.get(name) if value is None or value == "": return default try: return int(value) except (TypeError, ValueError): return default def env_bool(name, default=False): value = os.environ.get(name) if value is None: return default return str(value).strip().lower() in ("1", "true", "yes", "on") class Config: SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SAMESITE = "Lax" SECRET_KEY = env_str("SECRET_KEY", "D8pceNZ8q%YR7^7F&9wAC2") APP_PORT = env_int("APP_PORT", 8000) DB_ENGINE = env_str("DB_ENGINE", "sqlite").lower() if DB_ENGINE == "sqlite": SQLALCHEMY_DATABASE_URI = ( f"sqlite:///{os.path.join(basedir, 'db', 'shopping.db')}" ) elif DB_ENGINE == "pgsql": db_user = quote_plus(env_str("DB_USER", "user")) db_password = quote_plus(env_str("DB_PASSWORD", "pass")) db_host = env_str("DB_HOST", "pgsql") db_port = env_str("DB_PORT", "5432") db_name = quote_plus(env_str("DB_NAME", "myapp")) SQLALCHEMY_DATABASE_URI = ( f"postgresql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}" ) elif DB_ENGINE == "mysql": db_user = quote_plus(env_str("DB_USER", "user")) db_password = quote_plus(env_str("DB_PASSWORD", "pass")) db_host = env_str("DB_HOST", "mysql") db_port = env_str("DB_PORT", "3306") db_name = quote_plus(env_str("DB_NAME", "myapp")) SQLALCHEMY_DATABASE_URI = ( f"mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}" ) else: raise ValueError("Nieobsługiwany typ bazy danych.") SQLALCHEMY_TRACK_MODIFICATIONS = False SYSTEM_PASSWORD = env_str("SYSTEM_PASSWORD", "admin") DEFAULT_ADMIN_USERNAME = env_str("DEFAULT_ADMIN_USERNAME", "admin") DEFAULT_ADMIN_PASSWORD = env_str("DEFAULT_ADMIN_PASSWORD", "admin123") UPLOAD_FOLDER = env_str("UPLOAD_FOLDER", "uploads") AUTHORIZED_COOKIE_VALUE = env_str("AUTHORIZED_COOKIE_VALUE", "cookievalue") BCRYPT_PEPPER = env_str("BCRYPT_PEPPER", "sekretnyKluczBcrypt") SESSION_COOKIE_SECURE = env_bool("SESSION_COOKIE_SECURE", False) HEALTHCHECK_TOKEN = env_str("HEALTHCHECK_TOKEN", "alamapsaikota1234") AUTH_COOKIE_MAX_AGE = env_int("AUTH_COOKIE_MAX_AGE", 86400) SESSION_TIMEOUT_MINUTES = env_int("SESSION_TIMEOUT_MINUTES", 10080) ENABLE_HSTS = env_bool("ENABLE_HSTS", False) ENABLE_XFO = env_bool("ENABLE_XFO", False) ENABLE_XCTO = env_bool("ENABLE_XCTO", False) ENABLE_CSP = env_bool("ENABLE_CSP", False) ENABLE_PP = env_bool("ENABLE_PP", False) REFERRER_POLICY = env_str("REFERRER_POLICY") or None DEBUG_MODE = env_bool("DEBUG_MODE", True) DISABLE_ROBOTS = env_bool("DISABLE_ROBOTS", False) CURRENCY_CODE = env_str("CURRENCY_CODE", "PLN").strip().upper() or "PLN" JS_CACHE_CONTROL = env_str("JS_CACHE_CONTROL", "no-cache") CSS_CACHE_CONTROL = env_str("CSS_CACHE_CONTROL", "no-cache") LIB_JS_CACHE_CONTROL = env_str("LIB_JS_CACHE_CONTROL", "max-age=604800") LIB_CSS_CACHE_CONTROL = env_str("LIB_CSS_CACHE_CONTROL", "max-age=604800") UPLOADS_CACHE_CONTROL = env_str( "UPLOADS_CACHE_CONTROL", "public, max-age=2592000, immutable", ) DEFAULT_CATEGORIES = [ c.strip() for c in env_str( "DEFAULT_CATEGORIES", "Spożywcze,Budowlane,Zabawki,Chemia,Inne,Elektronika,Odzież i obuwie,Jedzenie poza domem," "Artykuły biurowe,Kosmetyki i higiena,Motoryzacja,Ogród i rośliny," "Zwierzęta,Sprzęt sportowy,Książki i prasa,Narzędzia i majsterkowanie," "RTV / AGD,Apteka i suplementy,Artykuły dekoracyjne,Gry i hobby,Usługi,Pieczywo,Różne,Chiny,Dom,Leki,Odzież,Samochód,Dzieci", ).split(",") if c.strip() ]