fix: api_key持久化

This commit is contained in:
TheSmallHanCat
2025-12-12 08:45:58 +08:00
parent 6b81188b6f
commit 5225170d71
4 changed files with 23 additions and 9 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()