You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.2 KiB
48 lines
1.2 KiB
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from atheneum import app, db
|
|
from atheneum.model import User
|
|
from atheneum.service import authentication_service
|
|
|
|
|
|
def register(name: str, password: str, role: str) -> User:
|
|
pw_hash, pw_revision = authentication_service.get_password_hash(password)
|
|
|
|
new_user = User(
|
|
name=name,
|
|
role=role,
|
|
password_hash=pw_hash,
|
|
password_revision=pw_revision,
|
|
creation_time=datetime.now(),
|
|
version=0)
|
|
db.session.add(new_user)
|
|
db.session.commit()
|
|
|
|
app.logger.info('Registered new user: %s with role: %s', name, role)
|
|
return new_user
|
|
|
|
|
|
def delete(user: User) -> bool:
|
|
existing_user = db.session.delete(user)
|
|
if existing_user is None:
|
|
db.session.commit()
|
|
return True
|
|
return False
|
|
|
|
|
|
def update_last_login_time(user: User) -> None:
|
|
user.last_login_time = datetime.now()
|
|
db.session.commit()
|
|
|
|
|
|
def update_password(user: User, password: str) -> None:
|
|
pw_hash, pw_revision = authentication_service.get_password_hash(
|
|
password)
|
|
user.password_hash = pw_hash
|
|
user.password_revision = pw_revision
|
|
db.session.commit()
|
|
|
|
|
|
def find_by_name(name: str) -> Optional[User]:
|
|
return User.query.filter_by(name=name).first()
|