import os from dotenv import load_dotenv load_dotenv() class Config: SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-change-me') SQLALCHEMY_TRACK_MODIFICATIONS = False WTF_CSRF_ENABLED = True DATABASE_URL = os.environ.get('DATABASE_URL', '') SQLALCHEMY_DATABASE_URI = DATABASE_URL GROQ_API_KEY = os.environ.get('GROQ_API_KEY', '') GROQ_MODEL = os.environ.get('GROQ_MODEL', 'llama-3.3-70b-versatile') UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', '/home/pfm/app/uploads') MAX_CONTENT_LENGTH = int(os.environ.get('MAX_CONTENT_LENGTH', 10485760)) APP_CURRENCY = os.environ.get('APP_CURRENCY', 'USD') APP_CURRENCY_SYMBOL = os.environ.get('APP_CURRENCY_SYMBOL', '$') APP_TIMEZONE = os.environ.get('APP_TIMEZONE', 'Asia/Ho_Chi_Minh') ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'pdf'} # Teller TELLER_APP_ID = os.environ.get('TELLER_APP_ID', '') TELLER_ENV = os.environ.get('TELLER_ENV', 'development') TELLER_CERT_PATH = os.environ.get('TELLER_CERT_PATH', '/home/pfm/teller/certificate.pem') TELLER_KEY_PATH = os.environ.get('TELLER_KEY_PATH', '/home/pfm/teller/private_key.pem') TELLER_WEBHOOK_SECRET = os.environ.get('TELLER_WEBHOOK_SECRET', '') # Budget alert emails (optional — all four must be set to enable) SMTP_HOST = os.environ.get('SMTP_HOST', '') SMTP_PORT = int(os.environ.get('SMTP_PORT', 587)) SMTP_USER = os.environ.get('SMTP_USER', '') SMTP_PASSWORD = os.environ.get('SMTP_PASSWORD', '') ALERT_EMAIL = os.environ.get('ALERT_EMAIL', '') # recipient address APP_URL = os.environ.get('APP_URL', 'https://pfm.ngodanguyen.tech') # Application log file (rotating, shared by all app.* loggers) LOG_FILE_PATH = os.environ.get( 'LOG_FILE_PATH', os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'logs', 'app.log') ) LOG_MAX_BYTES = int(os.environ.get('LOG_MAX_BYTES', 10 * 1024 * 1024)) # 10 MB LOG_BACKUP_COUNT = int(os.environ.get('LOG_BACKUP_COUNT', 5)) class DevelopmentConfig(Config): DEBUG = True SQLALCHEMY_DATABASE_URI = os.environ.get( 'DATABASE_URL', 'mysql+pymysql://pfm_user:password@localhost/pfm_db' ) SQLALCHEMY_ECHO = False # set True to log SQL queries during dev class ProductionConfig(Config): DEBUG = False SQLALCHEMY_ECHO = False SESSION_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SAMESITE = 'Lax' config = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'default': DevelopmentConfig, }