import os from dotenv import load_dotenv load_dotenv() class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-secret-key-change-in-production' SQLALCHEMY_DATABASE_URI = ( f"mysql+pymysql://{os.environ.get('DB_USER', 'root')}:" f"{os.environ.get('DB_PASSWORD', '')}@" f"{os.environ.get('DB_HOST', 'localhost')}:" f"{os.environ.get('DB_PORT', '3306')}/" f"{os.environ.get('DB_NAME', 'it_tickets')}" ) SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ENGINE_OPTIONS = { 'pool_recycle': 300, 'pool_pre_ping': True, } # Mail MAIL_SERVER = os.environ.get('MAIL_SERVER', 'localhost') MAIL_PORT = int(os.environ.get('MAIL_PORT', 587)) MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS', 'True').lower() == 'true' MAIL_USERNAME = os.environ.get('MAIL_USERNAME') MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER', 'IT Helpdesk ') # IT Department IT_DEPT_EMAIL = os.environ.get('IT_DEPT_EMAIL', 'it@yourdomain.com') APP_BASE_URL = os.environ.get('APP_BASE_URL', 'http://localhost:5000') # Uploads # UPLOAD_FOLDER must be an absolute path so that save (os.path.join) and # serve (send_from_directory) always resolve to the same directory regardless # of the process CWD. The default anchors to the project root via __file__. _project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) _raw_upload = os.environ.get('UPLOAD_FOLDER', '') UPLOAD_FOLDER = ( _raw_upload if (_raw_upload and os.path.isabs(_raw_upload)) else os.path.join(_project_root, 'app', 'static', 'uploads') ) MAX_CONTENT_LENGTH = int(os.environ.get('MAX_CONTENT_LENGTH', 16 * 1024 * 1024)) ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'pdf', 'doc', 'docx', 'txt', 'zip', 'log'} # Anthropic AI ANTHROPIC_API_KEY = os.environ.get('ANTHROPIC_API_KEY', '') # Admin ADMIN_EMAIL = os.environ.get('ADMIN_EMAIL', 'admin@yourdomain.com') ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', 'Admin@123!') class DevelopmentConfig(Config): DEBUG = True SQLALCHEMY_ECHO = False class ProductionConfig(Config): DEBUG = False config = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'default': ProductionConfig }