refactor: 统一插件迁移与 Passkey 模块命名

This commit is contained in:
jxxghp
2026-08-27 20:38:55 +08:00
parent e82ce8447c
commit f888aab2c9
12 changed files with 94 additions and 103 deletions
+71 -1
View File
@@ -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
-75
View File
@@ -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