User CRUD
This commit is contained in:
parent
ae3627cbe0
commit
9625336df9
2 changed files with 47 additions and 0 deletions
|
@ -46,10 +46,54 @@ class User(UserBase, table=True):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, name: str) -> User | None:
|
def get(cls, name: str) -> User | None:
|
||||||
|
"""
|
||||||
|
Load user from database by name.
|
||||||
|
"""
|
||||||
|
|
||||||
with Connection.session as db:
|
with Connection.session as db:
|
||||||
return db.get(cls, name)
|
return db.get(cls, name)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def authenticate(
|
||||||
|
cls,
|
||||||
|
name: str,
|
||||||
|
password: str,
|
||||||
|
) -> User | None:
|
||||||
|
"""
|
||||||
|
Authenticate with name/password against users in database.
|
||||||
|
"""
|
||||||
|
|
||||||
|
crypt_context = Config.load_sync().crypto.crypt_context_sync
|
||||||
|
|
||||||
|
if (user := cls.get(name)) is None:
|
||||||
|
# nonexistent user, fake doing password verification
|
||||||
|
crypt_context.dummy_verify()
|
||||||
|
return None
|
||||||
|
|
||||||
|
if not crypt_context.verify(password, user.password):
|
||||||
|
# password hash mismatch
|
||||||
|
return None
|
||||||
|
|
||||||
|
return user
|
||||||
|
|
||||||
|
def update(self) -> None:
|
||||||
|
"""
|
||||||
|
Update this user in the database.
|
||||||
|
"""
|
||||||
|
|
||||||
|
with Connection.session as db:
|
||||||
|
db.add(self)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(self)
|
||||||
|
|
||||||
|
def delete(self) -> bool:
|
||||||
|
"""
|
||||||
|
Delete this user from the database.
|
||||||
|
"""
|
||||||
|
|
||||||
|
with Connection.session as db:
|
||||||
|
db.delete(self)
|
||||||
|
db.commit()
|
||||||
class UserCreate(UserBase):
|
class UserCreate(UserBase):
|
||||||
password: str | None = Field(default=None)
|
password: str | None = Field(default=None)
|
||||||
password_clear: str | None = Field(default=None)
|
password_clear: str | None = Field(default=None)
|
||||||
|
|
|
@ -61,6 +61,9 @@ async def on_startup() -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
print(user.User.get("Uwe"))
|
print(user.User.get("Uwe"))
|
||||||
|
print(user.User.authenticate("Uwe", "uwe"))
|
||||||
|
|
||||||
|
uwe = user.User.authenticate("Uwe", "ulf")
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
|
|
Loading…
Reference in a new issue