import enum from nntp.tiny.db import Database, DatabaseTable from nntp.tiny.passwd import compare class UserPermission(enum.Flag): NONE = 0 READ = 1 POST = enum.auto() KILL = enum.auto() GROUP = enum.auto() def __str__(self): return { 1: 'READ', 2: 'POST', 3: 'KILL', 4: 'GROUP' }[self.value] class User(DatabaseTable): name = 'server_user' key = 'id' columns = 'id', 'active', 'username', 'password', 'fullname', 'mail', def auth(self, password: str): if self.active is False or self.password is None or self.password == '': return False return compare(password, self.password) def permissions(self, db: Database) -> UserPermission: perms = UserPermission.NONE sql = """ select perm.name from server_permission perm, server_user_permission user_perm where perm.id = user_perm.permission_id and user_perm.user_id = ? """ cr = db.execute(sql, (self.id,)) while True: row = cr.fetchone() if row is None: break perms |= UserPermission[row[0]] return perms