From 23b9774c5dcdfba53c866f1f656392181a628a53 Mon Sep 17 00:00:00 2001 From: InfinityPacer <160988576+InfinityPacer@users.noreply.github.com> Date: Thu, 12 Sep 2024 00:17:26 +0800 Subject: [PATCH] feat(auth): add API_TOKEN validation and auto-generation --- app/core/config.py | 15 ++++++++++++++- config/app.env | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/core/config.py b/app/core/config.py index 8a6d29f8..95337157 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -5,8 +5,10 @@ from pathlib import Path from typing import Optional, List from urllib.parse import urlparse +from dotenv import set_key from pydantic import BaseSettings, validator +from app.log import logger from app.utils.system import SystemUtils @@ -61,7 +63,7 @@ class Settings(BaseSettings): # 超级管理员 SUPERUSER: str = "admin" # API密钥,需要更换 - API_TOKEN: str = "moviepilot" + API_TOKEN: Optional[str] = None # 网络代理 IP:PORT PROXY_HOST: Optional[str] = None # 登录页面电影海报,tmdb/bing @@ -198,6 +200,17 @@ class Settings(BaseSettings): except (ValueError, TypeError): raise ValueError(f"{value} 格式错误,不是有效数字!") + @validator("API_TOKEN", pre=True, always=True) + def validate_api_token(cls, v): + if not v: + new_token = secrets.token_urlsafe(16) + logger.info(f"API_TOKEN 未设置,已随机生成新的 API_TOKEN:{new_token}") + set_key(str(SystemUtils.get_env_path()), "API_TOKEN", new_token) + return new_token + elif len(v) < 16: + logger.warning("API_TOKEN 长度不足 16 个字符,存在安全隐患,建议尽快更换为更复杂的密钥!") + return v + @property def INNER_CONFIG_PATH(self): return self.ROOT_PATH / "config" diff --git a/config/app.env b/config/app.env index 6529b9c0..4c0b0d3f 100644 --- a/config/app.env +++ b/config/app.env @@ -29,8 +29,8 @@ DOH_RESOLVERS=1.0.0.1,1.1.1.1,9.9.9.9,149.112.112.112 META_CACHE_EXPIRE=0 # 自动检查和更新站点资源包(索引、认证等) AUTO_UPDATE_RESOURCE=true -# 【*】API密钥,建议更换复杂字符串,有Jellyseerr/Overseerr、媒体服务器Webhook等配置以及部分支持API_TOKEN的API中使用 -API_TOKEN=moviepilot +# 【*】API密钥,未设置时系统将随机生成,建议使用复杂字符串,用于Jellyseerr/Overseerr、媒体服务器Webhook等配置以及部分支持API_TOKEN的API请求 +API_TOKEN='' # 登录页面电影海报,tmdb/bing,tmdb要求能正常连接api.themoviedb.org WALLPAPER=tmdb # TMDB图片地址,无需修改需保留默认值,如果默认地址连通性不好可以尝试修改为:`static-mdb.v.geilijiasu.com`