mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-08 08:57:09 +08:00
feat(security): add token validation and support multi-server
This commit is contained in:
@@ -6,38 +6,38 @@ from sqlalchemy.orm import Session
|
|||||||
from app import schemas
|
from app import schemas
|
||||||
from app.chain.download import DownloadChain
|
from app.chain.download import DownloadChain
|
||||||
from app.chain.mediaserver import MediaServerChain
|
from app.chain.mediaserver import MediaServerChain
|
||||||
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
|
from app.core.security import verify_token
|
||||||
from app.db import get_db
|
from app.db import get_db
|
||||||
from app.db.mediaserver_oper import MediaServerOper
|
from app.db.mediaserver_oper import MediaServerOper
|
||||||
from app.db.models import MediaServerItem
|
from app.db.models import MediaServerItem
|
||||||
|
from app.helper.mediaserver import MediaServerHelper
|
||||||
from app.schemas import MediaType, NotExistMediaInfo
|
from app.schemas import MediaType, NotExistMediaInfo
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("/play/{itemid}", summary="在线播放")
|
@router.get("/play/{itemid:path}", summary="在线播放")
|
||||||
def play_item(itemid: str) -> schemas.Response:
|
def play_item(itemid: str, _: schemas.TokenPayload = Depends(verify_token)) -> schemas.Response:
|
||||||
"""
|
"""
|
||||||
获取媒体服务器播放页面地址
|
获取媒体服务器播放页面地址
|
||||||
"""
|
"""
|
||||||
if not itemid:
|
if not itemid:
|
||||||
return schemas.Response(success=False, msg="参数错误")
|
return schemas.Response(success=False, message="参数错误")
|
||||||
if not settings.MEDIASERVER:
|
configs = MediaServerHelper().get_configs()
|
||||||
return schemas.Response(success=False, msg="未配置媒体服务器")
|
if not configs:
|
||||||
# 查找一个不为空的值
|
return schemas.Response(success=False, message="未配置媒体服务器")
|
||||||
mediaserver = next((server for server in settings.MEDIASERVER.split(",") if server), None)
|
media_chain = MediaServerChain()
|
||||||
if not mediaserver:
|
for name in configs.keys():
|
||||||
return schemas.Response(success=False, msg="未配置媒体服务器")
|
item = media_chain.iteminfo(server=name, item_id=itemid)
|
||||||
play_url = MediaServerChain().get_play_url(server=mediaserver, item_id=itemid)
|
if item:
|
||||||
# 重定向到play_url
|
play_url = media_chain.get_play_url(server=name, item_id=itemid)
|
||||||
if not play_url:
|
if play_url:
|
||||||
return schemas.Response(success=False, msg="未找到播放地址")
|
|
||||||
return schemas.Response(success=True, data={
|
return schemas.Response(success=True, data={
|
||||||
"url": play_url
|
"url": play_url
|
||||||
})
|
})
|
||||||
|
return schemas.Response(success=False, message="未找到播放地址")
|
||||||
|
|
||||||
|
|
||||||
@router.get("/exists", summary="查询本地是否存在(数据库)", response_model=schemas.Response)
|
@router.get("/exists", summary="查询本地是否存在(数据库)", response_model=schemas.Response)
|
||||||
|
|||||||
Reference in New Issue
Block a user