xenu_nntp/lib/nntp/tiny/user.py

55 lines
1.3 KiB
Python
Raw Normal View History

import enum
from nntp.tiny.db import Database, DatabaseTable
2024-11-29 19:31:48 -05:00
from nntp.tiny.passwd import compare
class UserPermission(enum.Flag):
NONE = 0
READ = 1
POST = enum.auto()
KILL = enum.auto()
def __str__(self):
return {
1: 'READ',
2: 'POST',
3: 'KILL'
}[self.value]
2024-11-29 19:31:48 -05:00
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 == '':
2024-11-29 19:31:48 -05:00
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 = ?
"""
2024-11-29 23:45:34 -05:00
cr = db.execute(sql, (self.id,))
while True:
row = cr.fetchone()
if row is None:
break
perms |= UserPermission[row[0]]
return perms