gitscope
← marzneshin / v0.1.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(tokenUrl="/api/admins/token")  # Admin view url
 9
10
11class Token(BaseModel):
12    access_token: str
13    token_type: str = "bearer"
14
15
16class Admin(BaseModel):
17    username: str
18    is_sudo: bool
19    model_config = ConfigDict(from_attributes=True)
20
21
22class AdminCreate(Admin):
23    password: str
24
25    @property
26    def hashed_password(self):
27        return pwd_context.hash(self.password)
28
29
30class AdminModify(BaseModel):
31    password: str
32    is_sudo: bool
33
34    @property
35    def hashed_password(self):
36        return pwd_context.hash(self.password)
37
38
39class AdminPartialModify(AdminModify):
40    __annotations__ = {k: Optional[v] for k, v in AdminModify.__annotations__.items()}
41
42
43class AdminInDB(Admin):
44    username: str
45    hashed_password: str
46
47    def verify_password(self, plain_password):
48        return pwd_context.verify(plain_password, self.hashed_password)