Files
PassKeeper/app/config.py
T
2026-04-16 08:27:07 -04:00

53 lines
1.5 KiB
Python

import os
from datetime import timedelta
from dotenv import load_dotenv
load_dotenv()
class BaseConfig:
SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-change-me')
JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY', 'jwt-secret-change-me')
JWT_ACCESS_TOKEN_EXPIRES = timedelta(minutes=15)
JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=7)
SQLALCHEMY_DATABASE_URI = (
'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset=utf8mb4'.format(
user=os.environ.get('MYSQL_USER', 'passkeeper'),
password=os.environ.get('MYSQL_PASSWORD', ''),
host=os.environ.get('MYSQL_HOST', '127.0.0.1'),
port=os.environ.get('MYSQL_PORT', '3306'),
db=os.environ.get('MYSQL_DB', 'passkeeper'),
)
)
SQLALCHEMY_TRACK_MODIFICATIONS = False
WTF_CSRF_ENABLED = True
WTF_CSRF_TIME_LIMIT = 3600
ARGON2_TIME_COST = int(os.environ.get('ARGON2_TIME_COST', 3))
ARGON2_MEMORY_COST = int(os.environ.get('ARGON2_MEMORY_COST', 65536))
ARGON2_PARALLELISM = int(os.environ.get('ARGON2_PARALLELISM', 4))
RATELIMIT_STORAGE_URI = 'memory://'
class DevelopmentConfig(BaseConfig):
DEBUG = True
RATELIMIT_ENABLED = False
class ProductionConfig(BaseConfig):
DEBUG = False
RATELIMIT_ENABLED = True
# Force HTTPS in production
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = 'Lax'
config = {
'development': DevelopmentConfig,
'production': ProductionConfig,
}