From a3bec43eab2d6bd38e6cb2889162e35fbd3de713 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 9 Apr 2025 13:26:10 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=E8=AE=A2?= =?UTF-8?q?=E9=98=85=E7=AE=A1=E7=90=86=E5=91=98=20#4123?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/system.py | 6 +++-- app/helper/subscribe.py | 51 ++++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/app/api/endpoints/system.py b/app/api/endpoints/system.py index b5e853a3..696a11a4 100644 --- a/app/api/endpoints/system.py +++ b/app/api/endpoints/system.py @@ -28,6 +28,7 @@ from app.helper.message import MessageHelper, MessageQueueManager from app.helper.progress import ProgressHelper from app.helper.rule import RuleHelper from app.helper.sites import SitesHelper +from app.helper.subscribe import SubscribeHelper from app.log import logger from app.monitor import Monitor from app.scheduler import Scheduler @@ -179,9 +180,10 @@ def get_global_setting(): exclude={"SECRET_KEY", "RESOURCE_SECRET_KEY", "API_TOKEN", "TMDB_API_KEY", "TVDB_API_KEY", "FANART_API_KEY", "COOKIECLOUD_KEY", "COOKIECLOUD_PASSWORD", "GITHUB_TOKEN", "REPO_GITHUB_TOKEN"} ) - # 追加用户唯一ID + # 追加用户唯一ID和订阅分享管理权限 info.update({ - "USER_UNIQUE_ID": SystemUtils.generate_user_unique_id() + "USER_UNIQUE_ID": SubscribeHelper().get_user_uuid(), + "SUBSCRIBE_SHARE_MANAGE": SubscribeHelper().is_admin_user(), }) return schemas.Response(success=True, data=info) diff --git a/app/helper/subscribe.py b/app/helper/subscribe.py index 08b8f794..5da9145d 100644 --- a/app/helper/subscribe.py +++ b/app/helper/subscribe.py @@ -5,6 +5,7 @@ from app.core.cache import cached, cache_backend from app.core.config import settings from app.db.subscribe_oper import SubscribeOper from app.db.systemconfig_oper import SystemConfigOper +from app.log import logger from app.schemas.types import SystemConfigKey from app.utils.http import RequestUtils from app.utils.singleton import Singleton @@ -32,13 +33,29 @@ class SubscribeHelper(metaclass=Singleton): _shares_cache_region = "subscribe_share" + _github_user = None + + _share_user_id = None + + _admin_users = [ + "jxxghp", + "thsrite", + "InfinityPacer", + "DDSRem", + "Aqr-K", + "Putarku", + "4Nest", + "xyswordzoro" + ] + def __init__(self): self.systemconfig = SystemConfigOper() - self.share_user_id = SystemUtils.generate_user_unique_id() if settings.SUBSCRIBE_STATISTIC_SHARE: if not self.systemconfig.get(SystemConfigKey.SubscribeReport): if self.sub_report(): self.systemconfig.set(SystemConfigKey.SubscribeReport, "1") + self.get_user_uuid() + self.get_github_user() @cached(maxsize=20, ttl=1800) def get_statistic(self, stype: str, page: Optional[int] = 1, count: Optional[int] = 30) -> List[dict]: @@ -196,3 +213,35 @@ class SubscribeHelper(metaclass=Singleton): if res and res.status_code == 200: return res.json() return [] + + def get_user_uuid(self) -> str: + """ + 获取用户uuid + """ + if not self._share_user_id: + self._share_user_id = SystemUtils.generate_user_unique_id() + logger.info(f"当前用户UUID: {self._share_user_id}") + return self._share_user_id + + def get_github_user(self) -> str: + """ + 获取github用户 + """ + if self._github_user is None and settings.GITHUB_HEADERS: + res = RequestUtils(headers=settings.GITHUB_HEADERS, + proxies=settings.PROXY, + timeout=15).get_res(f"https://api.github.com/user") + if res: + self._github_user = res.json().get("login") + logger.info(f"当前Github用户: {self._github_user}") + return self._github_user + + def is_admin_user(self) -> bool: + """ + 判断是否是管理员 + """ + if not self._github_user: + return False + if self._github_user in self._admin_users: + return True + return False