mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-04 23:17:20 +08:00
refactor: 统一插件迁移与 Passkey 模块命名
This commit is contained in:
@@ -7,7 +7,7 @@ import json
|
||||
import secrets
|
||||
import threading
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Dict, List, Literal, Optional, Tuple
|
||||
from typing import Any, Dict, List, Literal, Optional, Protocol, Tuple
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from webauthn import (
|
||||
@@ -451,3 +451,73 @@ class PassKeyHelper:
|
||||
except Exception as e:
|
||||
logger.error(f"验证认证响应失败: {e}")
|
||||
return False, credential_current_sign_count
|
||||
|
||||
|
||||
class PasskeyRepository(Protocol):
|
||||
"""PassKey 用例需要的最小同步数据端口。"""
|
||||
|
||||
def list(self) -> list[Any]:
|
||||
"""列出全部启用凭证。"""
|
||||
|
||||
def list_by_user_id(self, user_id: int) -> list[Any]:
|
||||
"""列出指定用户凭证。"""
|
||||
|
||||
def get_by_credential_id(self, credential_id: str) -> Optional[Any]:
|
||||
"""按凭证 ID 查找凭证。"""
|
||||
|
||||
def create(self, payload: dict[str, Any]) -> Any:
|
||||
"""创建凭证。"""
|
||||
|
||||
def update_last_used(self, passkey: Any, sign_count: int) -> bool:
|
||||
"""更新凭证使用计数。"""
|
||||
|
||||
def delete_by_id(self, passkey_id: int, user_id: int) -> bool:
|
||||
"""删除用户凭证。"""
|
||||
|
||||
|
||||
class PasskeyService:
|
||||
"""编排 PassKey 凭证生命周期。"""
|
||||
|
||||
def __init__(self, repository: PasskeyRepository) -> None:
|
||||
"""注入 PassKey 数据端口。"""
|
||||
self._repository = repository
|
||||
|
||||
def list(self) -> list[Any]:
|
||||
"""列出全部启用凭证。"""
|
||||
return self._repository.list()
|
||||
|
||||
def list_by_user_id(self, user_id: int) -> list[Any]:
|
||||
"""列出指定用户凭证。"""
|
||||
return self._repository.list_by_user_id(user_id)
|
||||
|
||||
def get_by_credential_id(self, credential_id: str) -> Optional[Any]:
|
||||
"""按凭证 ID 查找凭证。"""
|
||||
return self._repository.get_by_credential_id(credential_id)
|
||||
|
||||
def create(self, payload: dict[str, Any]) -> Any:
|
||||
"""创建凭证。"""
|
||||
return self._repository.create(payload)
|
||||
|
||||
def update_last_used(self, passkey: Any, sign_count: int) -> bool:
|
||||
"""更新凭证使用计数。"""
|
||||
return self._repository.update_last_used(passkey, sign_count)
|
||||
|
||||
def delete_by_id(self, passkey_id: int, user_id: int) -> bool:
|
||||
"""删除用户凭证。"""
|
||||
return self._repository.delete_by_id(passkey_id, user_id)
|
||||
|
||||
|
||||
_configured_passkey_service: Optional[PasskeyService] = None
|
||||
|
||||
|
||||
def configure_passkey_service(service: PasskeyService) -> None:
|
||||
"""由启动组合根登记 PassKey 应用服务。"""
|
||||
global _configured_passkey_service
|
||||
_configured_passkey_service = service
|
||||
|
||||
|
||||
def get_configured_passkey_service() -> PasskeyService:
|
||||
"""返回启动阶段登记的 PassKey 应用服务。"""
|
||||
if _configured_passkey_service is None:
|
||||
raise RuntimeError("PassKey 服务尚未配置")
|
||||
return _configured_passkey_service
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
"""PassKey 认证凭证应用服务。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Optional, Protocol
|
||||
|
||||
|
||||
class PasskeyRepository(Protocol):
|
||||
"""PassKey 用例需要的最小同步数据端口。"""
|
||||
|
||||
def list(self) -> list[Any]:
|
||||
"""列出全部启用凭证。"""
|
||||
|
||||
def list_by_user_id(self, user_id: int) -> list[Any]:
|
||||
"""列出指定用户凭证。"""
|
||||
|
||||
def get_by_credential_id(self, credential_id: str) -> Optional[Any]:
|
||||
"""按凭证 ID 查找凭证。"""
|
||||
|
||||
def create(self, payload: dict[str, Any]) -> Any:
|
||||
"""创建凭证。"""
|
||||
|
||||
def update_last_used(self, passkey: Any, sign_count: int) -> bool:
|
||||
"""更新凭证使用计数。"""
|
||||
|
||||
def delete_by_id(self, passkey_id: int, user_id: int) -> bool:
|
||||
"""删除用户凭证。"""
|
||||
|
||||
|
||||
class PasskeyService:
|
||||
"""编排 PassKey 凭证生命周期。"""
|
||||
|
||||
def __init__(self, repository: PasskeyRepository) -> None:
|
||||
"""注入 PassKey 数据端口。"""
|
||||
self._repository = repository
|
||||
|
||||
def list(self) -> list[Any]:
|
||||
"""列出全部启用凭证。"""
|
||||
return self._repository.list()
|
||||
|
||||
def list_by_user_id(self, user_id: int) -> list[Any]:
|
||||
"""列出指定用户凭证。"""
|
||||
return self._repository.list_by_user_id(user_id)
|
||||
|
||||
def get_by_credential_id(self, credential_id: str) -> Optional[Any]:
|
||||
"""按凭证 ID 查找凭证。"""
|
||||
return self._repository.get_by_credential_id(credential_id)
|
||||
|
||||
def create(self, payload: dict[str, Any]) -> Any:
|
||||
"""创建凭证。"""
|
||||
return self._repository.create(payload)
|
||||
|
||||
def update_last_used(self, passkey: Any, sign_count: int) -> bool:
|
||||
"""更新凭证使用计数。"""
|
||||
return self._repository.update_last_used(passkey, sign_count)
|
||||
|
||||
def delete_by_id(self, passkey_id: int, user_id: int) -> bool:
|
||||
"""删除用户凭证。"""
|
||||
return self._repository.delete_by_id(passkey_id, user_id)
|
||||
|
||||
|
||||
_configured_passkey_service: PasskeyService | None = None
|
||||
|
||||
|
||||
def configure_passkey_service(service: PasskeyService) -> None:
|
||||
"""由启动组合根登记 PassKey 应用服务。"""
|
||||
global _configured_passkey_service
|
||||
_configured_passkey_service = service
|
||||
|
||||
|
||||
def get_configured_passkey_service() -> PasskeyService:
|
||||
"""返回启动阶段登记的 PassKey 应用服务。"""
|
||||
if _configured_passkey_service is None:
|
||||
raise RuntimeError("PassKey 服务尚未配置")
|
||||
return _configured_passkey_service
|
||||
Reference in New Issue
Block a user