diff --git a/README.md b/README.md index 3a198d6..503ffaf 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,11 @@ PlexPlaylistSync 是一个用于同步 Plex 播放列表和本地 `.m3u`/`.m3u8` - **低功耗运行**: 适合 NAS 或服务器 24 小时运行,优化资源使用,减少能耗。 - **Docker 部署**: 可通过 Docker 轻松部署和运行。 +### Token 登录 + +首次登录时使用用户名和密码连接 Plex 服务器,成功后程序会将获得的 `token` 保存在配置文件中,后续通信仅使用该 `token`,不再保存明文密码。 +默认情况下 Plex 服务器使用 `32400` 端口,可在未修改服务器端口时直接使用该默认值。 + ## 安装 首先安装依赖: diff --git a/app/config.json b/app/config.json index 8047ddd..b8f325e 100644 --- a/app/config.json +++ b/app/config.json @@ -1,3 +1,6 @@ { - "theme": "light" + "theme": "auto", + "token": "", + "server_url": "", + "server_port": "32400" } \ No newline at end of file diff --git a/app/main.py b/app/main.py index 61f5edf..0b5dce7 100644 --- a/app/main.py +++ b/app/main.py @@ -4,6 +4,7 @@ from fastapi import FastAPI, Request, Form from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.templating import Jinja2Templates from fastapi.staticfiles import StaticFiles +from app.utils.plex_client import connect_plex app = FastAPI() templates = Jinja2Templates(directory=os.path.join(os.path.dirname(__file__), "templates")) @@ -31,16 +32,34 @@ async def login( user: str = Form(...), pw: str = Form(...), url: str = Form(...), - port: str = Form(...), - library: str = Form(...) + port: str = Form("32400") ): config = load_config() theme = config.get("theme", "auto") - # demo:假装连接成功 - if user == "admin": - return templates.TemplateResponse("login.html", {"request": request, "message": "连接成功", "success": True, "theme": theme, "path": "/login"}) - else: - return templates.TemplateResponse("login.html", {"request": request, "message": "连接失败:用户名错误", "success": False, "theme": theme, "path": "/login"}) + try: + connect_plex(config, user, pw, url, port) + save_config(config) + return templates.TemplateResponse( + "login.html", + { + "request": request, + "message": "连接成功", + "success": True, + "theme": theme, + "path": "/login", + }, + ) + except Exception as e: + return templates.TemplateResponse( + "login.html", + { + "request": request, + "message": f"连接失败:{str(e)}", + "success": False, + "theme": theme, + "path": "/login", + }, + ) @app.get("/playlist", response_class=HTMLResponse) async def get_playlist(request: Request): diff --git a/app/templates/login.html b/app/templates/login.html index 171d23a..7c80bd9 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -19,14 +19,7 @@