diff --git a/app/api/apiv1.py b/app/api/apiv1.py index 5f229bc6..70646673 100644 --- a/app/api/apiv1.py +++ b/app/api/apiv1.py @@ -1,13 +1,13 @@ from fastapi import APIRouter -from app.api.endpoints import login, users, sites, messages, webhooks, subscribes, media, douban +from app.api.endpoints import login, user, site, message, webhook, subscribe, media, douban api_router = APIRouter() api_router.include_router(login.router, tags=["login"]) -api_router.include_router(users.router, prefix="/users", tags=["users"]) -api_router.include_router(sites.router, prefix="/sites", tags=["sites"]) -api_router.include_router(messages.router, prefix="/messages", tags=["messages"]) -api_router.include_router(webhooks.router, prefix="/webhooks", tags=["webhooks"]) -api_router.include_router(subscribes.router, prefix="/subscribes", tags=["subscribes"]) +api_router.include_router(user.router, prefix="/user", tags=["user"]) +api_router.include_router(site.router, prefix="/site", tags=["site"]) +api_router.include_router(message.router, prefix="/message", tags=["message"]) +api_router.include_router(webhook.router, prefix="/webhook", tags=["webhook"]) +api_router.include_router(subscribe.router, prefix="/subscribe", tags=["subscribe"]) api_router.include_router(media.router, prefix="/media", tags=["media"]) api_router.include_router(douban.router, prefix="/douban", tags=["douban"]) diff --git a/app/api/endpoints/messages.py b/app/api/endpoints/message.py similarity index 100% rename from app/api/endpoints/messages.py rename to app/api/endpoints/message.py diff --git a/app/api/endpoints/sites.py b/app/api/endpoints/site.py similarity index 100% rename from app/api/endpoints/sites.py rename to app/api/endpoints/site.py diff --git a/app/api/endpoints/subscribes.py b/app/api/endpoints/subscribe.py similarity index 100% rename from app/api/endpoints/subscribes.py rename to app/api/endpoints/subscribe.py diff --git a/app/api/endpoints/users.py b/app/api/endpoints/user.py similarity index 62% rename from app/api/endpoints/users.py rename to app/api/endpoints/user.py index 767180fa..5492773d 100644 --- a/app/api/endpoints/users.py +++ b/app/api/endpoints/user.py @@ -49,6 +49,50 @@ async def create_user( return user +@router.put("/", response_model=schemas.User) +async def update_user( + *, + db: Session = Depends(get_db), + user_in: schemas.UserCreate, + current_user: User = Depends(get_current_active_superuser), +) -> Any: + """ + 更新用户 + """ + user = current_user.get_by_email(db, email=user_in.email) + if not user: + raise HTTPException( + status_code=404, + detail="用户不存在", + ) + user_info = user_in.dict() + if user_info.get("password"): + user_info["hashed_password"] = get_password_hash(user_info["password"]) + user_info.pop("password") + user.update(db, **user_info) + return user + + +@router.delete("/", response_model=schemas.Response) +async def delete_user( + *, + db: Session = Depends(get_db), + user_in: schemas.UserCreate, + current_user: User = Depends(get_current_active_superuser), +) -> Any: + """ + 删除用户 + """ + user = current_user.get_by_email(db, email=user_in.email) + if not user: + raise HTTPException( + status_code=404, + detail="用户不存在", + ) + user.delete_by_email(db, user_in.email) + return {"success": True} + + @router.get("/{user_id}", response_model=schemas.User) async def read_user_by_id( user_id: int, diff --git a/app/api/endpoints/webhooks.py b/app/api/endpoints/webhook.py similarity index 100% rename from app/api/endpoints/webhooks.py rename to app/api/endpoints/webhook.py diff --git a/app/chain/site_message.py b/app/chain/site_message.py index fbcc1847..cb786ce3 100644 --- a/app/chain/site_message.py +++ b/app/chain/site_message.py @@ -120,7 +120,7 @@ class SiteMessageChain(ChainBase): url=site_info.url, username=username, password=password, - proxies=settings.PROXY if site_info.proxy else None + proxies=settings.PROXY_HOST if site_info.proxy else None ) if result: cookie, ua, msg = result diff --git a/app/core/config.py b/app/core/config.py index bbce7f30..1825d42a 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -29,7 +29,7 @@ class Settings(BaseSettings): SUPERUSER_PASSWORD: str = "password" # API密钥,需要更换 API_TOKEN: str = "moviepilot" - # 网络代理 + # 网络代理 IP:PORT PROXY_HOST: str = None # 媒体信息搜索来源 SEARCH_SOURCE: str = "themoviedb" @@ -183,11 +183,18 @@ class Settings(BaseSettings): def PROXY(self): if self.PROXY_HOST: return { - "http": self.PROXY_HOST, - "https": self.PROXY_HOST + "http": f"http://{self.PROXY_HOST}", + "https": f"https://{self.PROXY_HOST}" } return None + @property + def PROXY_SERVER(self): + if self.PROXY_HOST: + return { + "server": self.PROXY_HOST + } + def __init__(self): super().__init__() with self.CONFIG_PATH as p: diff --git a/app/db/models/user.py b/app/db/models/user.py index 8c9a9cfc..686e55c5 100644 --- a/app/db/models/user.py +++ b/app/db/models/user.py @@ -28,3 +28,7 @@ class User(Base): @staticmethod def get_by_email(db: Session, email: str): return db.query(User).filter(User.email == email).first() + + @staticmethod + def delete_by_email(db: Session, email: str): + return db.query(User).filter(User.email == email).delete() diff --git a/app/modules/indexer/spider.py b/app/modules/indexer/spider.py index 40b24b30..cc999054 100644 --- a/app/modules/indexer/spider.py +++ b/app/modules/indexer/spider.py @@ -31,8 +31,10 @@ class TorrentSpider: cookie: str = None # 站点UA ua: str = None - # 代理 + # Requests 代理 proxies: dict = None + # playwright 代理 + proxy_server: dict = None # 是否渲染 render: bool = False # Referer @@ -99,6 +101,7 @@ class TorrentSpider: self.ua = settings.USER_AGENT if indexer.get('proxy'): self.proxies = settings.PROXY + self.proxy_server = settings.PROXY_SERVER if indexer.get('cookie'): self.cookie = indexer.get('cookie') if referer: @@ -222,7 +225,7 @@ class TorrentSpider: url=searchurl, cookies=self.cookie, ua=self.ua, - proxies=self.proxies + proxies=self.proxy_server ) else: # requests请求 diff --git a/app/modules/slack/slack.py b/app/modules/slack/slack.py index 667bbe6c..f6d15bf2 100644 --- a/app/modules/slack/slack.py +++ b/app/modules/slack/slack.py @@ -22,7 +22,7 @@ class Slack: _client: WebClient = None _service: SocketModeHandler = None - _ds_url = f"http://127.0.0.1:{settings.PORT}/api/v1/messages?token={settings.API_TOKEN}" + _ds_url = f"http://127.0.0.1:{settings.PORT}/api/v1/message?token={settings.API_TOKEN}" def __init__(self): diff --git a/app/modules/telegram/telegram.py b/app/modules/telegram/telegram.py index 0033c1c7..fcd3eb1c 100644 --- a/app/modules/telegram/telegram.py +++ b/app/modules/telegram/telegram.py @@ -20,7 +20,7 @@ apihelper.proxy = settings.PROXY class Telegram(metaclass=Singleton): - _ds_url = f"http://127.0.0.1:{settings.PORT}/api/v1/messages?token={settings.API_TOKEN}" + _ds_url = f"http://127.0.0.1:{settings.PORT}/api/v1/message?token={settings.API_TOKEN}" _event = Event() _bot: telebot.TeleBot = None diff --git a/app/plugins/autosignin/__init__.py b/app/plugins/autosignin/__init__.py index 78de1a33..956e096e 100644 --- a/app/plugins/autosignin/__init__.py +++ b/app/plugins/autosignin/__init__.py @@ -139,6 +139,7 @@ class AutoSignIn(_PluginBase): ua = site_info.get("ua") render = site_info.get("render") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None if not site_url or not site_cookie: logger.warn(f"未配置 {site} 的站点地址或Cookie,无法签到") return "" @@ -154,7 +155,7 @@ class AutoSignIn(_PluginBase): page_source = PlaywrightHelper().get_page_source(url=checkin_url, cookies=site_cookie, ua=ua, - proxies=proxies) + proxies=proxy_server) if not SiteUtils.is_logged_in(page_source): if under_challenge(page_source): return f"【{site}】无法通过Cloudflare!" diff --git a/app/plugins/autosignin/sites/52pt.py b/app/plugins/autosignin/sites/52pt.py index 2df615fe..baa7dc4a 100644 --- a/app/plugins/autosignin/sites/52pt.py +++ b/app/plugins/autosignin/sites/52pt.py @@ -46,12 +46,13 @@ class Pt52(_ISiteSigninHandler): ua = site_info.get("ua") render = site_info.get("render") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None # 判断今日是否已签到 html_text = self.get_page_source(url='https://52pt.site/bakatest.php', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: diff --git a/app/plugins/autosignin/sites/btschool.py b/app/plugins/autosignin/sites/btschool.py index 63986463..bfa3d090 100644 --- a/app/plugins/autosignin/sites/btschool.py +++ b/app/plugins/autosignin/sites/btschool.py @@ -38,13 +38,15 @@ class BTSchool(_ISiteSigninHandler): ua = site_info.get("ua") render = site_info.get("render") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None logger.info(f"{site} 开始签到") # 判断今日是否已签到 html_text = self.get_page_source(url='https://pt.btschool.club', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: @@ -63,7 +65,7 @@ class BTSchool(_ISiteSigninHandler): html_text = self.get_page_source(url='https://pt.btschool.club/index.php?action=addbonus', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: diff --git a/app/plugins/autosignin/sites/chdbits.py b/app/plugins/autosignin/sites/chdbits.py index 6d4a3355..10b548ff 100644 --- a/app/plugins/autosignin/sites/chdbits.py +++ b/app/plugins/autosignin/sites/chdbits.py @@ -46,13 +46,14 @@ class CHDBits(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 判断今日是否已签到 html_text = self.get_page_source(url='https://chdbits.co/bakatest.php', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: diff --git a/app/plugins/autosignin/sites/haidan.py b/app/plugins/autosignin/sites/haidan.py index e00bc238..7f57ff44 100644 --- a/app/plugins/autosignin/sites/haidan.py +++ b/app/plugins/autosignin/sites/haidan.py @@ -37,13 +37,14 @@ class HaiDan(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 签到 html_text = self.get_page_source(url='https://www.haidan.video/signin.php', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") diff --git a/app/plugins/autosignin/sites/hares.py b/app/plugins/autosignin/sites/hares.py index c7249c81..a8e5921a 100644 --- a/app/plugins/autosignin/sites/hares.py +++ b/app/plugins/autosignin/sites/hares.py @@ -39,13 +39,14 @@ class Hares(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 获取页面html html_text = self.get_page_source(url='https://club.hares.top', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: diff --git a/app/plugins/autosignin/sites/hdcity.py b/app/plugins/autosignin/sites/hdcity.py index 0069a2ad..4ba61d27 100644 --- a/app/plugins/autosignin/sites/hdcity.py +++ b/app/plugins/autosignin/sites/hdcity.py @@ -39,13 +39,14 @@ class HDCity(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 获取页面html html_text = self.get_page_source(url='https://hdcity.city/sign', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") diff --git a/app/plugins/autosignin/sites/hdsky.py b/app/plugins/autosignin/sites/hdsky.py index b92e5fdf..64e2bebf 100644 --- a/app/plugins/autosignin/sites/hdsky.py +++ b/app/plugins/autosignin/sites/hdsky.py @@ -41,13 +41,14 @@ class HDSky(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 判断今日是否已签到 html_text = self.get_page_source(url='https://hdsky.me', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") diff --git a/app/plugins/autosignin/sites/hdupt.py b/app/plugins/autosignin/sites/hdupt.py index acb2835e..d143d443 100644 --- a/app/plugins/autosignin/sites/hdupt.py +++ b/app/plugins/autosignin/sites/hdupt.py @@ -41,13 +41,14 @@ class HDUpt(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 获取页面html html_text = self.get_page_source(url='https://pt.hdupt.com', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") @@ -67,7 +68,7 @@ class HDUpt(_ISiteSigninHandler): html_text = self.get_page_source(url='https://pt.hdupt.com/added.php?action=qiandao', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") diff --git a/app/plugins/autosignin/sites/opencd.py b/app/plugins/autosignin/sites/opencd.py index d6d06082..5d649d83 100644 --- a/app/plugins/autosignin/sites/opencd.py +++ b/app/plugins/autosignin/sites/opencd.py @@ -42,13 +42,14 @@ class Opencd(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 判断今日是否已签到 html_text = self.get_page_source(url='https://www.open.cd', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") @@ -66,7 +67,7 @@ class Opencd(_ISiteSigninHandler): html_text = self.get_page_source(url='https://www.open.cd/plugin_sign-in.php', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") diff --git a/app/plugins/autosignin/sites/pterclub.py b/app/plugins/autosignin/sites/pterclub.py index 601767f3..292bd7a6 100644 --- a/app/plugins/autosignin/sites/pterclub.py +++ b/app/plugins/autosignin/sites/pterclub.py @@ -35,13 +35,14 @@ class PTerClub(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 签到 html_text = self.get_page_source(url='https://pterclub.com/attendance-ajax.php', cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,签到接口请求失败") diff --git a/app/plugins/autosignin/sites/tjupt.py b/app/plugins/autosignin/sites/tjupt.py index d92c9601..393c0626 100644 --- a/app/plugins/autosignin/sites/tjupt.py +++ b/app/plugins/autosignin/sites/tjupt.py @@ -56,6 +56,7 @@ class Tjupt(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 创建正确答案存储目录 @@ -66,7 +67,7 @@ class Tjupt(_ISiteSigninHandler): html_text = self.get_page_source(url=self._sign_in_url, cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) # 获取签到后返回html,判断是否签到成功 diff --git a/app/plugins/autosignin/sites/ttg.py b/app/plugins/autosignin/sites/ttg.py index 2aee59b4..49ccdb62 100644 --- a/app/plugins/autosignin/sites/ttg.py +++ b/app/plugins/autosignin/sites/ttg.py @@ -43,13 +43,14 @@ class TTG(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 获取页面html html_text = self.get_page_source(url="https://totheglory.im", cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") diff --git a/app/plugins/autosignin/sites/u2.py b/app/plugins/autosignin/sites/u2.py index 6b077cb9..57cfa090 100644 --- a/app/plugins/autosignin/sites/u2.py +++ b/app/plugins/autosignin/sites/u2.py @@ -49,6 +49,7 @@ class U2(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") now = datetime.datetime.now() @@ -61,7 +62,7 @@ class U2(_ISiteSigninHandler): html_text = self.get_page_source(url="https://u2.dmhy.org/showup.php", cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"签到失败,请检查站点连通性") diff --git a/app/plugins/autosignin/sites/zhuque.py b/app/plugins/autosignin/sites/zhuque.py index 0661cac8..1a7ed239 100644 --- a/app/plugins/autosignin/sites/zhuque.py +++ b/app/plugins/autosignin/sites/zhuque.py @@ -37,13 +37,14 @@ class ZhuQue(_ISiteSigninHandler): site_cookie = site_info.get("cookie") ua = site_info.get("ua") proxies = settings.PROXY if site_info.get("proxy") else None + proxy_server = settings.PROXY_SERVER if site_info.get("proxy") else None render = site_info.get("render") # 获取页面html html_text = self.get_page_source(url="https://zhuque.in", cookie=site_cookie, ua=ua, - proxies=proxies, + proxies=proxy_server, render=render) if not html_text: logger.error(f"模拟登录失败,请检查站点连通性") diff --git a/app/plugins/sitestatistic/__init__.py b/app/plugins/sitestatistic/__init__.py index a47a7c64..d33997d9 100644 --- a/app/plugins/sitestatistic/__init__.py +++ b/app/plugins/sitestatistic/__init__.py @@ -101,6 +101,7 @@ class SiteStatistic(_PluginBase): ua = site_info.get("ua") session = requests.Session() proxies = settings.PROXY if proxy else None + proxy_server = settings.PROXY_SERVER if proxy else None render = site_info.get("render") logger.debug(f"站点 {site_name} url={url} site_cookie={site_cookie} ua={ua}") @@ -109,7 +110,7 @@ class SiteStatistic(_PluginBase): html_text = PlaywrightHelper().get_page_source(url=url, cookies=site_cookie, ua=ua, - proxies=proxies) + proxies=proxy_server) else: # 普通模式 res = RequestUtils(cookies=site_cookie,