Coverage for src/lexigram/auth/di/sub_providers/passkey_provider.py: 79%
19 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 12:26 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 12:26 +0800
1# lexigram/auth/providers/passkey_provider.py
2"""Passkey provider - handles WebAuthn/Passkey support only."""
4from __future__ import annotations
6from typing import TYPE_CHECKING, Any
8from lexigram.contracts.core import HealthCheckResult, HealthStatus, ProviderPriority
9from lexigram.di.decorators import inject
10from lexigram.di.provider import Provider
11from lexigram.logging import get_logger
13if TYPE_CHECKING:
14 from lexigram.contracts.core.di import (
15 ContainerRegistrarProtocol,
16 ContainerResolverProtocol,
17 )
19logger = get_logger(__name__)
22@inject
23class PasskeyProvider(Provider):
24 """WebAuthn/Passkey support ONLY."""
26 def __init__(self, **kwargs: Any) -> None:
27 super().__init__(name="passkeys", priority=ProviderPriority.SECURITY)
28 # Passkey-specific configuration would go here
29 # For now, this is a placeholder structure
31 async def register(self, container: ContainerRegistrarProtocol) -> None:
32 """Register passkey services with the container."""
33 # Passkey services would be registered here
34 # This is a simplified version - in practice you'd have PasskeyManager, WebAuthnService, etc.
36 async def boot(self, container: ContainerResolverProtocol) -> None:
37 """Initialize passkey provider."""
38 logger.info("PasskeyProvider started")
40 async def shutdown(self) -> None:
41 """Shutdown passkey provider."""
42 logger.info("PasskeyProvider shutdown")
44 async def health_check(self, timeout: float = 5.0) -> HealthCheckResult:
45 """Check passkey provider health."""
46 return HealthCheckResult(
47 component=self.name,
48 status=HealthStatus.HEALTHY,
49 details={
50 "service": "passkeys",
51 "message": "Passkey provider placeholder - implement WebAuthn and FIDO2 support",
52 },
53 )
56__all__ = [
57 "PasskeyProvider",
58 "logger",
59]