# config.py # 此檔案負責系統配置、環境變數載入和全域常數定義 # 包含 SMTP 設定、Resend 設定、系統權重、動作映射等 import os from dotenv import load_dotenv # 載入環境變數 load_dotenv() # 測試用固定郵箱 FIXED_TEST_EMAIL = os.getenv("FIXED_TEST_EMAIL", "[EMAIL_ADDRESS]").strip() # SMTP 設定 SMTP_CONFIG = { "host": os.getenv("SMTP_HOST", "").strip(), "port": int(os.getenv("SMTP_PORT", "587").strip() or "587"), "username": os.getenv("SMTP_USERNAME", "").strip(), "password": os.getenv("SMTP_PASSWORD", "").strip(), "from": os.getenv("SMTP_FROM", "").strip() or os.getenv("SMTP_USERNAME", "").strip(), "base_url": os.getenv("APP_BASE_URL", "").strip() or "http://localhost:7860" } # Resend 設定 RESEND_API_KEY = os.getenv("RESEND_API_KEY", "").strip() # 郵件發送方式: "resend"(優先,適合 HF 部署)或 "smtp"(備援) # 若 RESEND_API_KEY 有設定則自動使用 resend,否則 fallback 到 smtp EMAIL_PROVIDER = "resend" if os.getenv("RESEND_API_KEY", "").strip() else "smtp" # 系統權重設定 SYSTEM_WEIGHTS = { "ow": 75.0, "tw": 80.0, "iw": 65.0, "dw": 45.0, "gw": 50.0, "fw": 60.0 } # 動作映射:將中文系統名稱映射到代碼 ACTION_MAP = { "教務系統: 期末網路教學評量": "click_eval_system", "教務系統: 期末網路預選系統": "click_pre_select_system", "教務系統: 開學後加退選系統": "click_add_drop_system", "教務系統: 北科i學園PLUS": "click_istudy", "教務系統: 學生證掛失及補發系統": "click_card_loss", "教務系統: 課程系統": "click_course_system", "教務系統: 學業成績查詢系統": "click_score_query", "學務系統: 學生請假系統": "click_leave_system", "學務系統: 學生宿舍登錄(抽籤)系統": "click_dorm_system", "學務系統: 獎助學金申請系統": "click_scholarship", "資訊服務: 網路郵局 WebMail": "click_webmail", "資訊服務: 北科軟體雲": "click_vdesk", "惡意測試: 嘗試偷改成績 (SQL Injection)": "malicious_sql_injection" } # 用戶資料庫 USER_DB = { "student": ["1234", "學生", "Alex Wang"], "student2": ["1234", "學生", "Bella Lin"], "admin": ["1234", "管理", "Charles Chen"], "admin2": ["1234", "管理", "David Lee"] } # 伺服器設定 SERVER_CONFIG = { "host": "0.0.0.0", "port": int(os.getenv("PORT", 7860)) } # 字型檔案名稱 FONT_PATH = 'SimHei.ttf' # 模型檔案名稱 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) MODEL_FILES = { "label_encoder": os.path.join(BASE_DIR, "le_action.pkl"), "baseline_logs": os.path.join(BASE_DIR, "baseline_logs.csv") } # Hugging Face 設定 DATASET_REPO_ID = os.getenv("DATASET_REPO_ID", "My-Project-Team/Digital-Bodyguard-Dataset") # 環境變數檢查 ENABLE_HDBSCAN = os.getenv("ENABLE_HDBSCAN", "1").strip() == "1"