This commit is contained in:
jxxghp 2024-06-18 13:05:11 +08:00
parent 2a333add9b
commit 484ecf10c3
9 changed files with 60 additions and 56 deletions

View File

@ -6,7 +6,7 @@ from sqlalchemy.orm import Session
from app import schemas from app import schemas
from app.chain.dashboard import DashboardChain from app.chain.dashboard import DashboardChain
from app.core.security import verify_token, verify_uri_token from app.core.security import verify_token, verify_apitoken
from app.db import get_db from app.db import get_db
from app.db.models.transferhistory import TransferHistory from app.db.models.transferhistory import TransferHistory
from app.helper.directory import DirectoryHelper from app.helper.directory import DirectoryHelper
@ -36,7 +36,7 @@ def statistic(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/statistic2", summary="媒体数量统计API_TOKEN", response_model=schemas.Statistic) @router.get("/statistic2", summary="媒体数量统计API_TOKEN", response_model=schemas.Statistic)
def statistic2(_: str = Depends(verify_uri_token)) -> Any: def statistic2(_: str = Depends(verify_apitoken)) -> Any:
""" """
查询媒体数量统计信息 API_TOKEN认证?token=xxx 查询媒体数量统计信息 API_TOKEN认证?token=xxx
""" """
@ -57,7 +57,7 @@ def storage(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/storage2", summary="存储空间API_TOKEN", response_model=schemas.Storage) @router.get("/storage2", summary="存储空间API_TOKEN", response_model=schemas.Storage)
def storage2(_: str = Depends(verify_uri_token)) -> Any: def storage2(_: str = Depends(verify_apitoken)) -> Any:
""" """
查询存储空间信息 API_TOKEN认证?token=xxx 查询存储空间信息 API_TOKEN认证?token=xxx
""" """
@ -94,7 +94,7 @@ def downloader(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/downloader2", summary="下载器信息API_TOKEN", response_model=schemas.DownloaderInfo) @router.get("/downloader2", summary="下载器信息API_TOKEN", response_model=schemas.DownloaderInfo)
def downloader2(_: str = Depends(verify_uri_token)) -> Any: def downloader2(_: str = Depends(verify_apitoken)) -> Any:
""" """
查询下载器信息 API_TOKEN认证?token=xxx 查询下载器信息 API_TOKEN认证?token=xxx
""" """
@ -110,7 +110,7 @@ def schedule(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/schedule2", summary="后台服务API_TOKEN", response_model=List[schemas.ScheduleInfo]) @router.get("/schedule2", summary="后台服务API_TOKEN", response_model=List[schemas.ScheduleInfo])
def schedule2(_: str = Depends(verify_uri_token)) -> Any: def schedule2(_: str = Depends(verify_apitoken)) -> Any:
""" """
查询下载器信息 API_TOKEN认证?token=xxx 查询下载器信息 API_TOKEN认证?token=xxx
""" """
@ -136,7 +136,7 @@ def cpu(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/cpu2", summary="获取当前CPU使用率API_TOKEN", response_model=int) @router.get("/cpu2", summary="获取当前CPU使用率API_TOKEN", response_model=int)
def cpu2(_: str = Depends(verify_uri_token)) -> Any: def cpu2(_: str = Depends(verify_apitoken)) -> Any:
""" """
获取当前CPU使用率 API_TOKEN认证?token=xxx 获取当前CPU使用率 API_TOKEN认证?token=xxx
""" """
@ -152,7 +152,7 @@ def memory(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/memory2", summary="获取当前内存使用量和使用率API_TOKEN", response_model=List[int]) @router.get("/memory2", summary="获取当前内存使用量和使用率API_TOKEN", response_model=List[int])
def memory2(_: str = Depends(verify_uri_token)) -> Any: def memory2(_: str = Depends(verify_apitoken)) -> Any:
""" """
获取当前内存使用率 API_TOKEN认证?token=xxx 获取当前内存使用率 API_TOKEN认证?token=xxx
""" """

View File

@ -7,7 +7,7 @@ from starlette.responses import FileResponse, Response
from app import schemas from app import schemas
from app.core.config import settings from app.core.config import settings
from app.core.security import verify_token, verify_uri_session from app.core.security import verify_token, verify_uri_token
from app.helper.aliyun import AliyunHelper from app.helper.aliyun import AliyunHelper
from app.log import logger from app.log import logger
from app.utils.http import RequestUtils from app.utils.http import RequestUtils
@ -174,7 +174,7 @@ def delete(path: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any:
@router.get("/local/download", summary="下载文件(本地)") @router.get("/local/download", summary="下载文件(本地)")
def download(path: str, _: schemas.TokenPayload = Depends(verify_uri_session)) -> Any: def download(path: str, _: schemas.TokenPayload = Depends(verify_uri_token)) -> Any:
""" """
下载文件或目录 下载文件或目录
""" """
@ -210,7 +210,7 @@ def rename(path: str, new_name: str, _: schemas.TokenPayload = Depends(verify_to
@router.get("/local/image", summary="读取图片(本地)") @router.get("/local/image", summary="读取图片(本地)")
def image(path: str, _: schemas.TokenPayload = Depends(verify_uri_session)) -> Any: def image(path: str, _: schemas.TokenPayload = Depends(verify_uri_token)) -> Any:
""" """
读取图片 读取图片
""" """
@ -259,7 +259,8 @@ def list_path(path: str,
name=fileinfo.get("name"), name=fileinfo.get("name"),
size=fileinfo.get("size"), size=fileinfo.get("size"),
extension=fileinfo.get("file_extension"), extension=fileinfo.get("file_extension"),
modify_time=StringUtils.str_to_timestamp(fileinfo.get("updated_at")) modify_time=StringUtils.str_to_timestamp(fileinfo.get("updated_at")),
thumbnail=fileinfo.get("thumbnail")
)] )]
return [] return []
items = AliyunHelper().list_files(parent_file_id=fileid, order_by=sort) items = AliyunHelper().list_files(parent_file_id=fileid, order_by=sort)
@ -273,7 +274,8 @@ def list_path(path: str,
name=item.get("name"), name=item.get("name"),
size=item.get("size"), size=item.get("size"),
extension=item.get("file_extension"), extension=item.get("file_extension"),
modify_time=StringUtils.str_to_timestamp(item.get("updated_at")) modify_time=StringUtils.str_to_timestamp(item.get("updated_at")),
thumbnail=item.get("thumbnail")
) for item in items] ) for item in items]
@ -308,7 +310,7 @@ def delete(fileid: str,
@router.get("/aliyun/download", summary="下载文件(阿里云盘)") @router.get("/aliyun/download", summary="下载文件(阿里云盘)")
def download(fileid: str, def download(fileid: str,
_: schemas.TokenPayload = Depends(verify_uri_session)) -> Any: _: schemas.TokenPayload = Depends(verify_uri_token)) -> Any:
""" """
下载文件或目录 下载文件或目录
""" """
@ -335,7 +337,7 @@ def rename(fileid: str, new_name: str, _: schemas.TokenPayload = Depends(verify_
@router.get("/aliyun/image", summary="读取图片(阿里云盘)", response_model=schemas.Response) @router.get("/aliyun/image", summary="读取图片(阿里云盘)", response_model=schemas.Response)
def image(fileid: str, _: schemas.TokenPayload = Depends(verify_uri_session)) -> Any: def image(fileid: str, _: schemas.TokenPayload = Depends(verify_uri_token)) -> Any:
""" """
读取图片 读取图片
""" """

View File

@ -8,7 +8,7 @@ from app.chain.media import MediaChain
from app.core.config import settings from app.core.config import settings
from app.core.context import Context from app.core.context import Context
from app.core.metainfo import MetaInfo, MetaInfoPath from app.core.metainfo import MetaInfo, MetaInfoPath
from app.core.security import verify_token, verify_uri_token from app.core.security import verify_token, verify_apitoken
from app.schemas import MediaType from app.schemas import MediaType
router = APIRouter() router = APIRouter()
@ -32,7 +32,7 @@ def recognize(title: str,
@router.get("/recognize2", summary="识别种子媒体信息API_TOKEN", response_model=schemas.Context) @router.get("/recognize2", summary="识别种子媒体信息API_TOKEN", response_model=schemas.Context)
def recognize2(title: str, def recognize2(title: str,
subtitle: str = None, subtitle: str = None,
_: str = Depends(verify_uri_token)) -> Any: _: str = Depends(verify_apitoken)) -> Any:
""" """
根据标题副标题识别媒体信息 API_TOKEN认证?token=xxx 根据标题副标题识别媒体信息 API_TOKEN认证?token=xxx
""" """
@ -55,7 +55,7 @@ def recognize_file(path: str,
@router.get("/recognize_file2", summary="识别文件媒体信息API_TOKEN", response_model=schemas.Context) @router.get("/recognize_file2", summary="识别文件媒体信息API_TOKEN", response_model=schemas.Context)
def recognize_file2(path: str, def recognize_file2(path: str,
_: str = Depends(verify_uri_token)) -> Any: _: str = Depends(verify_apitoken)) -> Any:
""" """
根据文件路径识别媒体信息 API_TOKEN认证?token=xxx 根据文件路径识别媒体信息 API_TOKEN认证?token=xxx
""" """

View File

@ -10,7 +10,7 @@ from app.chain.subscribe import SubscribeChain
from app.core.config import settings from app.core.config import settings
from app.core.context import MediaInfo from app.core.context import MediaInfo
from app.core.metainfo import MetaInfo from app.core.metainfo import MetaInfo
from app.core.security import verify_token, verify_uri_token from app.core.security import verify_token, verify_apitoken
from app.db import get_db from app.db import get_db
from app.db.models.subscribe import Subscribe from app.db.models.subscribe import Subscribe
from app.db.models.subscribehistory import SubscribeHistory from app.db.models.subscribehistory import SubscribeHistory
@ -52,7 +52,7 @@ def read_subscribes(
@router.get("/list", summary="查询所有订阅API_TOKEN", response_model=List[schemas.Subscribe]) @router.get("/list", summary="查询所有订阅API_TOKEN", response_model=List[schemas.Subscribe])
def list_subscribes(_: str = Depends(verify_uri_token)) -> Any: def list_subscribes(_: str = Depends(verify_apitoken)) -> Any:
""" """
查询所有订阅 API_TOKEN认证?token=xxx 查询所有订阅 API_TOKEN认证?token=xxx
""" """

View File

@ -6,7 +6,7 @@ from sqlalchemy.orm import Session
from app import schemas from app import schemas
from app.chain.transfer import TransferChain from app.chain.transfer import TransferChain
from app.core.security import verify_token, verify_uri_token from app.core.security import verify_token, verify_apitoken
from app.db import get_db from app.db import get_db
from app.db.models.transferhistory import TransferHistory from app.db.models.transferhistory import TransferHistory
from app.schemas import MediaType from app.schemas import MediaType
@ -110,7 +110,7 @@ def manual_transfer(path: str = None,
@router.get("/now", summary="立即执行下载器文件整理", response_model=schemas.Response) @router.get("/now", summary="立即执行下载器文件整理", response_model=schemas.Response)
def now(_: str = Depends(verify_uri_token)) -> Any: def now(_: str = Depends(verify_apitoken)) -> Any:
""" """
立即执行下载器文件整理 API_TOKEN认证?token=xxx 立即执行下载器文件整理 API_TOKEN认证?token=xxx
""" """

View File

@ -4,7 +4,7 @@ from fastapi import APIRouter, BackgroundTasks, Request, Depends
from app import schemas from app import schemas
from app.chain.webhook import WebhookChain from app.chain.webhook import WebhookChain
from app.core.security import verify_uri_token from app.core.security import verify_apitoken
router = APIRouter() router = APIRouter()
@ -19,7 +19,7 @@ def start_webhook_chain(body: Any, form: Any, args: Any):
@router.post("/", summary="Webhook消息响应", response_model=schemas.Response) @router.post("/", summary="Webhook消息响应", response_model=schemas.Response)
async def webhook_message(background_tasks: BackgroundTasks, async def webhook_message(background_tasks: BackgroundTasks,
request: Request, request: Request,
_: str = Depends(verify_uri_token) _: str = Depends(verify_apitoken)
) -> Any: ) -> Any:
""" """
Webhook响应 Webhook响应
@ -33,7 +33,7 @@ async def webhook_message(background_tasks: BackgroundTasks,
@router.get("/", summary="Webhook消息响应", response_model=schemas.Response) @router.get("/", summary="Webhook消息响应", response_model=schemas.Response)
def webhook_message(background_tasks: BackgroundTasks, def webhook_message(background_tasks: BackgroundTasks,
request: Request, _: str = Depends(verify_uri_token)) -> Any: request: Request, _: str = Depends(verify_apitoken)) -> Any:
""" """
Webhook响应 Webhook响应
""" """

View File

@ -7,7 +7,7 @@ from app import schemas
from app.chain.media import MediaChain from app.chain.media import MediaChain
from app.chain.subscribe import SubscribeChain from app.chain.subscribe import SubscribeChain
from app.core.metainfo import MetaInfo from app.core.metainfo import MetaInfo
from app.core.security import verify_uri_apikey from app.core.security import verify_apikey
from app.db import get_db from app.db import get_db
from app.db.models.subscribe import Subscribe from app.db.models.subscribe import Subscribe
from app.schemas import RadarrMovie, SonarrSeries from app.schemas import RadarrMovie, SonarrSeries
@ -18,7 +18,7 @@ arr_router = APIRouter(tags=['servarr'])
@arr_router.get("/system/status", summary="系统状态") @arr_router.get("/system/status", summary="系统状态")
def arr_system_status(_: str = Depends(verify_uri_apikey)) -> Any: def arr_system_status(_: str = Depends(verify_apikey)) -> Any:
""" """
模拟RadarrSonarr系统状态 模拟RadarrSonarr系统状态
""" """
@ -72,7 +72,7 @@ def arr_system_status(_: str = Depends(verify_uri_apikey)) -> Any:
@arr_router.get("/qualityProfile", summary="质量配置") @arr_router.get("/qualityProfile", summary="质量配置")
def arr_qualityProfile(_: str = Depends(verify_uri_apikey)) -> Any: def arr_qualityProfile(_: str = Depends(verify_apikey)) -> Any:
""" """
模拟RadarrSonarr质量配置 模拟RadarrSonarr质量配置
""" """
@ -113,7 +113,7 @@ def arr_qualityProfile(_: str = Depends(verify_uri_apikey)) -> Any:
@arr_router.get("/rootfolder", summary="根目录") @arr_router.get("/rootfolder", summary="根目录")
def arr_rootfolder(_: str = Depends(verify_uri_apikey)) -> Any: def arr_rootfolder(_: str = Depends(verify_apikey)) -> Any:
""" """
模拟RadarrSonarr根目录 模拟RadarrSonarr根目录
""" """
@ -129,7 +129,7 @@ def arr_rootfolder(_: str = Depends(verify_uri_apikey)) -> Any:
@arr_router.get("/tag", summary="标签") @arr_router.get("/tag", summary="标签")
def arr_tag(_: str = Depends(verify_uri_apikey)) -> Any: def arr_tag(_: str = Depends(verify_apikey)) -> Any:
""" """
模拟RadarrSonarr标签 模拟RadarrSonarr标签
""" """
@ -142,7 +142,7 @@ def arr_tag(_: str = Depends(verify_uri_apikey)) -> Any:
@arr_router.get("/languageprofile", summary="语言") @arr_router.get("/languageprofile", summary="语言")
def arr_languageprofile(_: str = Depends(verify_uri_apikey)) -> Any: def arr_languageprofile(_: str = Depends(verify_apikey)) -> Any:
""" """
模拟RadarrSonarr语言 模拟RadarrSonarr语言
""" """
@ -168,7 +168,7 @@ def arr_languageprofile(_: str = Depends(verify_uri_apikey)) -> Any:
@arr_router.get("/movie", summary="所有订阅电影", response_model=List[schemas.RadarrMovie]) @arr_router.get("/movie", summary="所有订阅电影", response_model=List[schemas.RadarrMovie])
def arr_movies(_: str = Depends(verify_uri_apikey), db: Session = Depends(get_db)) -> Any: def arr_movies(_: str = Depends(verify_apikey), db: Session = Depends(get_db)) -> Any:
""" """
查询Rardar电影 查询Rardar电影
""" """
@ -259,7 +259,7 @@ def arr_movies(_: str = Depends(verify_uri_apikey), db: Session = Depends(get_db
@arr_router.get("/movie/lookup", summary="查询电影", response_model=List[schemas.RadarrMovie]) @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_apikey)) -> Any: def arr_movie_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(verify_apikey)) -> Any:
""" """
查询Rardar电影 term: `tmdb:${id}` 查询Rardar电影 term: `tmdb:${id}`
存在和不存在均不能返回错误 存在和不存在均不能返回错误
@ -305,7 +305,7 @@ def arr_movie_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(
@arr_router.get("/movie/{mid}", summary="电影订阅详情", response_model=schemas.RadarrMovie) @arr_router.get("/movie/{mid}", summary="电影订阅详情", response_model=schemas.RadarrMovie)
def arr_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: def arr_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_apikey)) -> Any:
""" """
查询Rardar电影订阅 查询Rardar电影订阅
""" """
@ -333,7 +333,7 @@ def arr_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_u
@arr_router.post("/movie", summary="新增电影订阅") @arr_router.post("/movie", summary="新增电影订阅")
def arr_add_movie(movie: RadarrMovie, def arr_add_movie(movie: RadarrMovie,
db: Session = Depends(get_db), db: Session = Depends(get_db),
_: str = Depends(verify_uri_apikey) _: str = Depends(verify_apikey)
) -> Any: ) -> Any:
""" """
新增Rardar电影订阅 新增Rardar电影订阅
@ -362,7 +362,7 @@ def arr_add_movie(movie: RadarrMovie,
@arr_router.delete("/movie/{mid}", summary="删除电影订阅", response_model=schemas.Response) @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_apikey)) -> Any: def arr_remove_movie(mid: int, db: Session = Depends(get_db), _: str = Depends(verify_apikey)) -> Any:
""" """
删除Rardar电影订阅 删除Rardar电影订阅
""" """
@ -378,7 +378,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]) @arr_router.get("/series", summary="所有剧集", response_model=List[schemas.SonarrSeries])
def arr_series(_: str = Depends(verify_uri_apikey), db: Session = Depends(get_db)) -> Any: def arr_series(_: str = Depends(verify_apikey), db: Session = Depends(get_db)) -> Any:
""" """
查询Sonarr剧集 查询Sonarr剧集
""" """
@ -514,7 +514,7 @@ def arr_series(_: str = Depends(verify_uri_apikey), db: Session = Depends(get_db
@arr_router.get("/series/lookup", summary="查询剧集") @arr_router.get("/series/lookup", summary="查询剧集")
def arr_series_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: def arr_series_lookup(term: str, db: Session = Depends(get_db), _: str = Depends(verify_apikey)) -> Any:
""" """
查询Sonarr剧集 term: `tvdb:${id}` title 查询Sonarr剧集 term: `tvdb:${id}` title
""" """
@ -603,7 +603,7 @@ def arr_series_lookup(term: str, db: Session = Depends(get_db), _: str = Depends
@arr_router.get("/series/{tid}", summary="剧集详情") @arr_router.get("/series/{tid}", summary="剧集详情")
def arr_serie(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: def arr_serie(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_apikey)) -> Any:
""" """
查询Sonarr剧集 查询Sonarr剧集
""" """
@ -639,7 +639,7 @@ def arr_serie(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_u
@arr_router.post("/series", summary="新增剧集订阅") @arr_router.post("/series", summary="新增剧集订阅")
def arr_add_series(tv: schemas.SonarrSeries, def arr_add_series(tv: schemas.SonarrSeries,
db: Session = Depends(get_db), db: Session = Depends(get_db),
_: str = Depends(verify_uri_apikey)) -> Any: _: str = Depends(verify_apikey)) -> Any:
""" """
新增Sonarr剧集订阅 新增Sonarr剧集订阅
""" """
@ -681,7 +681,7 @@ def arr_add_series(tv: schemas.SonarrSeries,
@arr_router.delete("/series/{tid}", summary="删除剧集订阅") @arr_router.delete("/series/{tid}", summary="删除剧集订阅")
def arr_remove_series(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_uri_apikey)) -> Any: def arr_remove_series(tid: int, db: Session = Depends(get_db), _: str = Depends(verify_apikey)) -> Any:
""" """
删除Sonarr剧集订阅 删除Sonarr剧集订阅
""" """

View File

@ -61,21 +61,21 @@ def verify_token(token: str = Depends(reusable_oauth2)) -> schemas.TokenPayload:
) )
def get_token(token: str = None) -> str: def __get_token(token: str = None) -> str:
""" """
从请求URL中获取token 从请求URL中获取token
""" """
return token return token
def get_apikey(apikey: str = None, x_api_key: Annotated[str | None, Header()] = None) -> str: def __get_apikey(apikey: str = None, x_api_key: Annotated[str | None, Header()] = None) -> str:
""" """
从请求URL中获取apikey 从请求URL中获取apikey
""" """
return apikey or x_api_key return apikey or x_api_key
def verify_uri_token(token: str = Depends(get_token)) -> str: def verify_apitoken(token: str = Depends(__get_token)) -> str:
""" """
通过依赖项使用token进行身份认证 通过依赖项使用token进行身份认证
""" """
@ -87,19 +87,7 @@ def verify_uri_token(token: str = Depends(get_token)) -> str:
return token return token
def verify_uri_session(token: str = Depends(get_token)) -> str: def verify_apikey(apikey: str = Depends(__get_apikey)) -> str:
"""
通过依赖项使用token进行身份认证
"""
if not verify_token(token):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="token校验不通过"
)
return token
def verify_uri_apikey(apikey: str = Depends(get_apikey)) -> str:
""" """
通过依赖项使用apikey进行身份认证 通过依赖项使用apikey进行身份认证
""" """
@ -111,6 +99,18 @@ def verify_uri_apikey(apikey: str = Depends(get_apikey)) -> str:
return apikey return apikey
def verify_uri_token(token: str = Depends(__get_token)) -> str:
"""
通过依赖项使用token进行身份认证
"""
if not verify_token(token):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="token校验不通过"
)
return token
def verify_password(plain_password: str, hashed_password: str) -> bool: def verify_password(plain_password: str, hashed_password: str) -> bool:
return pwd_context.verify(plain_password, hashed_password) return pwd_context.verify(plain_password, hashed_password)

View File

@ -24,3 +24,5 @@ class FileItem(BaseModel):
fileid: Optional[str] = None fileid: Optional[str] = None
# 父ID # 父ID
parent_fileid: Optional[str] = None parent_fileid: Optional[str] = None
# 缩略图
thumbnail: Optional[str] = None