gitscope
← marzneshin / v0.3.2 / app/models/admin.py
https://dev.kronoz.win/r/marzneshin.git
app/models/admin.py · Python
Blame Raw
 1from typing import Optional
 2
 3from fastapi.security import OAuth2PasswordBearer
 4from passlib.context import CryptContext
 5from pydantic import ConfigDict, BaseModel
 6
 7pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
 8oauth2_scheme = OAuth2PasswordBearer(
 9    tokenUrl="/api/admins/token"
10)  # Admin view url
11
12
13class Token(BaseModel):
14    access_token: str
15    is_sudo: bool
16    token_type: str = "bearer"
17
18
19class Admin(BaseModel):
20    id: int | None = None
21    username: str
22    is_sudo: bool
23    model_config = ConfigDict(from_attributes=True)
24
25
26class AdminCreate(Admin):
27    password: str
28
29    @property
30    def hashed_password(self):
31        return pwd_context.hash(self.password)
32
33
34class AdminModify(BaseModel):
35    password: str
36    is_sudo: bool
37
38    @property
39    def hashed_password(self):
40        return pwd_context.hash(self.password)
41
42
43class AdminPartialModify(AdminModify):
44    __annotations__ = {
45        k: Optional[v] for k, v in AdminModify.__annotations__.items()
46    }
47
48
49class AdminInDB(Admin):
50    username: str
51    hashed_password: str
52
53    def verify_password(self, plain_password):
54        return pwd_context.verify(plain_password, self.hashed_password)