fix with .env/password

This commit is contained in:
Mateusz Gruszczyński
2026-03-31 13:23:56 +02:00
parent edd0a3767f
commit 40ffbb7de7
4 changed files with 222 additions and 95 deletions

136
config.py
View File

@@ -1,85 +1,113 @@
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" # działa w HTTP i HTTPS
SECRET_KEY = os.environ.get("SECRET_KEY", "D8pceNZ8q%YR7^7F&9wAC2")
SESSION_COOKIE_SAMESITE = "Lax"
APP_PORT = int(os.environ.get("APP_PORT", "8000") or "8000")
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()
DB_ENGINE = os.environ.get("DB_ENGINE", "sqlite").lower()
if DB_ENGINE == "sqlite":
SQLALCHEMY_DATABASE_URI = (
f"sqlite:///{os.path.join(basedir, 'db', 'shopping.db')}"
)
elif DB_ENGINE == "pgsql":
SQLALCHEMY_DATABASE_URI = f"postgresql://{os.environ['DB_USER']}:{os.environ['DB_PASSWORD']}@{os.environ['DB_HOST']}:{os.environ.get('DB_PORT', 5432)}/{os.environ['DB_NAME']}"
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":
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{os.environ['DB_USER']}:{os.environ['DB_PASSWORD']}@{os.environ['DB_HOST']}:{os.environ.get('DB_PORT', 3306)}/{os.environ['DB_NAME']}"
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 = os.environ.get("SYSTEM_PASSWORD", "admin")
DEFAULT_ADMIN_USERNAME = os.environ.get("DEFAULT_ADMIN_USERNAME", "admin")
DEFAULT_ADMIN_PASSWORD = os.environ.get("DEFAULT_ADMIN_PASSWORD", "admin123")
UPLOAD_FOLDER = os.environ.get("UPLOAD_FOLDER", "uploads")
AUTHORIZED_COOKIE_VALUE = os.environ.get("AUTHORIZED_COOKIE_VALUE", "cookievalue")
BCRYPT_PEPPER = os.environ.get("BCRYPT_PEPPER", "sekretnyKluczBcrypt")
SESSION_COOKIE_SECURE = os.environ.get("SESSION_COOKIE_SECURE", "0") == "1"
HEALTHCHECK_TOKEN = os.environ.get("HEALTHCHECK_TOKEN", "alamapsaikota1234")
try:
AUTH_COOKIE_MAX_AGE = int(
os.environ.get("AUTH_COOKIE_MAX_AGE", "86400") or "86400"
)
except ValueError:
AUTH_COOKIE_MAX_AGE = 86400
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")
try:
SESSION_TIMEOUT_MINUTES = int(
os.environ.get("SESSION_TIMEOUT_MINUTES", "10080") or "10080"
)
except ValueError:
SESSION_TIMEOUT_MINUTES = 10080
AUTH_COOKIE_MAX_AGE = env_int("AUTH_COOKIE_MAX_AGE", 86400)
SESSION_TIMEOUT_MINUTES = env_int("SESSION_TIMEOUT_MINUTES", 10080)
ENABLE_HSTS = os.environ.get("ENABLE_HSTS", "0") == "1"
ENABLE_XFO = os.environ.get("ENABLE_XFO", "0") == "1"
ENABLE_XCTO = os.environ.get("ENABLE_XCTO", "0") == "1"
ENABLE_CSP = os.environ.get("ENABLE_CSP", "0") == "1"
ENABLE_PP = os.environ.get("ENABLE_PP", "0") == "1"
REFERRER_POLICY = os.environ.get("REFERRER_POLICY") or None
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)
DEBUG_MODE = os.environ.get("DEBUG_MODE", "1") == "1"
DISABLE_ROBOTS = os.environ.get("DISABLE_ROBOTS", "0") == "1"
REFERRER_POLICY = env_str("REFERRER_POLICY") or None
JS_CACHE_CONTROL = os.environ.get(
"JS_CACHE_CONTROL", "no-cache"
)
CSS_CACHE_CONTROL = os.environ.get(
"CSS_CACHE_CONTROL", "no-cache"
)
LIB_JS_CACHE_CONTROL = os.environ.get(
"LIB_JS_CACHE_CONTROL", "max-age=604800"
)
LIB_CSS_CACHE_CONTROL = os.environ.get(
"LIB_CSS_CACHE_CONTROL", "max-age=604800"
)
UPLOADS_CACHE_CONTROL = os.environ.get(
"UPLOADS_CACHE_CONTROL", "public, max-age=2592000, immutable"
DEBUG_MODE = env_bool("DEBUG_MODE", True)
DISABLE_ROBOTS = env_bool("DISABLE_ROBOTS", False)
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 os.environ.get(
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()
]
"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()
]