feat: add Pydantic models for User, Credential, and MagicLink
This commit is contained in:
parent
16a78663f3
commit
e5220c97b1
2 changed files with 141 additions and 0 deletions
62
src/fastapi_oidc_op/models.py
Normal file
62
src/fastapi_oidc_op/models.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
from datetime import UTC, datetime, timedelta
|
||||
from enum import StrEnum
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
def _utcnow() -> datetime:
|
||||
return datetime.now(UTC)
|
||||
|
||||
|
||||
def _default_expiry() -> datetime:
|
||||
return datetime.now(UTC) + timedelta(hours=24)
|
||||
|
||||
|
||||
class CredentialType(StrEnum):
|
||||
WEBAUTHN = "webauthn"
|
||||
PASSWORD = "password"
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
userid: str
|
||||
username: str
|
||||
preferred_username: str | None = None
|
||||
given_name: str | None = None
|
||||
family_name: str | None = None
|
||||
nickname: str | None = None
|
||||
email: str | None = None
|
||||
email_verified: bool = False
|
||||
phone_number: str | None = None
|
||||
phone_number_verified: bool = False
|
||||
picture: str | None = None
|
||||
locale: str | None = None
|
||||
active: bool = True
|
||||
created_at: datetime = Field(default_factory=_utcnow)
|
||||
updated_at: datetime = Field(default_factory=_utcnow)
|
||||
groups: list[str] = Field(default_factory=list)
|
||||
|
||||
|
||||
class WebAuthnCredential(BaseModel):
|
||||
user_id: str
|
||||
type: CredentialType = CredentialType.WEBAUTHN
|
||||
credential_id: bytes
|
||||
public_key: bytes
|
||||
sign_count: int = 0
|
||||
device_name: str = ""
|
||||
created_at: datetime = Field(default_factory=_utcnow)
|
||||
|
||||
|
||||
class PasswordCredential(BaseModel):
|
||||
user_id: str
|
||||
type: CredentialType = CredentialType.PASSWORD
|
||||
password_hash: str
|
||||
created_at: datetime = Field(default_factory=_utcnow)
|
||||
|
||||
|
||||
class MagicLink(BaseModel):
|
||||
token: str
|
||||
username: str
|
||||
expires_at: datetime = Field(default_factory=_default_expiry)
|
||||
used: bool = False
|
||||
created_by: str | None = None
|
||||
note: str | None = None
|
||||
Loading…
Add table
Add a link
Reference in a new issue