56 lines
1.3 KiB
Python
56 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()
|
|
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
|