File size: 2,192 Bytes
1730163 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | """Pydantic request/response schemas for the AmanPay API."""
from __future__ import annotations
from typing import List, Optional
from pydantic import BaseModel, Field
class EnrollRequest(BaseModel):
user_id: str = Field(..., description="Unique identifier for the user")
face_image: str = Field(..., description="Base64-encoded face image")
fingerprint_image: str = Field(..., description="Base64-encoded fingerprint image")
class AuthRequest(BaseModel):
user_id: str
face_image: str
fingerprint_image: str
class VerifyRequest(BaseModel):
face1: str
fp1: str
face2: str
fp2: str
class EnrollResponse(BaseModel):
success: bool
user_id: str
face_liveness: float
fp_liveness: float
reason: Optional[str] = None
class AuthResponse(BaseModel):
success: bool
similarity: float
threshold: float
face_liveness: float
fp_liveness: float
confidence: Optional[float] = None
face_quality: Optional[float] = None
fp_quality: Optional[float] = None
protected: Optional[bool] = None
deepfake_score: Optional[float] = None
is_deepfake: Optional[bool] = None
reason: Optional[str] = None
class VerifyResponse(BaseModel):
fused_similarity: float
face_similarity: float
fingerprint_similarity: float
class PasskeyRegisterRequest(BaseModel):
user_id: str
public_key: str = Field(..., description="Base64 raw Ed25519 device public key")
class ChallengeRequest(BaseModel):
user_id: str
class ChallengeResponse(BaseModel):
user_id: str
challenge: str = Field(..., description="Base64 single-use nonce to sign")
class PasskeyAuthRequest(BaseModel):
user_id: str
challenge: str
signature: str = Field(..., description="Base64 Ed25519 signature over the challenge")
face_image: str
fingerprint_image: str
class PasskeyAuthResponse(BaseModel):
success: bool
biometric_success: bool
similarity: float
factors: Optional[List[str]] = None
reason: Optional[str] = None
class HealthResponse(BaseModel):
status: str
model_loaded: bool
device: str
class UserListResponse(BaseModel):
users: List[str]
|