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(
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)