import os from dotenv import load_dotenv load_dotenv() class Config: SECRET_KEY = os.environ.get('SECRET_KEY', 'change-this-portal-secret') SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL', 'sqlite:///portal.db') SQLALCHEMY_TRACK_MODIFICATIONS = False # JWT settings for platform-wide SSO token PORTAL_JWT_SECRET = os.environ.get('PORTAL_JWT_SECRET', 'change-this-jwt-secret') JWT_EXPIRY_HOURS = int(os.environ.get('JWT_EXPIRY_HOURS', 8)) PORTAL_COOKIE_NAME = 'edp_portal_token' # Initial admin seeded on first run ADMIN_USERNAME = os.environ.get('ADMIN_USERNAME', 'admin') ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', 'admin123') ADMIN_EMAIL = os.environ.get('ADMIN_EMAIL', 'admin@localhost') # App registry โ€” display metadata for the three sub-apps REGISTERED_APPS = [ { 'id': 'digiserver', 'name': 'DigiServer', 'description': 'Digital signage player & content management platform.', 'icon': '๐Ÿ–ฅ๏ธ', 'url': '/digiserver/', 'color': '#22c55e', # Internal URL for portalโ†’app user sync (not through nginx) 'internal_url': os.environ.get('DIGISERVER_INTERNAL_URL', 'http://localhost:5002'), }, { 'id': 'networkview', 'name': 'NetworkView', 'description': 'Infrastructure topology โ€” sites, rooms, racks & cabling.', 'icon': '๐ŸŒ', 'url': '/networkview/', 'color': '#3b82f6', }, { 'id': 'itassets', 'name': 'IT Asset Management', 'description': 'Track hardware assets, assignments and compliance.', 'icon': '๐Ÿ’ผ', 'url': '/itassets/', 'color': '#f59e0b', }, { 'id': 'srvmonitor', 'name': 'Server Monitor', 'description': 'Real-time monitoring for Raspberry Pi clients โ€” logs, devices & Ansible automation.', 'icon': '๐Ÿ“ก', 'url': '/srvmonitor/', 'color': '#a855f7', }, ] # Internal service-to-service sync secret โ€” must match INTERNAL_SYNC_SECRET in sub-apps INTERNAL_SYNC_SECRET = os.environ.get('INTERNAL_SYNC_SECRET', 'change-this-internal-secret') class DevelopmentConfig(Config): DEBUG = True SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL', 'sqlite:///portal_dev.db') class ProductionConfig(Config): DEBUG = False config = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'default': ProductionConfig, }