https://dev.kronoz.win/r/marzneshin.git
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)