xenu_nntp/lib/nntp/tiny/user.py
2024-12-06 21:55:33 -05:00

54 lines
1.3 KiB
Python

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()
ADMIN = enum.auto()
def __str__(self):
return {
1: 'READ',
2: 'POST',
3: 'ADMIN'
}[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