From 07bd5f19264ac6476ed2dd168d437ed51ebc6994 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 11 Nov 2023 12:16:45 +0800 Subject: [PATCH] fix seerr api --- app/api/servarr.py | 32 ++++++++++++++++---------------- app/core/security.py | 24 +++++++++++++++++++----- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/app/api/servarr.py b/app/api/servarr.py index 302b94f8..73768c60 100644 --- a/app/api/servarr.py +++ b/app/api/servarr.py @@ -8,7 +8,7 @@ from app.chain.media import MediaChain from app.chain.subscribe import SubscribeChain from app.core.config import settings from app.core.metainfo import MetaInfo -from app.core.security import verify_uri_token +from app.core.security import verify_uri_apikey from app.db import get_db from app.db.models.subscribe import Subscribe from app.schemas import RadarrMovie, SonarrSeries @@ -19,7 +19,7 @@ arr_router = APIRouter(tags=['servarr']) @arr_router.get("/system/status", summary="系统状态") -def arr_system_status(_: str = Depends(verify_uri_token)) -> Any: +def arr_system_status(_: str = Depends(verify_uri_apikey)) -> Any: """ 模拟Radarr、Sonarr系统状态 """ @@ -73,7 +73,7 @@ def arr_system_status(_: str = Depends(verify_uri_token)) -> Any: @arr_router.get("/qualityProfile", summary="质量配置") -def arr_qualityProfile(_: str = Depends(verify_uri_token)) -> Any: +def arr_qualityProfile(_: str = Depends(verify_uri_apikey)) -> Any: """ 模拟Radarr、Sonarr质量配置 """ @@ -114,7 +114,7 @@ def arr_qualityProfile(_: str = Depends(verify_uri_token)) -> Any: @arr_router.get("/rootfolder", summary="根目录") -def arr_rootfolder(_: str = Depends(verify_uri_token)) -> Any: +def arr_rootfolder(_: str = Depends(verify_uri_apikey)) -> Any: """ 模拟Radarr、Sonarr根目录 """ @@ -130,7 +130,7 @@ def arr_rootfolder(_: str = Depends(verify_uri_token)) -> Any: @arr_router.get("/tag", summary="标签") -def arr_tag(_: str = Depends(verify_uri_token)) -> Any: +def arr_tag(_: str = Depends(verify_uri_apikey)) -> Any: """ 模拟Radarr、Sonarr标签 """ @@ -143,7 +143,7 @@ def arr_tag(_: str = Depends(verify_uri_token)) -> Any: @arr_router.get("/languageprofile", summary="语言") -def arr_languageprofile(_: str = Depends(verify_uri_token)) -> Any: +def arr_languageprofile(_: str = Depends(verify_uri_apikey)) -> Any: """ 模拟Radarr、Sonarr语言 """ @@ -169,7 +169,7 @@ def arr_languageprofile(_: str = Depends(verify_uri_token)) -> Any: @arr_router.get("/movie", summary="所有订阅电影", response_model=List[schemas.RadarrMovie]) -def arr_movies(_: str = Depends(verify_uri_token), db: Session = Depends(get_db)) -> Any: +def arr_movies(_: str = Depends(verify_uri_apikey), db: Session = Depends(get_db)) -> Any: """ 查询Rardar电影 """ @@ -260,7 +260,7 @@ def arr_movies(_: str = Depends(verify_uri_token), db: Session = Depends(get_db) @arr_router.get("/movie/lookup", summary="查询电影", response_model=List[schemas.RadarrMovie]) -def arr_movie_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(verify_uri_token)) -> Any: +def arr_movie_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: """ 查询Rardar电影 term: `tmdb:${id}` 存在和不存在均不能返回错误 @@ -306,7 +306,7 @@ def arr_movie_lookup(term: str, db: Session = Depends(get_db), _: str = Depends( @arr_router.get("/movie/{mid}", summary="电影订阅详情", response_model=schemas.RadarrMovie) -def arr_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_token)) -> Any: +def arr_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: """ 查询Rardar电影订阅 """ @@ -334,7 +334,7 @@ def arr_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_u @arr_router.post("/movie", summary="新增电影订阅") def arr_add_movie(movie: RadarrMovie, db: Session = Depends(get_db), - _: str = Depends(verify_uri_token) + _: str = Depends(verify_uri_apikey) ) -> Any: """ 新增Rardar电影订阅 @@ -363,7 +363,7 @@ def arr_add_movie(movie: RadarrMovie, @arr_router.delete("/movie/{mid}", summary="删除电影订阅", response_model=schemas.Response) -def arr_remove_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_token)) -> Any: +def arr_remove_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: """ 删除Rardar电影订阅 """ @@ -379,7 +379,7 @@ def arr_remove_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(v @arr_router.get("/series", summary="所有剧集", response_model=List[schemas.SonarrSeries]) -def arr_series(_: str = Depends(verify_uri_token), db: Session = Depends(get_db)) -> Any: +def arr_series(_: str = Depends(verify_uri_apikey), db: Session = Depends(get_db)) -> Any: """ 查询Sonarr剧集 """ @@ -515,7 +515,7 @@ def arr_series(_: str = Depends(verify_uri_token), db: Session = Depends(get_db) @arr_router.get("/series/lookup", summary="查询剧集") -def arr_series_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(verify_uri_token)) -> Any: +def arr_series_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: """ 查询Sonarr剧集 term: `tvdb:${id}` title """ @@ -604,7 +604,7 @@ def arr_series_lookup(term: str, db: Session = Depends(get_db), _: str = Depends @arr_router.get("/series/{tid}", summary="剧集详情") -def arr_serie(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_token)) -> Any: +def arr_serie(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: """ 查询Sonarr剧集 """ @@ -640,7 +640,7 @@ def arr_serie(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_u @arr_router.post("/series", summary="新增剧集订阅") def arr_add_series(tv: schemas.SonarrSeries, db: Session = Depends(get_db), - _: str = Depends(verify_uri_token)) -> Any: + _: str = Depends(verify_uri_apikey)) -> Any: """ 新增Sonarr剧集订阅 """ @@ -682,7 +682,7 @@ def arr_add_series(tv: schemas.SonarrSeries, @arr_router.delete("/series/{tid}", summary="删除剧集订阅") -def arr_remove_series(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_token)) -> Any: +def arr_remove_series(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: """ 删除Sonarr剧集订阅 """ diff --git a/app/core/security.py b/app/core/security.py index 72dcf712..95f1d460 100644 --- a/app/core/security.py +++ b/app/core/security.py @@ -56,14 +56,16 @@ def get_token(token: str = None) -> str: """ 从请求URL中获取token """ - if token is None: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="token请求参数缺失" - ) return token +def get_apikey(apikey: str = None) -> str: + """ + 从请求URL中获取apikey + """ + return apikey + + def verify_uri_token(token: str = Depends(get_token)) -> str: """ 通过依赖项使用token进行身份认证 @@ -76,6 +78,18 @@ def verify_uri_token(token: str = Depends(get_token)) -> str: return token +def verify_uri_apikey(apikey: str = Depends(get_apikey)) -> str: + """ + 通过依赖项使用apikey进行身份认证 + """ + if apikey != settings.API_KEY: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="apikey校验不通过" + ) + return apikey + + def verify_password(plain_password: str, hashed_password: str) -> bool: return pwd_context.verify(plain_password, hashed_password)