latosa/user.py

100 lines
2.9 KiB
Python
Raw Permalink Normal View History

2024-03-03 11:28:05 +01:00
import os
2024-03-02 16:15:54 +01:00
from flask import Flask
from flask_bcrypt import Bcrypt
2024-03-03 11:28:05 +01:00
from db import DB
2024-03-02 16:15:54 +01:00
class User:
2024-03-03 11:28:05 +01:00
def __init__(self,
app: Flask,
uid: str,
display_name: str,
email: str,
password: str,
salt: str,
admin: bool = False,
groups: list[str] = []):
self.db = DB()
2024-03-02 16:15:54 +01:00
self.display_name = display_name
self.email = email
2024-03-02 23:59:31 +01:00
self.groups = groups
2024-03-02 16:15:54 +01:00
self.is_active = False
2024-03-02 23:59:31 +01:00
self.is_admin = admin
2024-03-02 16:15:54 +01:00
self.is_anonymous = False
2024-03-02 23:59:31 +01:00
self.is_authenticated = False
self.uid = uid
2024-03-02 16:15:54 +01:00
self.bcrypt = Bcrypt(app)
2024-03-03 11:28:05 +01:00
self.salt = salt
self.password_hash = self.bcrypt.generate_password_hash(
password + self.salt).decode('utf-8')
self.commit()
2024-03-02 16:15:54 +01:00
def check_password(self, password: str):
2024-03-03 11:28:05 +01:00
return self.bcrypt.check_password_hash(self.password_hash,
password + self.salt)
2024-03-02 16:15:54 +01:00
def get_id(self):
return self.uid
def get_display_name(self):
return self.display_name
def get_email(self):
return self.email
2024-03-03 11:28:05 +01:00
def get_groups(self):
return ','.join(self.groups)
2024-03-02 16:15:54 +01:00
def set_active(self, active: bool):
self.is_active = active
2024-03-03 11:28:05 +01:00
self.commit()
2024-03-02 16:15:54 +01:00
def set_authenticated(self, authenticated: bool):
self.is_authenticated = authenticated
2024-03-03 11:28:05 +01:00
self.commit()
2024-03-02 16:15:54 +01:00
def set_anonymous(self, anonymous: bool):
self.is_anonymous = anonymous
2024-03-03 11:28:05 +01:00
self.commit()
2024-03-02 16:15:54 +01:00
def set_admin(self, admin: bool):
self.is_admin = admin
2024-03-03 11:28:05 +01:00
self.commit()
2024-03-02 16:15:54 +01:00
def set_email(self, email: str):
self.email = email
2024-03-03 11:28:05 +01:00
self.commit()
2024-03-02 16:15:54 +01:00
def set_password(self, password: str):
2024-03-03 11:28:05 +01:00
self.password_hash = self.bcrypt.generate_password_hash(
password + self.salt).decode('utf-8')
self.commit()
def commit(self):
bind_params = {
'uid': self.uid,
'display_name': self.display_name,
'is_active': self.is_active,
'is_anonymous': self.is_anonymous,
'is_admin': self.is_admin,
'email': self.email,
'password_hash': self.password_hash,
'salt': self.salt,
'groups': self.get_groups(),
}
statement = "INSERT OR REPLACE INTO users (uid, display_name, is_active, is_anonymous, is_admin, email, password_hash, salt, groups) VALUES(:uid, :display_name, :is_active, :is_anonymous, :is_admin, :email, :password_hash, :salt, :groups)"
self.db.execute(statement, bind_params)
2024-03-02 16:15:54 +01:00
2024-03-03 11:28:05 +01:00
@staticmethod
def users_from_db() -> list:
db = DB()
statement = "SELECT * FROM users"
result = db.execute(statement, {})
users = []
for row in result:
users.append(User(**row))
return users