Source code for botlib.users

# mad/users.py
#
#

""" class to access user records. """

from .db import Db
from .object import Object, slice
from .utils import userhost

import logging

[docs]class Users(Db): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._userhosts = Object()
[docs] def add(self, origin, perms): """ add a user to the store. """ from .space import cfg user = self.fetch(origin) if not user: user = User() user.user = userhost(origin) user.perms = [x.upper() for x in perms] user.save() else: user.user = userhost(origin) user.perms = [x.upper() for x in perms] user.save() logging.warn("# user %s" % user) return user
[docs] def allowed(self, origin, perm): """ check whether a user has a permission. """ from .space import cfg, fleet if origin == cfg.owner: return True perm = perm.upper() user = self.fetch(origin) if user and perm in user.perms: return True logging.warn("denied %s %s" % (origin, perm)) return False
[docs] def delete(self, origin, perms): """ add a user to the store. """ user = self.fetch(origin) if user: user.perms.remove(perms) user.sync() return user
[docs] def fetch(self, origin): """ return user data. """ o = userhost(origin) return self.last("user", o)
[docs] def set(self, origin, perms): """ set a permission of a user. """ user = self.fetch(origin) if user: if perms.upper() not in user.perms: user.perms.append(perms.upper()) user.sync() return user
[docs]class User(Object): pass
[docs]def meet(event): """ create an user record. """ from .space import fleet, users if not users.allowed(event.origin, "OPER"): event.reply("you are not allowed to give the meet command.") return perms = ["USER", ] try: nick, *permissions = event._parsed.args perms.extend(permissions) except: event.reply("meet <nick> [<perm1> <perm2>]") return origin = fleet.get_origin(nick) if not origin: origin = nick user = users.add(origin, perms) if user: event.reply("user %s created" % origin) else: event.reply("missing userhost for %s" % origin)
[docs]def perm(event): """ add/change permissions of an user. """ from .space import fleet, users if not users.allowed(event.origin, "OPER"): event.reply("you are not allowed to give the perm command.") return try: nick, perms = event._parsed.args except: event.reply("perm <origin> <perm>") return origin = fleet.get_origin(nick) user = users.set(origin, perms) if not user: event.reply("can't find a user matching %s" % origin) return event.reply(slice(user, skip=["type"]))
[docs]def delperm(event): """ delete permissions of an user. """ from .space import fleet, users if not users.allowed(event.origin, "OPER"): event.reply("you are not allowed to give the delperm command.") return try: nick, perms = event._parsed.args except: event.reply("perm <origin> <perm>") return origin = fleet.get_origin(nick) try: user = users.delete(origin, perms) except Exception as ex: event.reply(str(ex)) return if not user: event.reply("can't find a user matching %s" % origin) return event.reply(slice(user, skip=["type"]))
[docs]def user(event): """ show user selected by userhost. """ from .space import fleet, users if not event._parsed.rest: event.reply("user <origin>") return nick = event._parsed.args[0] origin = fleet.get_origin(nick) u = users.fetch(origin) if u: event.reply(slice(u, skip=["type"]))
[docs]def w(event): """ show user data. """ from .space import users u = users.fetch(event.userhost) if u: event.reply(u) else: event.reply("no matching user found.")