From 3ca518888e9e72f80984dccb8afb1bde31a547dd Mon Sep 17 00:00:00 2001 From: lassulus Date: Wed, 22 Jan 2014 03:02:55 +0100 Subject: news/ircasy: handle kick correctly --- Reaktor/IRC/ircasy.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 7821305f..e32179bb 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -107,6 +107,9 @@ class asybot(asychat): elif command == 'INVITE': self.on_invite(prefix, command, params, rest) + elif command == 'KICK': + self.on_kick(prefix, command, params, rest) + elif command == '433': # ERR_NICKNAMEINUSE, retry with another name _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ @@ -158,11 +161,15 @@ class asybot(asychat): def ME(self, target, text): self.PRIVMSG(target, ('ACTION ' + text + '')) - def on_privmsg(self, prefix, command, params, rest): - pass - def on_welcome(self, prefix, command, params, rest): self.push('JOIN %s' % ','.join(self.channels)) + def on_kick(self, prefix, command, params, rest): + for chan in params: + self.channels.remove(chan) + + def on_privmsg(self, prefix, command, params, rest): + pass + def on_invite(self, prefix, command, params, rest): pass -- cgit v1.2.3 From 37d5c80ab68f28b453aaf38fce8aa944e010d360 Mon Sep 17 00:00:00 2001 From: lassulus Date: Wed, 22 Jan 2014 03:14:55 +0100 Subject: ircasy: fix on_kick --- Reaktor/IRC/ircasy.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index e32179bb..150498dd 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -165,8 +165,10 @@ class asybot(asychat): self.push('JOIN %s' % ','.join(self.channels)) def on_kick(self, prefix, command, params, rest): - for chan in params: - self.channels.remove(chan) + self.log.debug(params) + if params[-1] == self.nickname: + for chan in params[:-1]: + self.channels.remove(chan) def on_privmsg(self, prefix, command, params, rest): pass -- cgit v1.2.3 From 2ece835fcffbd14f63ae0654d58713d4047c8a25 Mon Sep 17 00:00:00 2001 From: makefu Date: Mon, 17 Feb 2014 12:46:49 +0100 Subject: whatweb: add firefox 25 user agent to whatweb --- Reaktor/commands/whatweb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/commands/whatweb b/Reaktor/commands/whatweb index afe20360..68f8aa38 100755 --- a/Reaktor/commands/whatweb +++ b/Reaktor/commands/whatweb @@ -4,4 +4,4 @@ here=$(dirname `readlink -f $0`) whatweb_bin="$here/../repos/whatweb/whatweb" [ ! -e "$whatweb_bin" ] && echo "!! Whatweb app does not exist" && exit 1 [ -z "${1:-}" ] && echo "!! no host given" && exit 1 -exec $whatweb_bin -a 3 "$1" 2>&1 +exec $whatweb_bin --user-agent="Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" -a 3 "$1" 2>&1 -- cgit v1.2.3 From f81f2f75d7fd19680a21b7d4d2b54d1e16559ab8 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 22 Feb 2014 17:08:27 +0100 Subject: reaktor: ircasy abstraction --- Reaktor/IRC/ircasy.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 150498dd..fd261ae9 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -112,11 +112,7 @@ class asybot(asychat): elif command == '433': # ERR_NICKNAMEINUSE, retry with another name - _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ - if search('[0-9]$', self.nickname) \ - else ['', self.nickname, 0, ''] - self.nickname = nickname + str(int + 1) - self.handle_connect() + self.on_nickinuse(prefix, command, params, rest) elif command == '376': self.on_welcome(prefix, command, params, rest) @@ -175,3 +171,10 @@ class asybot(asychat): def on_invite(self, prefix, command, params, rest): pass + + def on_nickinuse(self, prefix, command, params, rest): + _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ + if search('[0-9]$', self.nickname) \ + else ['', self.nickname, 0, ''] + self.nickname = nickname + str(int + 1) + self.handle_connect() -- cgit v1.2.3 From c3b00da20b5b6fc1147052b1dff55c4f5f9e67e6 Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 7 Mar 2014 14:24:47 +0100 Subject: add visit page module for reaktor --- Reaktor/commands/visit-page | 1 + 1 file changed, 1 insertion(+) create mode 120000 Reaktor/commands/visit-page (limited to 'Reaktor') diff --git a/Reaktor/commands/visit-page b/Reaktor/commands/visit-page new file mode 120000 index 00000000..be95ca4c --- /dev/null +++ b/Reaktor/commands/visit-page @@ -0,0 +1 @@ +../repos/visit-website/runner.sh \ No newline at end of file -- cgit v1.2.3 From c6b10ba46ea17f4ff0bc2f666dc1237fbb643b9d Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 7 Mar 2014 14:26:52 +0100 Subject: whatweb is now up-to-date --- Reaktor/repos/whatweb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/repos/whatweb b/Reaktor/repos/whatweb index 0918a0d9..f35d0265 160000 --- a/Reaktor/repos/whatweb +++ b/Reaktor/repos/whatweb @@ -1 +1 @@ -Subproject commit 0918a0d9b75df77f9c3e9eb360b6b22824582a20 +Subproject commit f35d0265c04605dbddec5ea9af418ebd796eef60 -- cgit v1.2.3 From d0f5222e22acc61790d4ea0c4f155d5573a633b2 Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 7 Mar 2014 14:34:34 +0100 Subject: fix broken submodule --- Reaktor/repos/view-website | 1 + 1 file changed, 1 insertion(+) create mode 160000 Reaktor/repos/view-website (limited to 'Reaktor') diff --git a/Reaktor/repos/view-website b/Reaktor/repos/view-website new file mode 160000 index 00000000..5b9a22cf --- /dev/null +++ b/Reaktor/repos/view-website @@ -0,0 +1 @@ +Subproject commit 5b9a22cf872a9855b7cb5eddd7bf962dfbff50df -- cgit v1.2.3 From c48ee1d169a77902442639f6bc48d0a7b291eafb Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 7 Mar 2014 14:42:16 +0100 Subject: Reaktur: fix symlink to visit-page script --- Reaktor/commands/visit-page | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/commands/visit-page b/Reaktor/commands/visit-page index be95ca4c..8723336b 120000 --- a/Reaktor/commands/visit-page +++ b/Reaktor/commands/visit-page @@ -1 +1 @@ -../repos/visit-website/runner.sh \ No newline at end of file +../repos/view-website/runner.sh \ No newline at end of file -- cgit v1.2.3 From b657927cf0b6420683c261ff32434b2b8b2cdf70 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:03:52 +0100 Subject: ircasy: more debug in text decoding --- Reaktor/IRC/ircasy.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index fd261ae9..ac071013 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -85,7 +85,10 @@ class asybot(asychat): alarm(self.hammer_interval) def collect_incoming_data(self, data): - self.data += data.decode() + try: + self.data += data.decode() + except Exception as e: + print('error decoding message: ' + str(e)); def found_terminator(self): self.log.debug('<< %s' % self.data) -- cgit v1.2.3 From a9633ea16310f99c7a39dcd8c4a1c7bb05326135 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:04:16 +0100 Subject: ircasy: new nickinuse function --- Reaktor/IRC/ircasy.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index ac071013..4dfff390 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -176,8 +176,9 @@ class asybot(asychat): pass def on_nickinuse(self, prefix, command, params, rest): - _, nickname, int, _ = split('^.*[^0-9]([0-9]+)$', self.nickname) \ - if search('[0-9]$', self.nickname) \ - else ['', self.nickname, 0, ''] - self.nickname = nickname + str(int + 1) - self.handle_connect() + regex = re.search('(\d+)$', self.nickname) + if regex: + theint = int(regex.group(0)) + self.nickname = self.nickname.strip(theint) + str(theint + 1) + else self.nickname = self.nickname + '0' + self.handle_connect() -- cgit v1.2.3 From 94751bf732ad1268e6885db8bd03b054a81f9a20 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:17:29 +0100 Subject: ircasy: fix nickinuse --- Reaktor/IRC/ircasy.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 4dfff390..5a07e8fc 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -178,7 +178,8 @@ class asybot(asychat): def on_nickinuse(self, prefix, command, params, rest): regex = re.search('(\d+)$', self.nickname) if regex: - theint = int(regex.group(0)) - self.nickname = self.nickname.strip(theint) + str(theint + 1) - else self.nickname = self.nickname + '0' + theint = int(regex.group(0)) + self.nickname = self.nickname.strip(theint) + str(theint + 1) + else: + self.nickname = self.nickname + '0' self.handle_connect() -- cgit v1.2.3 From aed82c8e85ae193a575282123ebb808899c696f1 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:18:42 +0100 Subject: ircasy: more fix(drunk) --- Reaktor/IRC/ircasy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 5a07e8fc..c62beee4 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -176,7 +176,7 @@ class asybot(asychat): pass def on_nickinuse(self, prefix, command, params, rest): - regex = re.search('(\d+)$', self.nickname) + regex = search('(\d+)$', self.nickname) if regex: theint = int(regex.group(0)) self.nickname = self.nickname.strip(theint) + str(theint + 1) -- cgit v1.2.3 From 6c1d0f30624905e2d53d2f7a09f935b91b5a2dc1 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 15 Mar 2014 01:19:42 +0100 Subject: ircasy: debugging through git is fine --- Reaktor/IRC/ircasy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index c62beee4..57ec9189 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -179,7 +179,7 @@ class asybot(asychat): regex = search('(\d+)$', self.nickname) if regex: theint = int(regex.group(0)) - self.nickname = self.nickname.strip(theint) + str(theint + 1) + self.nickname = self.nickname.strip(str(theint)) + str(theint + 1) else: self.nickname = self.nickname + '0' self.handle_connect() -- cgit v1.2.3 From fdac73b61318c49b068e8ea6a771bb68a49f1272 Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 18 Mar 2014 22:11:30 +0100 Subject: add reaktor --- Reaktor/startup/systemd/system/Reaktor.service | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Reaktor/startup/systemd/system/Reaktor.service (limited to 'Reaktor') diff --git a/Reaktor/startup/systemd/system/Reaktor.service b/Reaktor/startup/systemd/system/Reaktor.service new file mode 100644 index 00000000..59d0e904 --- /dev/null +++ b/Reaktor/startup/systemd/system/Reaktor.service @@ -0,0 +1,12 @@ +[Unit] +Description=Reaktor +After=network.target nss-lookup.target + +[Service] +Type=forking +PIDFile=/run/ntpd.pid +ExecStart=/krebs/Reaktor/index +Restart=always + +[Install] +WantedBy=multi-user.target -- cgit v1.2.3 From 635beafca55b9c90e9b1a47af8806236be7c110b Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 18 Mar 2014 22:16:42 +0100 Subject: Reaktor: startup -> etc --- Reaktor/etc/conf.d/reaktor | 2 + Reaktor/etc/init.d/reaktor-debian | 102 ++++++++++++++++++++++++++++++++ Reaktor/etc/supervisor/Reaktor.conf | 6 ++ Reaktor/startup/conf.d/reaktor | 2 - Reaktor/startup/init.d/reaktor-debian | 102 -------------------------------- Reaktor/startup/supervisor/Reaktor.conf | 6 -- 6 files changed, 110 insertions(+), 110 deletions(-) create mode 100644 Reaktor/etc/conf.d/reaktor create mode 100755 Reaktor/etc/init.d/reaktor-debian create mode 100644 Reaktor/etc/supervisor/Reaktor.conf delete mode 100644 Reaktor/startup/conf.d/reaktor delete mode 100755 Reaktor/startup/init.d/reaktor-debian delete mode 100644 Reaktor/startup/supervisor/Reaktor.conf (limited to 'Reaktor') diff --git a/Reaktor/etc/conf.d/reaktor b/Reaktor/etc/conf.d/reaktor new file mode 100644 index 00000000..a4f3f8e1 --- /dev/null +++ b/Reaktor/etc/conf.d/reaktor @@ -0,0 +1,2 @@ +export target="#krebsco" +export host="irc.freenode.com" diff --git a/Reaktor/etc/init.d/reaktor-debian b/Reaktor/etc/init.d/reaktor-debian new file mode 100755 index 00000000..a94384f4 --- /dev/null +++ b/Reaktor/etc/init.d/reaktor-debian @@ -0,0 +1,102 @@ +#!/bin/sh +# uses template from /etc/init.d/skeleton +### BEGIN INIT INFO +# Provides: reaktor +# Required-Start: +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: reaktor +# Description: starts reaktor daemon +# +### END INIT INFO + +PATH=/sbin:/usr/sbin:/bin:/usr/bin +NAME=reaktor +USER=reaktor +DESC="$NAME daemon" +DAEMON=/usr/bin/python +DAEMON_DIR="/krebs/Reaktor/IRC/" +DAEMON_ARGS="${DAEMON_DIR}/asybot.py" +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +[ -x "$DAEMON" ] || exit 0 +[ -r /etc/default/$NAME ] && . /etc/default/$NAME +. /lib/init/vars.sh +. /lib/lsb/init-functions + +do_start() +{ + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon -b -d $DAEMON_DIR/.. -c $USER --start --quiet --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon -b -d $DAEMON_DIR/.. -c $USER --start --quiet --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- \ + $DAEMON_ARGS \ + || return 2 +} + +do_stop() +{ + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + start-stop-daemon --stop --retry=TERM/30/KILL/5 --pidfile $PIDFILE + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + rm -f $PIDFILE + return "$RETVAL" +} + +do_reload() { + start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE + return 0 +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; + *) log_end_msg 1 ;; + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/Reaktor/etc/supervisor/Reaktor.conf b/Reaktor/etc/supervisor/Reaktor.conf new file mode 100644 index 00000000..497066e9 --- /dev/null +++ b/Reaktor/etc/supervisor/Reaktor.conf @@ -0,0 +1,6 @@ +[program:Reaktor] +command=/usr/bin/python2.6 IRC/asybot.py +environment=host='irc.freenode.net',target='#krebsco' +redirect_stderr=true +user=reaktor +directory=/krebs/Reaktor diff --git a/Reaktor/startup/conf.d/reaktor b/Reaktor/startup/conf.d/reaktor deleted file mode 100644 index a4f3f8e1..00000000 --- a/Reaktor/startup/conf.d/reaktor +++ /dev/null @@ -1,2 +0,0 @@ -export target="#krebsco" -export host="irc.freenode.com" diff --git a/Reaktor/startup/init.d/reaktor-debian b/Reaktor/startup/init.d/reaktor-debian deleted file mode 100755 index a94384f4..00000000 --- a/Reaktor/startup/init.d/reaktor-debian +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/sh -# uses template from /etc/init.d/skeleton -### BEGIN INIT INFO -# Provides: reaktor -# Required-Start: -# Required-Stop: -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: reaktor -# Description: starts reaktor daemon -# -### END INIT INFO - -PATH=/sbin:/usr/sbin:/bin:/usr/bin -NAME=reaktor -USER=reaktor -DESC="$NAME daemon" -DAEMON=/usr/bin/python -DAEMON_DIR="/krebs/Reaktor/IRC/" -DAEMON_ARGS="${DAEMON_DIR}/asybot.py" -PIDFILE=/var/run/$NAME.pid -SCRIPTNAME=/etc/init.d/$NAME - -[ -x "$DAEMON" ] || exit 0 -[ -r /etc/default/$NAME ] && . /etc/default/$NAME -. /lib/init/vars.sh -. /lib/lsb/init-functions - -do_start() -{ - # 0 if daemon has been started - # 1 if daemon was already running - # 2 if daemon could not be started - start-stop-daemon -b -d $DAEMON_DIR/.. -c $USER --start --quiet --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ - || return 1 - start-stop-daemon -b -d $DAEMON_DIR/.. -c $USER --start --quiet --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- \ - $DAEMON_ARGS \ - || return 2 -} - -do_stop() -{ - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # 2 if daemon could not be stopped - start-stop-daemon --stop --retry=TERM/30/KILL/5 --pidfile $PIDFILE - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - rm -f $PIDFILE - return "$RETVAL" -} - -do_reload() { - start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE - return 0 -} - -case "$1" in - start) - [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - stop) - [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - status) - status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? - ;; - restart|force-reload) - log_daemon_msg "Restarting $DESC" "$NAME" - do_stop - case "$?" in - 0|1) - do_start - case "$?" in - 0) log_end_msg 0 ;; - 1) log_end_msg 1 ;; - *) log_end_msg 1 ;; - esac - ;; - *) - # Failed to stop - log_end_msg 1 - ;; - esac - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 - exit 3 - ;; -esac - -: diff --git a/Reaktor/startup/supervisor/Reaktor.conf b/Reaktor/startup/supervisor/Reaktor.conf deleted file mode 100644 index 497066e9..00000000 --- a/Reaktor/startup/supervisor/Reaktor.conf +++ /dev/null @@ -1,6 +0,0 @@ -[program:Reaktor] -command=/usr/bin/python2.6 IRC/asybot.py -environment=host='irc.freenode.net',target='#krebsco' -redirect_stderr=true -user=reaktor -directory=/krebs/Reaktor -- cgit v1.2.3 From 053f6869c91db84dd7c6d1a88e83dc4899e6fb0b Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 11:36:55 +0100 Subject: add systemd config --- Reaktor/etc/systemd/system/Reaktor.service | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Reaktor/etc/systemd/system/Reaktor.service (limited to 'Reaktor') diff --git a/Reaktor/etc/systemd/system/Reaktor.service b/Reaktor/etc/systemd/system/Reaktor.service new file mode 100644 index 00000000..e9a11d8e --- /dev/null +++ b/Reaktor/etc/systemd/system/Reaktor.service @@ -0,0 +1,11 @@ +[Unit] +Description=Reaktor +After=network.target nss-lookup.target + +[Service] +Type=forking +ExecStart=/krebs/painload/Reaktor/index +Restart=always + +[Install] +WantedBy=multi-user.target -- cgit v1.2.3 From 598fa5aa39d812a572c09d8552a653357d7dd510 Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 11:44:17 +0100 Subject: Reaktor:systemd for users --- Reaktor/etc/systemd/system/Reaktor.service | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/etc/systemd/system/Reaktor.service b/Reaktor/etc/systemd/system/Reaktor.service index e9a11d8e..c3dc2f78 100644 --- a/Reaktor/etc/systemd/system/Reaktor.service +++ b/Reaktor/etc/systemd/system/Reaktor.service @@ -1,9 +1,10 @@ [Unit] -Description=Reaktor +Description=Reaktor for user %i After=network.target nss-lookup.target [Service] Type=forking +User=%i ExecStart=/krebs/painload/Reaktor/index Restart=always -- cgit v1.2.3 From d54b633fa363f4c04c77369b1add4c9120dbbba0 Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 12:23:31 +0100 Subject: filehooker: tor is only configured, not published --- Reaktor/etc/systemd/system/Reaktor.service | 1 + Reaktor/startup/systemd/system/Reaktor.service | 12 ------------ 2 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 Reaktor/startup/systemd/system/Reaktor.service (limited to 'Reaktor') diff --git a/Reaktor/etc/systemd/system/Reaktor.service b/Reaktor/etc/systemd/system/Reaktor.service index c3dc2f78..04786302 100644 --- a/Reaktor/etc/systemd/system/Reaktor.service +++ b/Reaktor/etc/systemd/system/Reaktor.service @@ -4,6 +4,7 @@ After=network.target nss-lookup.target [Service] Type=forking +#TODO - make reaktor path variable User=%i ExecStart=/krebs/painload/Reaktor/index Restart=always diff --git a/Reaktor/startup/systemd/system/Reaktor.service b/Reaktor/startup/systemd/system/Reaktor.service deleted file mode 100644 index 59d0e904..00000000 --- a/Reaktor/startup/systemd/system/Reaktor.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Reaktor -After=network.target nss-lookup.target - -[Service] -Type=forking -PIDFile=/run/ntpd.pid -ExecStart=/krebs/Reaktor/index -Restart=always - -[Install] -WantedBy=multi-user.target -- cgit v1.2.3 From 9acc67ee5d32dff4c6c3485a4ee4910b0be1dad4 Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 19:22:01 +0100 Subject: Reaktor: Reaktor.service -> Reaktor@ --- Reaktor/etc/systemd/system/Reaktor.service | 13 ------------- Reaktor/etc/systemd/system/Reaktor@.service | 13 +++++++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) delete mode 100644 Reaktor/etc/systemd/system/Reaktor.service create mode 100644 Reaktor/etc/systemd/system/Reaktor@.service (limited to 'Reaktor') diff --git a/Reaktor/etc/systemd/system/Reaktor.service b/Reaktor/etc/systemd/system/Reaktor.service deleted file mode 100644 index 04786302..00000000 --- a/Reaktor/etc/systemd/system/Reaktor.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=Reaktor for user %i -After=network.target nss-lookup.target - -[Service] -Type=forking -#TODO - make reaktor path variable -User=%i -ExecStart=/krebs/painload/Reaktor/index -Restart=always - -[Install] -WantedBy=multi-user.target diff --git a/Reaktor/etc/systemd/system/Reaktor@.service b/Reaktor/etc/systemd/system/Reaktor@.service new file mode 100644 index 00000000..04786302 --- /dev/null +++ b/Reaktor/etc/systemd/system/Reaktor@.service @@ -0,0 +1,13 @@ +[Unit] +Description=Reaktor for user %i +After=network.target nss-lookup.target + +[Service] +Type=forking +#TODO - make reaktor path variable +User=%i +ExecStart=/krebs/painload/Reaktor/index +Restart=always + +[Install] +WantedBy=multi-user.target -- cgit v1.2.3 From dac1785de2a5f1217f6e47b765553ad3f277d0cc Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 19:35:54 +0100 Subject: add shebang to reaktor.py --- Reaktor/IRC/reaktor.py | 1 + 1 file changed, 1 insertion(+) (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 990d47e5..4fb8f75c 100644 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python import os from ircasy import asybot from asyncore import loop -- cgit v1.2.3 From d041405044765ff8da8932d613c8ac3be37dd765 Mon Sep 17 00:00:00 2001 From: makefu Date: Wed, 19 Mar 2014 20:51:52 +0100 Subject: fix reaktor systemd startup --- Reaktor/IRC/reaktor.py | 0 Reaktor/etc/systemd/system/Reaktor@.service | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 Reaktor/IRC/reaktor.py (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py old mode 100644 new mode 100755 diff --git a/Reaktor/etc/systemd/system/Reaktor@.service b/Reaktor/etc/systemd/system/Reaktor@.service index 04786302..ad2a9d91 100644 --- a/Reaktor/etc/systemd/system/Reaktor@.service +++ b/Reaktor/etc/systemd/system/Reaktor@.service @@ -3,7 +3,7 @@ Description=Reaktor for user %i After=network.target nss-lookup.target [Service] -Type=forking +Type=normal #TODO - make reaktor path variable User=%i ExecStart=/krebs/painload/Reaktor/index -- cgit v1.2.3 From aa8ca43e7bb2aef9134b227c24c473eda0615a4e Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 21 Mar 2014 23:47:03 +0100 Subject: filehooker:lib/filehooker chown shares after mount --- Reaktor/etc/systemd/system/Reaktor@.service | 1 + 1 file changed, 1 insertion(+) (limited to 'Reaktor') diff --git a/Reaktor/etc/systemd/system/Reaktor@.service b/Reaktor/etc/systemd/system/Reaktor@.service index ad2a9d91..565368b3 100644 --- a/Reaktor/etc/systemd/system/Reaktor@.service +++ b/Reaktor/etc/systemd/system/Reaktor@.service @@ -8,6 +8,7 @@ Type=normal User=%i ExecStart=/krebs/painload/Reaktor/index Restart=always +RestartSec=3 [Install] WantedBy=multi-user.target -- cgit v1.2.3 From 2d1b9414edc8aa57adbe9ac547292921936d874a Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 09:46:43 +0100 Subject: add eloop to IRc/reaktor --- Reaktor/IRC/reaktor.py | 14 ++++++++++++-- Reaktor/config.py | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 4fb8f75c..3fcedf60 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -18,6 +18,7 @@ hdlr.setFormatter(formatter) log.addHandler(hdlr) logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) +restart_timeout = getconf('irc_restart_timeout') or 5 class Reaktor(asybot): def __init__(self): @@ -68,5 +69,14 @@ class Reaktor(asybot): self.ME(target, 'mimimi') if __name__ == "__main__": - Reaktor() - loop() + while True: + try: + Reaktor() + loop() + except Exception as e: + from time import sleep + log.error("Something went wrong when running Reaktor, \ + waiting for %d seconds" % restart_timeout) + log.debug("Exception: %s" % str(e)) + sleep(restart_timeout) + diff --git a/Reaktor/config.py b/Reaktor/config.py index 2dd6ac2f..928c49d7 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -10,6 +10,7 @@ irc_kill_timeout = 360 irc_nickname = name irc_server = 'irc.freenode.org' irc_port = 6667 +#irc_restart_timeout = 5 irc_channels = [ '#krebs' ] -- cgit v1.2.3 From 5d778bfb0fadd073e1e5ff324f00a2ea460ba843 Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 14:46:14 +0100 Subject: Reaktor: answer to user on /query --- Reaktor/IRC/reaktor.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 3fcedf60..7ef8d70d 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -44,6 +44,11 @@ class Reaktor(asybot): env = {} env['_from'] = prefix.split('!', 1)[0] + log.debug('self:' +self.nickname) + 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: -- cgit v1.2.3 From c5accb6ea72ac9612dddf37541661fa544d5b872 Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 15:35:52 +0100 Subject: add authentication to Reaktor using /query identify configuration contains commands and public_commands --- Reaktor/IRC/reaktor.py | 27 ++++++++++++++++++++++++--- Reaktor/auth.lst | 1 + Reaktor/commands/caps | 3 ++- Reaktor/commands/identify | 22 ++++++++++++++++++++++ Reaktor/config.py | 17 ++++++++++++----- 5 files changed, 61 insertions(+), 9 deletions(-) create mode 100755 Reaktor/auth.lst create mode 100755 Reaktor/commands/identify (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 7ef8d70d..e73a3d79 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/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) - diff --git a/Reaktor/auth.lst b/Reaktor/auth.lst new file mode 100755 index 00000000..8b137891 --- /dev/null +++ b/Reaktor/auth.lst @@ -0,0 +1 @@ + diff --git a/Reaktor/commands/caps b/Reaktor/commands/caps index c47319f5..d0245575 100755 --- a/Reaktor/commands/caps +++ b/Reaktor/commands/caps @@ -9,4 +9,5 @@ def load_config(filename): return imp.load_module(modname, file, pathname, description) config = load_config(os.environ['config_filename']) -print(' '.join(filter(None,[ x.get('capname',None) for x in config.commands]))) +print('Private: '+' '.join(filter(None,[ x.get('capname',None) for x in config.commands]))) +print('Public: '+' '.join(filter(None,[ x.get('capname',None) for x in config.public_commands]))) diff --git a/Reaktor/commands/identify b/Reaktor/commands/identify new file mode 100755 index 00000000..c2fb2c58 --- /dev/null +++ b/Reaktor/commands/identify @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import imp +import os,sys + +def load_config(filename): + dirname = os.path.dirname(filename) + modname, ext = os.path.splitext(os.path.basename(filename)) + file, pathname, description = imp.find_module(modname, [ dirname ]) + return imp.load_module(modname, file, pathname, description) + +config = load_config(os.environ['config_filename']) + +with open(config.admin_file) as f: + for line in f: + nick,secret = line.split() + if sys.argv[1] == secret: + print("identified you as %s!"%nick) + with open(config.auth_file,'a+') as g: + g.write(os.environ['_prefix'] +"\n") + sys.exit(0) + +print("unable to identify you, sorry") diff --git a/Reaktor/config.py b/Reaktor/config.py index 928c49d7..88ae837c 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -10,21 +10,21 @@ irc_kill_timeout = 360 irc_nickname = name irc_server = 'irc.freenode.org' irc_port = 6667 -#irc_restart_timeout = 5 +irc_restart_timeout = 5 irc_channels = [ '#krebs' ] - +admin_file='admin.lst' +auth_file='auth.lst' def default_command(cmd): return { 'capname': cmd, 'pattern': '^(?:' + name + '|\\*):\\s*' + cmd + '\\s*(?:\\s+(?P.*))?$', 'argv': [ 'commands/' + cmd ] } -commands = [ +public_commands = [ default_command('caps'), default_command('hello'), - default_command('reload'), default_command('badcommand'), default_command('rev'), default_command('uptime'), @@ -34,5 +34,12 @@ commands = [ 'argv': [ 'commands/respond','You are made of stupid!'] }, # "highlight" { 'pattern': '.*\\b' + name + '\\b.*', - 'argv': [ 'commands/say', 'I\'m famous' ] } + 'argv': [ 'commands/say', 'I\'m famous' ] }, + # identify via direct connect + { 'capname': 'identify', + 'pattern': 'identify' + '\\s*(?:\\s+(?P.*))?$', + 'argv' : [ 'commands/identify' ]} +] +commands = [ + default_command('reload') ] -- cgit v1.2.3 From 91ccf3c53b4186c2e30495047a3cd7a2113843db Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 21:08:20 +0100 Subject: ircasy: fix retry, because you always want retry --- Reaktor/IRC/ircasy.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 57ec9189..068cd467 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -22,10 +22,10 @@ class asybot(asychat): asychat.__init__(self) #logger magic self.log = logging.getLogger('asybot_' + nickname) - hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) - formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') - hdlr.setFormatter(formatter) - self.log.addHandler(hdlr) + #hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) + #formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') + #hdlr.setFormatter(formatter) + #self.log.addHandler(hdlr) logging.basicConfig(level = loglevel) self.nickname = nickname @@ -45,7 +45,7 @@ class asybot(asychat): else: self.hostname = nickname - self.retry = False + self.retry = True self.server = server self.port = port self.channels = channels -- cgit v1.2.3 From b49c3b339c34984b5408b18ba558e6a91fddf243 Mon Sep 17 00:00:00 2001 From: makefu Date: Tue, 25 Mar 2014 23:08:35 +0100 Subject: Reaktor: remove e-loop --- Reaktor/IRC/reaktor.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index e73a3d79..830e6a93 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -12,10 +12,10 @@ getconf = make_getconf(config_filename) import logging,logging.handlers log = logging.getLogger('asybot') -hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON) -formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') -hdlr.setFormatter(formatter) -log.addHandler(hdlr) +#hdlr = logging.handlers.SysLogHandler(address='/dev/log', facility=logging.handlers.SysLogHandler.LOG_DAEMON) +#formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') +#hdlr.setFormatter(formatter) +#log.addHandler(hdlr) logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) restart_timeout = getconf('irc_restart_timeout') or 5 @@ -96,13 +96,5 @@ class Reaktor(asybot): self.ME(target, 'mimimi') if __name__ == "__main__": - while True: - try: - Reaktor() - loop() - except Exception as e: - from time import sleep - log.error("Something went wrong when running Reaktor, \ - waiting for %d seconds" % restart_timeout) - log.debug("Exception: %s" % str(e)) - sleep(restart_timeout) + Reaktor() + loop() -- cgit v1.2.3 From b9d60ee1a0eedc17c2dc16c73f8ed0f6809de5a0 Mon Sep 17 00:00:00 2001 From: juhulian Date: Wed, 9 Apr 2014 10:30:03 +0200 Subject: add on_join --- Reaktor/IRC/ircasy.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 068cd467..b40913ce 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -113,6 +113,9 @@ class asybot(asychat): elif command == 'KICK': self.on_kick(prefix, command, params, rest) + elif command == 'JOIN': + self.on_join(prefix, command, params, rest)) + elif command == '433': # ERR_NICKNAMEINUSE, retry with another name self.on_nickinuse(prefix, command, params, rest) @@ -169,6 +172,9 @@ class asybot(asychat): for chan in params[:-1]: self.channels.remove(chan) + def on_join(self, prefix, command, params, rest): + pass + def on_privmsg(self, prefix, command, params, rest): pass -- cgit v1.2.3 From a2de1edca2b3bdfb437c295a446817ef3a42a123 Mon Sep 17 00:00:00 2001 From: juhulian Date: Wed, 9 Apr 2014 10:37:59 +0200 Subject: fix bracket by on_join --- Reaktor/IRC/ircasy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index b40913ce..9a7f44f3 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -114,7 +114,7 @@ class asybot(asychat): self.on_kick(prefix, command, params, rest) elif command == 'JOIN': - self.on_join(prefix, command, params, rest)) + self.on_join(prefix, command, params, rest) elif command == '433': # ERR_NICKNAMEINUSE, retry with another name -- cgit v1.2.3 From 01d8f1f70a889519fd181f889e070450b8e62c97 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 20 Apr 2014 12:13:33 +0200 Subject: reaktor.py: set cwd --- Reaktor/IRC/reaktor.py | 4 +++- Reaktor/config.py | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 830e6a93..b8200398 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -60,6 +60,8 @@ class Reaktor(asybot): if match.groupdict().get('args',None): myargv += shlex.split(match.groupdict()['args']) + cwd = getconf('workdir') + env = {} env['_prefix'] = prefix env['_from'] = prefix.split('!', 1)[0] @@ -74,7 +76,7 @@ class Reaktor(asybot): env['config_filename'] = os.path.abspath(config_filename) start = time() try: - p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env) + p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd) except (OSError, Exception) as error: self.ME(target, 'brain damaged') log.error('OSError@%s: %s' % (myargv, error)) diff --git a/Reaktor/config.py b/Reaktor/config.py index 88ae837c..88701379 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -1,9 +1,12 @@ +from os import environ debug = True # CAVEAT name should not contains regex magic name = 'crabmanner' +workdir = environ['HOME'] + '/state' + irc_alarm_timeout = 300 irc_hammer_interval = 10 irc_kill_timeout = 360 -- cgit v1.2.3 From 2fe69bee8a4207cb83e3e6ce3de74069a6e5f3b1 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 20 Apr 2014 12:24:45 +0200 Subject: reaktor.py: allow per-command environment --- Reaktor/IRC/reaktor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index b8200398..0b285a3f 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -62,7 +62,7 @@ class Reaktor(asybot): cwd = getconf('workdir') - env = {} + env = command.get('env', {}) env['_prefix'] = prefix env['_from'] = prefix.split('!', 1)[0] -- cgit v1.2.3 From 231c6e68078ea86f48d91ed065794fce52c25ac6 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 20 Apr 2014 12:30:17 +0200 Subject: reaktor.py: add on_join hook: tell NICK MSG... --- Reaktor/IRC/reaktor.py | 7 ++++++- Reaktor/commands/tell-on_join | 19 +++++++++++++++++++ Reaktor/commands/tell-on_privmsg | 17 +++++++++++++++++ Reaktor/config.py | 14 ++++++++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100755 Reaktor/commands/tell-on_join create mode 100755 Reaktor/commands/tell-on_privmsg (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 0b285a3f..5e5156ad 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -34,6 +34,10 @@ 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')) + def on_join(self, prefix, command, params, rest): + for command in getconf('on_join'): + self.execute_command(command, None, prefix, params) + def on_privmsg(self, prefix, command, params, rest): for command in getconf('commands'): y = match(command['pattern'], rest) @@ -57,7 +61,8 @@ class Reaktor(asybot): #TODO: allow only commands below ./commands/ exe = join(dirname(realpath(dirname(__file__))), command['argv'][0]) myargv = [exe] + command['argv'][1:] - if match.groupdict().get('args',None): + + if match and match.groupdict().get('args', None): myargv += shlex.split(match.groupdict()['args']) cwd = getconf('workdir') diff --git a/Reaktor/commands/tell-on_join b/Reaktor/commands/tell-on_join new file mode 100755 index 00000000..2dbff41a --- /dev/null +++ b/Reaktor/commands/tell-on_join @@ -0,0 +1,19 @@ +#! /bin/sh +set -euf + +# require flock from util-linux +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +to="$_from" + +# print messages +sed -n '/^'"$to"' /{ + s/^\([^ ]\+\) \([^ ]\+\) <\([^>]\+\)> \(.*\)/\1: \4 2-- \2, \3/p +}' "$state_file" + +# delete messages +sed -i '/^'"$to"' /{ + d +}' "$state_file" diff --git a/Reaktor/commands/tell-on_privmsg b/Reaktor/commands/tell-on_privmsg new file mode 100755 index 00000000..5d0aff41 --- /dev/null +++ b/Reaktor/commands/tell-on_privmsg @@ -0,0 +1,17 @@ +#! /bin/sh +set -euf + +# require flock from util-linux +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +from="$_prefix" +to="$1"; shift +msg="$*" +date=$(date) + +# TODO tell now, if already joined +printf '%s %s <%s> %s\n' "$to" "$from" "$date" "$msg" >> "$state_file" + +echo 'Consider it noted.' # that's what lambdabot says... diff --git a/Reaktor/config.py b/Reaktor/config.py index 88701379..db4c8a3e 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -32,6 +32,12 @@ public_commands = [ default_command('rev'), default_command('uptime'), default_command('nocommand'), + { + 'capname': 'tell', + 'pattern': '^' + name + ':\\s*' + 'tell' + '\\s*(?:\\s+(?P.*))?$', + 'argv': [ 'commands/tell-on_privmsg' ], + 'env': { 'state_file': workdir + '/tell.txt' } + }, # command not found { 'pattern': '^(?:' + name + '|\\*):.*', 'argv': [ 'commands/respond','You are made of stupid!'] }, @@ -46,3 +52,11 @@ public_commands = [ commands = [ default_command('reload') ] + +on_join = [ + { + 'capname': 'tell', + 'argv': [ 'commands/tell-on_join' ], + 'env': { 'state_file': workdir + '/tell.txt' } + } +] -- cgit v1.2.3 From 9bdee602a30f715c9ba2583d3948c360448c670b Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 25 Apr 2014 12:02:03 +0200 Subject: make config file a parameter --- Reaktor/IRC/ircasy.py | 5 ++++- Reaktor/IRC/reaktor.py | 47 +++++++++++++++++++++++++++-------------------- Reaktor/index | 2 +- 3 files changed, 32 insertions(+), 22 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 9a7f44f3..259ea98c 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -114,7 +114,10 @@ class asybot(asychat): self.on_kick(prefix, command, params, rest) elif command == 'JOIN': - self.on_join(prefix, command, params, rest) + try: + self.on_join(prefix, command, params, rest) + except: + pass elif command == '433': # ERR_NICKNAMEINUSE, retry with another name diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 5e5156ad..b53ef651 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -6,9 +6,9 @@ from translate_colors import translate_colors import shlex from re import split, search, match -config_filename = './config.py' +default_config = './config.py' from getconf import make_getconf -getconf = make_getconf(config_filename) +getconf = None import logging,logging.handlers log = logging.getLogger('asybot') @@ -16,24 +16,25 @@ log = logging.getLogger('asybot') #formatter = logging.Formatter( '%(filename)s: %(levelname)s: %(message)s') #hdlr.setFormatter(formatter) #log.addHandler(hdlr) -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): + def __init__(self,config=default_config): + self.config = config + log.info("using config file %s"%(config)) 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')) + def is_admin(self,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 + def on_join(self, prefix, command, params, rest): for command in getconf('on_join'): self.execute_command(command, None, prefix, params) @@ -42,7 +43,7 @@ class Reaktor(asybot): for command in getconf('commands'): y = match(command['pattern'], rest) if y: - if not is_admin(prefix): + if not self.is_admin(prefix): self.PRIVMSG(params,'unauthorized!') else: return self.execute_command(command, y, prefix, params) @@ -61,9 +62,11 @@ class Reaktor(asybot): #TODO: allow only commands below ./commands/ exe = join(dirname(realpath(dirname(__file__))), command['argv'][0]) myargv = [exe] + command['argv'][1:] - - if match and match.groupdict().get('args', None): - myargv += shlex.split(match.groupdict()['args']) + try: + if match and match.groupdict().get('args', None): + myargv += shlex.split(match.groupdict()['args']) + except: + log.info("cannot parse args!") cwd = getconf('workdir') @@ -78,7 +81,7 @@ class Reaktor(asybot): target.append(env['_from']) log.debug('target:' +str(target)) - env['config_filename'] = os.path.abspath(config_filename) + env['config_filename'] = os.path.abspath(self.config) start = time() try: p = popen(myargv, bufsize=1, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd) @@ -103,5 +106,9 @@ class Reaktor(asybot): self.ME(target, 'mimimi') if __name__ == "__main__": - Reaktor() + import sys + conf = sys.argv[1] if len(sys.argv) == 2 else default_config + getconf = make_getconf(conf) + logging.basicConfig(level = logging.DEBUG if getconf('debug') else logging.INFO) + Reaktor(conf) loop() diff --git a/Reaktor/index b/Reaktor/index index ac647ca3..fc59cd73 100755 --- a/Reaktor/index +++ b/Reaktor/index @@ -4,4 +4,4 @@ set -euf # cd //Reaktor cd $(dirname $(readlink -f $0)) -exec IRC/index +exec IRC/index "$@" -- cgit v1.2.3 From 3907535dd48b94b3edd5facde0245719f04effb2 Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 25 Apr 2014 12:06:50 +0200 Subject: add titlebot Reaktor configuration --- Reaktor/titlebot/commands/clear | 12 ++++++++ Reaktor/titlebot/commands/down | 2 ++ Reaktor/titlebot/commands/help | 10 ++++++ Reaktor/titlebot/commands/list | 27 +++++++++++++++++ Reaktor/titlebot/commands/new | 19 ++++++++++++ Reaktor/titlebot/commands/poll.py | 23 ++++++++++++++ Reaktor/titlebot/commands/undo | 27 +++++++++++++++++ Reaktor/titlebot/commands/up | 27 +++++++++++++++++ Reaktor/titlebot/titlebot.py | 64 +++++++++++++++++++++++++++++++++++++++ 9 files changed, 211 insertions(+) create mode 100755 Reaktor/titlebot/commands/clear create mode 100755 Reaktor/titlebot/commands/down create mode 100755 Reaktor/titlebot/commands/help create mode 100755 Reaktor/titlebot/commands/list create mode 100755 Reaktor/titlebot/commands/new create mode 100644 Reaktor/titlebot/commands/poll.py create mode 100755 Reaktor/titlebot/commands/undo create mode 100755 Reaktor/titlebot/commands/up create mode 100644 Reaktor/titlebot/titlebot.py (limited to 'Reaktor') diff --git a/Reaktor/titlebot/commands/clear b/Reaktor/titlebot/commands/clear new file mode 100755 index 00000000..e3558194 --- /dev/null +++ b/Reaktor/titlebot/commands/clear @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +import json +from os import environ +import sys +import os +# krebs polling +import poll + +f = 'suggestions.json' +title=" ".join(sys.argv[1:]) +db = poll.save_db(f,[]) +print("cleared database") diff --git a/Reaktor/titlebot/commands/down b/Reaktor/titlebot/commands/down new file mode 100755 index 00000000..8964382d --- /dev/null +++ b/Reaktor/titlebot/commands/down @@ -0,0 +1,2 @@ +#!/bin/sh +echo "not implemented" diff --git a/Reaktor/titlebot/commands/help b/Reaktor/titlebot/commands/help new file mode 100755 index 00000000..475ea98e --- /dev/null +++ b/Reaktor/titlebot/commands/help @@ -0,0 +1,10 @@ +#!/bin/sh +cat < - list all suggestions + .up NUM (NUM ...) - upvote one or more suggestions from .list + .undo NUM (NUM ...) - undo an upvote + .clear - clear the poll (auth required) +EOF + diff --git a/Reaktor/titlebot/commands/list b/Reaktor/titlebot/commands/list new file mode 100755 index 00000000..3a29919a --- /dev/null +++ b/Reaktor/titlebot/commands/list @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import json +from os import environ +import sys +import os +import poll + +f = 'suggestions.json' +title=" ".join(sys.argv[1:]) +db = poll.load_db(f) +if len(sys.argv) > 1 and ("-h" in sys.argv[1] or "usage" == sys.argv[1]): + print("""usage: list <(age|votes)> + sort by age or by votes (default: age) +""") + sys.exit(0) + +if len(sys.argv) > 1 and ("votes" in sys.argv[1]): + use = poll.sort_by_votes(db) +elif len(sys.argv) > 1 and ("age" in sys.argv[1]) or len(sys.argv) == 1: + pass +else: + print("unknown sorting method") + sys.exit(1) + +for entry in poll.sort_by_votes(db): + print("#%d %s (votes: %d)" % + (db.index(entry),entry['title'],sum(entry['votes'].values()))) diff --git a/Reaktor/titlebot/commands/new b/Reaktor/titlebot/commands/new new file mode 100755 index 00000000..7246a2b2 --- /dev/null +++ b/Reaktor/titlebot/commands/new @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +import json +from os import environ +import sys +import os +# krebs polling +import poll + +f = 'suggestions.json' +title=" ".join(sys.argv[1:]) +db = poll.load_db(f) + +suggester = environ['_from'] +if not poll.title_in_db(title,db): + db.append( { 'by': suggester, + 'votes':{},'title': title}) + print("Thank you for your suggestion '%s'!"%environ["_from"]) + print("To vote type '.up %d'"%(len(db)-1)) +poll.save_db(f,db) diff --git a/Reaktor/titlebot/commands/poll.py b/Reaktor/titlebot/commands/poll.py new file mode 100644 index 00000000..595ab269 --- /dev/null +++ b/Reaktor/titlebot/commands/poll.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +import json +def load_db(f): + try: + with open(f) as fl: + return json.load(fl) + except: + #default db is [] + return [] + +def title_in_db(t,d): + for index,entry in enumerate(d): + if t == entry['title']: + print("Title is already in list.") + print("To vote for this type '.up %d'" %index) + return True + return False +def save_db(f,db): + with open(f,"w") as x: + json.dump(db,x) + +def sort_by_votes(db): + return sorted(db,key=lambda entry:sum(entry['votes'].values()),reverse=True) diff --git a/Reaktor/titlebot/commands/undo b/Reaktor/titlebot/commands/undo new file mode 100755 index 00000000..bebd57a3 --- /dev/null +++ b/Reaktor/titlebot/commands/undo @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import json +from os import environ +import sys +import os +# krebs polling +import poll + +f = 'suggestions.json' +db = poll.load_db(f) +votes = [] +try: + votes = sys.argv[1:] +except: + print("""usage: undo number (...) + undos vote of one or more entries based on .list""") + sys.exit(1) +voter = environ['_prefix'] +for vote in votes: + try: + vote = int(vote) + del(db[vote]['votes'][voter] ) + print("undid vote by %s for #%d" %(environ['_from'],vote)) + except: + print("undo voting for #%s failed" %vote) + +poll.save_db(f,db) diff --git a/Reaktor/titlebot/commands/up b/Reaktor/titlebot/commands/up new file mode 100755 index 00000000..c9de1223 --- /dev/null +++ b/Reaktor/titlebot/commands/up @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import json +from os import environ +import sys +import os +# krebs polling +import poll + +f = 'suggestions.json' +db = poll.load_db(f) +votes = [] +try: + votes = sys.argv[1:] +except: + print("""usage: up number (...) + upvotes one or more entries based on .list""") + sys.exit(1) + +voter = environ['_prefix'] +for vote in votes: + try: + vote = int(vote) + db[vote]['votes'][voter] = 1 + except: + print("voting for #%s failed" %vote) +print("Thanks for your votes %s"%environ['_from']) +poll.save_db(f,db) diff --git a/Reaktor/titlebot/titlebot.py b/Reaktor/titlebot/titlebot.py new file mode 100644 index 00000000..d04789c3 --- /dev/null +++ b/Reaktor/titlebot/titlebot.py @@ -0,0 +1,64 @@ +from os import environ,mkdir + +debug = False + +# CAVEAT name should not contains regex magic +name = 'bgt_titlebot' + +workdir = '/tmp/state' + +try: + mkdir(workdir) +except: pass + +irc_alarm_timeout = 300 +irc_hammer_interval = 10 +irc_kill_timeout = 360 +irc_nickname = name +irc_server = 'irc.freenode.org' +irc_port = 6667 +irc_restart_timeout = 5 +irc_channels = [ + '#binaergewitter' +] + +admin_file=workdir+'/'+'admin.lst' +try: + with open(admin_file,"x"): pass +except: pass +auth_file=workdir+'/'+'auth.lst' + +def default_command(cmd): + return { + 'capname': cmd, + 'pattern': '^(?:' + name + '|\\*):\\s*' + cmd + '\\s*(?:\\s+(?P.*))?$', + 'argv': [ 'commands/' + cmd ] } +def dot_command(cmd): + return { + 'capname': cmd, + 'pattern': '\\.' + cmd + '\\s*(?:\\s+(?P.*))?$', + 'argv': [ 'titlebot/commands/' + cmd ] } + +public_commands = [ + default_command('caps'), + default_command('hello'), + default_command('badcommand'), + default_command('rev'), + default_command('uptime'), + default_command('nocommand'), + dot_command('list'), + dot_command('help'), + dot_command('up'), + dot_command('new'), + dot_command('undo'), + dot_command('down'), + # identify via direct connect + { 'capname': 'identify', + 'pattern': 'identify' + '\\s*(?:\\s+(?P.*))?$', + 'argv' : [ 'commands/identify' ]} +] +commands = [ + default_command('reload'), + dot_command('clear') +] + -- cgit v1.2.3 From 56de31fe812d338ed49d2cfbb4c5dad9761bedf0 Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 25 Apr 2014 12:12:18 +0200 Subject: add ^ --- Reaktor/titlebot/titlebot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Reaktor') diff --git a/Reaktor/titlebot/titlebot.py b/Reaktor/titlebot/titlebot.py index d04789c3..f85e69f2 100644 --- a/Reaktor/titlebot/titlebot.py +++ b/Reaktor/titlebot/titlebot.py @@ -36,7 +36,7 @@ def default_command(cmd): def dot_command(cmd): return { 'capname': cmd, - 'pattern': '\\.' + cmd + '\\s*(?:\\s+(?P.*))?$', + 'pattern': '^\\.' + cmd + '\\s*(?:\\s+(?P.*))?$', 'argv': [ 'titlebot/commands/' + cmd ] } public_commands = [ -- cgit v1.2.3 From 2ac7e46d6f242e299d2ad2a3f631dd45d3d95cba Mon Sep 17 00:00:00 2001 From: makefu Date: Fri, 25 Apr 2014 12:22:40 +0200 Subject: Reaktor:fix ^ --- Reaktor/config.py | 2 +- Reaktor/titlebot/titlebot.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/config.py b/Reaktor/config.py index db4c8a3e..0a01c5cb 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -46,7 +46,7 @@ public_commands = [ 'argv': [ 'commands/say', 'I\'m famous' ] }, # identify via direct connect { 'capname': 'identify', - 'pattern': 'identify' + '\\s*(?:\\s+(?P.*))?$', + 'pattern': '^identify' + '\\s*(?:\\s+(?P.*))?$', 'argv' : [ 'commands/identify' ]} ] commands = [ diff --git a/Reaktor/titlebot/titlebot.py b/Reaktor/titlebot/titlebot.py index d04789c3..dc4e28ae 100644 --- a/Reaktor/titlebot/titlebot.py +++ b/Reaktor/titlebot/titlebot.py @@ -33,7 +33,7 @@ def default_command(cmd): 'capname': cmd, 'pattern': '^(?:' + name + '|\\*):\\s*' + cmd + '\\s*(?:\\s+(?P.*))?$', 'argv': [ 'commands/' + cmd ] } -def dot_command(cmd): +def titlebot_cmd(cmd): return { 'capname': cmd, 'pattern': '\\.' + cmd + '\\s*(?:\\s+(?P.*))?$', @@ -46,19 +46,19 @@ public_commands = [ default_command('rev'), default_command('uptime'), default_command('nocommand'), - dot_command('list'), - dot_command('help'), - dot_command('up'), - dot_command('new'), - dot_command('undo'), - dot_command('down'), + titlebot_cmd('list'), + titlebot_cmd('help'), + titlebot_cmd('up'), + titlebot_cmd('new'), + titlebot_cmd('undo'), + titlebot_cmd('down'), # identify via direct connect { 'capname': 'identify', - 'pattern': 'identify' + '\\s*(?:\\s+(?P.*))?$', + 'pattern': '^identify' + '\\s*(?:\\s+(?P.*))?$', 'argv' : [ 'commands/identify' ]} ] commands = [ default_command('reload'), - dot_command('clear') + titlebot_cmd('clear') ] -- cgit v1.2.3 From 5efd6c0b11ce5b0ab3ec5975bfe6125af7eb6ea4 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 25 Apr 2014 12:52:05 +0200 Subject: reaktor getconf: allow default_value --- Reaktor/IRC/getconf.py | 7 +++++-- Reaktor/IRC/ircasy.py | 5 +---- Reaktor/IRC/reaktor.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/IRC/getconf.py b/Reaktor/IRC/getconf.py index f9cd4404..168c908c 100644 --- a/Reaktor/IRC/getconf.py +++ b/Reaktor/IRC/getconf.py @@ -9,14 +9,17 @@ import os def make_getconf(filename): - def getconf(prop): + def getconf(prop, default_value=None): prop_split = prop.split('.') string = '' config = load_config(filename) #imp.reload(config) tmp = config.__dict__ for pr in prop_split: - tmp = tmp[pr] + if pr in tmp: + tmp = tmp[pr] + else: + return default_value return tmp return getconf diff --git a/Reaktor/IRC/ircasy.py b/Reaktor/IRC/ircasy.py index 259ea98c..9a7f44f3 100644 --- a/Reaktor/IRC/ircasy.py +++ b/Reaktor/IRC/ircasy.py @@ -114,10 +114,7 @@ class asybot(asychat): self.on_kick(prefix, command, params, rest) elif command == 'JOIN': - try: - self.on_join(prefix, command, params, rest) - except: - pass + self.on_join(prefix, command, params, rest) elif command == '433': # ERR_NICKNAMEINUSE, retry with another name diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index b53ef651..54091c5d 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -36,7 +36,7 @@ class Reaktor(asybot): return False def on_join(self, prefix, command, params, rest): - for command in getconf('on_join'): + for command in getconf('on_join', []): self.execute_command(command, None, prefix, params) def on_privmsg(self, prefix, command, params, rest): -- cgit v1.2.3 From 2ff3166d78710db3f6346cdb743f8ff7d3e7e1a3 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 25 Apr 2014 12:58:24 +0200 Subject: reaktor config: use expanduser instead of environ --- Reaktor/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/config.py b/Reaktor/config.py index 0a01c5cb..4ca6d377 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -1,11 +1,11 @@ -from os import environ +from os.path import expanduser debug = True # CAVEAT name should not contains regex magic name = 'crabmanner' -workdir = environ['HOME'] + '/state' +workdir = expanduser('~') + '/state' irc_alarm_timeout = 300 irc_hammer_interval = 10 -- cgit v1.2.3 From 4fbc3dd22e5ee5c04fd346a9424f796e671a6f05 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 25 Apr 2014 13:08:46 +0200 Subject: reaktor: name must not be able to kill patterns --- Reaktor/config.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'Reaktor') diff --git a/Reaktor/config.py b/Reaktor/config.py index 4ca6d377..48406bf9 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -1,8 +1,8 @@ from os.path import expanduser +import re debug = True -# CAVEAT name should not contains regex magic name = 'crabmanner' workdir = expanduser('~') + '/state' @@ -19,10 +19,14 @@ irc_channels = [ ] admin_file='admin.lst' auth_file='auth.lst' + +# name_re is used, so name cannot kill our patterns below +name_re = re.escape(name) + def default_command(cmd): return { 'capname': cmd, - 'pattern': '^(?:' + name + '|\\*):\\s*' + cmd + '\\s*(?:\\s+(?P.*))?$', + 'pattern': '^(?:' + name_re + '|\\*):\\s*' + cmd + '\\s*(?:\\s+(?P.*))?$', 'argv': [ 'commands/' + cmd ] } public_commands = [ @@ -34,15 +38,15 @@ public_commands = [ default_command('nocommand'), { 'capname': 'tell', - 'pattern': '^' + name + ':\\s*' + 'tell' + '\\s*(?:\\s+(?P.*))?$', + 'pattern': '^' + name_re + ':\\s*' + 'tell' + '\\s*(?:\\s+(?P.*))?$', 'argv': [ 'commands/tell-on_privmsg' ], 'env': { 'state_file': workdir + '/tell.txt' } }, # command not found - { 'pattern': '^(?:' + name + '|\\*):.*', + { 'pattern': '^(?:' + name_re + '|\\*):.*', 'argv': [ 'commands/respond','You are