gitscope
← marzneshin / v0.7.1 / app/models/admin.py
https://dev.kronoz.win/r/marzneshin.git
app/models/admin.py · Python
Blame Raw
 1from fastapi.security import OAuth2PasswordBearer
 2from passlib.context import CryptContext
 3from pydantic import ConfigDict, BaseModel
 4
 5pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
 6oauth2_scheme = OAuth2PasswordBearer(
 7    tokenUrl="/api/admins/token"
 8)  # Admin view url
 9
10
11class Token(BaseModel):
12    access_token: str
13    is_sudo: bool
14    token_type: str = "bearer"
15
16
17class Admin(BaseModel):
18    id: int | None = None
19    username: str
20    is_sudo: bool
21    enabled: bool = True
22    all_services_access: bool = False
23    modify_users_access: bool = True
24    service_ids: list = []
25    subscription_url_prefix: str = ""
26    model_config = ConfigDict(from_attributes=True)
27
28
29class AdminCreate(Admin):
30    username: str
31    password: str
32
33    @property
34    def hashed_password(self):
35        return pwd_context.hash(self.password)
36
37
38class AdminResponse(Admin):
39    id: int
40    users_data_usage: int
41
42
43class AdminModify(Admin):
44    password: str
45    is_sudo: bool
46
47    @property
48    def hashed_password(self):
49        return (
50            pwd_context.hash(self.password)
51            if self.password is not None
52            else None
53        )
54
55
56class AdminPartialModify(AdminModify):
57    """__annotations__ = {
58        k: v | None for k, v in AdminModify.__annotations__.items()
59    }"""
60
61    password: str | None = None
62    username: str | None = None
63    is_sudo: bool | None = None
64    enabled: bool | None = None
65    all_services_access: bool | None = None
66    modify_users_access: bool | None = None
67    service_ids: list | None = None
68    subscription_url_prefix: str | None = None
69
70
71class AdminInDB(Admin):
72    username: str
73    hashed_password: str
74
75    def verify_password(self, plain_password):
76        return pwd_context.verify(plain_password, self.hashed_password)