diff options
author | makefu <github@syntax-fehler.de> | 2014-03-25 15:35:52 +0100 |
---|---|---|
committer | makefu <github@syntax-fehler.de> | 2014-03-25 15:35:52 +0100 |
commit | b8dc4ea2af56884d0908d1c9261f23c76951c567 (patch) | |
tree | 22a72f1231121dfc0cf217e5ecaf6bedcab466f4 /IRC | |
parent | 41170dbfd9bebfc591eb0988d6bfec62707d5982 (diff) |
add authentication to Reaktor
using /query <reaktor> identify <password>
configuration contains commands and public_commands
Diffstat (limited to 'IRC')
-rwxr-xr-x | IRC/reaktor.py | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/IRC/reaktor.py b/IRC/reaktor.py index 7ef8d70..e73a3d7 100755 --- a/IRC/reaktor.py +++ b/IRC/reaktor.py @@ -20,6 +20,16 @@ logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) restart_timeout = getconf('irc_restart_timeout') or 5 +def is_admin(prefix): + try: + with open(getconf('auth_file')) as f: + for line in f: + if line.strip() == prefix: + return True + except Exception as e: + log.info(e) + return False + class Reaktor(asybot): def __init__(self): asybot.__init__(self, getconf('irc_server'), getconf('irc_port'), getconf('irc_nickname'), getconf('irc_channels'), hammer_interval=getconf('irc_hammer_interval'), alarm_timeout=getconf('irc_alarm_timeout'), kill_timeout=getconf('irc_kill_timeout')) @@ -28,8 +38,16 @@ class Reaktor(asybot): for command in getconf('commands'): y = match(command['pattern'], rest) if y: - self.execute_command(command, y, prefix, params) - break + if not is_admin(prefix): + self.PRIVMSG(params,'unauthorized!') + else: + return self.execute_command(command, y, prefix, params) + + for command in getconf('public_commands'): + y = match(command['pattern'], rest) + if y: + return self.execute_command(command, y, prefix, params) + def execute_command(self, command, match, prefix, target): from os.path import realpath, dirname, join @@ -43,12 +61,16 @@ class Reaktor(asybot): myargv += shlex.split(match.groupdict()['args']) env = {} + env['_prefix'] = prefix env['_from'] = prefix.split('!', 1)[0] + log.debug('self:' +self.nickname) + # when receiving /query, answer to the user, not to self if self.nickname in target: target.remove(self.nickname) target.append(env['_from']) log.debug('target:' +str(target)) + env['config_filename'] = os.path.abspath(config_filename) start = time() try: @@ -84,4 +106,3 @@ if __name__ == "__main__": waiting for %d seconds" % restart_timeout) log.debug("Exception: %s" % str(e)) sleep(restart_timeout) - |