diff --git a/src/api/admin.py b/src/api/admin.py index aec6364..563b112 100644 --- a/src/api/admin.py +++ b/src/api/admin.py @@ -509,6 +509,13 @@ async def update_api_key( ): """Update API key""" try: + # Get current admin config from database + admin_config = await db.get_admin_config() + + # Update api_key in database + admin_config.api_key = request.new_api_key + await db.update_admin_config(admin_config) + # Update in-memory config config.api_key = request.new_api_key diff --git a/src/core/database.py b/src/core/database.py index 0e114a9..260143f 100644 --- a/src/core/database.py +++ b/src/core/database.py @@ -53,20 +53,22 @@ class Database: # Get admin credentials from config_dict if provided, otherwise use defaults admin_username = "admin" admin_password = "admin" + api_key = "han1234" error_ban_threshold = 3 if config_dict: global_config = config_dict.get("global", {}) admin_username = global_config.get("admin_username", "admin") admin_password = global_config.get("admin_password", "admin") + api_key = global_config.get("api_key", "han1234") admin_config = config_dict.get("admin", {}) error_ban_threshold = admin_config.get("error_ban_threshold", 3) await db.execute(""" - INSERT INTO admin_config (id, admin_username, admin_password, error_ban_threshold) - VALUES (1, ?, ?, ?) - """, (admin_username, admin_password, error_ban_threshold)) + INSERT INTO admin_config (id, admin_username, admin_password, api_key, error_ban_threshold) + VALUES (1, ?, ?, ?, ?) + """, (admin_username, admin_password, api_key, error_ban_threshold)) # Ensure proxy_config has a row cursor = await db.execute("SELECT COUNT(*) FROM proxy_config") @@ -224,6 +226,7 @@ class Database: columns_to_add = [ ("admin_username", "TEXT DEFAULT 'admin'"), ("admin_password", "TEXT DEFAULT 'admin'"), + ("api_key", "TEXT DEFAULT 'han1234'"), ] for col_name, col_type in columns_to_add: @@ -351,6 +354,7 @@ class Database: id INTEGER PRIMARY KEY DEFAULT 1, admin_username TEXT DEFAULT 'admin', admin_password TEXT DEFAULT 'admin', + api_key TEXT DEFAULT 'han1234', error_ban_threshold INTEGER DEFAULT 3, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) @@ -451,14 +455,15 @@ class Database: global_config = config_dict.get("global", {}) admin_username = global_config.get("admin_username", "admin") admin_password = global_config.get("admin_password", "admin") + api_key = global_config.get("api_key", "han1234") if not is_first_startup: # On upgrade, update the configuration await db.execute(""" UPDATE admin_config - SET admin_username = ?, admin_password = ?, error_ban_threshold = ?, updated_at = CURRENT_TIMESTAMP + SET admin_username = ?, admin_password = ?, api_key = ?, error_ban_threshold = ?, updated_at = CURRENT_TIMESTAMP WHERE id = 1 - """, (admin_username, admin_password, error_ban_threshold)) + """, (admin_username, admin_password, api_key, error_ban_threshold)) # Initialize proxy config proxy_config = config_dict.get("proxy", {}) @@ -965,16 +970,16 @@ class Database: return AdminConfig(**dict(row)) # If no row exists, return a default config with placeholder values # This should not happen in normal operation as _ensure_config_rows should create it - return AdminConfig(admin_username="admin", admin_password="admin") + return AdminConfig(admin_username="admin", admin_password="admin", api_key="han1234") async def update_admin_config(self, config: AdminConfig): """Update admin configuration""" async with aiosqlite.connect(self.db_path) as db: await db.execute(""" UPDATE admin_config - SET admin_username = ?, admin_password = ?, error_ban_threshold = ?, updated_at = CURRENT_TIMESTAMP + SET admin_username = ?, admin_password = ?, api_key = ?, error_ban_threshold = ?, updated_at = CURRENT_TIMESTAMP WHERE id = 1 - """, (config.admin_username, config.admin_password, config.error_ban_threshold)) + """, (config.admin_username, config.admin_password, config.api_key, config.error_ban_threshold)) await db.commit() # Proxy config operations diff --git a/src/core/models.py b/src/core/models.py index 17a73da..678e180 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -82,6 +82,7 @@ class AdminConfig(BaseModel): id: int = 1 admin_username: str # Read from database, initialized from setting.toml on first startup admin_password: str # Read from database, initialized from setting.toml on first startup + api_key: str # Read from database, initialized from setting.toml on first startup error_ban_threshold: int = 3 updated_at: Optional[datetime] = None diff --git a/src/main.py b/src/main.py index d971949..222d6aa 100644 --- a/src/main.py +++ b/src/main.py @@ -109,10 +109,11 @@ async def startup_event(): await db.check_and_migrate_db(config_dict) print("✓ Database migration check completed.") - # Load admin credentials from database + # Load admin credentials and API key from database admin_config = await db.get_admin_config() config.set_admin_username_from_db(admin_config.admin_username) config.set_admin_password_from_db(admin_config.admin_password) + config.api_key = admin_config.api_key # Load cache configuration from database cache_config = await db.get_cache_config()