Coverage for src / mysingle / auth / schemas / auth.py: 0%
49 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
1from datetime import UTC, datetime, timedelta
3from beanie import PydanticObjectId
4from pydantic import BaseModel, ConfigDict, Field
6from ...core.config import settings
9class UserInfo(BaseModel):
10 id: PydanticObjectId = Field(alias="_id")
11 email: str
12 full_name: str | None = None
13 is_active: bool
14 is_superuser: bool
15 is_verified: bool
16 avatar_url: str | None = None
18 model_config = ConfigDict(
19 json_schema_extra={
20 "example": {
21 "id": "string",
22 "email": "user@example.com",
23 "full_name": "string",
24 "is_active": True,
25 "is_superuser": False,
26 "is_verified": False,
27 "avatar_url": "string",
28 }
29 }
30 )
33class LoginResponse(BaseModel):
34 access_token: str | None = None
35 refresh_token: str | None = None
36 token_type: str | None = None
37 user_info: UserInfo
40class OAuth2AuthorizeResponse(BaseModel):
41 authorization_url: str
44now = datetime.now(UTC)
45access_exp = now + timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
46refresh_exp = now + timedelta(days=settings.REFRESH_TOKEN_EXPIRE_DAYS)
47default_audience = [settings.DEFAULT_AUDIENCE]
50class AccessTokenData(BaseModel):
51 sub: str
52 email: str | None = None
53 exp: int = Field(default_factory=lambda: int(access_exp.timestamp()))
54 iat: int = Field(default_factory=lambda: int(now.timestamp()))
55 aud: list[str] = Field(default_factory=lambda: default_audience)
56 type: str = "access"
59class RefreshTokenData(BaseModel):
60 sub: str
61 exp: int = Field(default_factory=lambda: int(refresh_exp.timestamp()))
62 iat: int = Field(default_factory=lambda: int(now.timestamp()))
63 aud: list[str] = Field(default_factory=lambda: default_audience)
64 type: str = "refresh"
67class TokenResponse(BaseModel):
68 access_token: str
69 refresh_token: str
70 token_type: str = "bearer"
72 model_config = ConfigDict(
73 json_schema_extra={
74 "example": {
75 "access_token": "string",
76 "refresh_token": "string",
77 "token_type": "bearer",
78 }
79 }
80 )
83class VerifyTokenResponse(BaseModel):
84 valid: bool
85 user_id: str
86 email: str
87 is_verified: bool
88 is_superuser: bool
89 is_active: bool