diff options
| author | 2018-07-15 23:56:06 +0100 | |
|---|---|---|
| committer | 2018-07-15 23:56:06 +0100 | |
| commit | 2012a388dac6cbb31945ff04d31a11da19f6e4b0 (patch) | |
| tree | 4d5a8f5f7c8f87aa777ad828c957aeace7126e4e /modules | |
| parent | fix print_activity still using old EventManager priority location (diff) | |
| signature | ||
move sasl logic to it's own module
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/channel_save.py | 44 | ||||
| -rw-r--r-- | modules/nickserv.py | 41 | ||||
| -rw-r--r-- | modules/sasl.py | 33 |
3 files changed, 57 insertions, 61 deletions
diff --git a/modules/channel_save.py b/modules/channel_save.py index 29114cd4..4b6254f2 100644 --- a/modules/channel_save.py +++ b/modules/channel_save.py @@ -2,36 +2,34 @@ class Module(object): def __init__(self, bot): - bot.events.on("self").on("part").hook(self.on_self_part) - bot.events.on("self").on("join").hook(self.on_join) - bot.events.on("self").on("kick").hook(self.on_kick) - bot.events.on("received").on("numeric").on("366").hook( - self.on_identify_trigger) - bot.events.on("received").on("numeric").on("001").hook( - self.on_identify_trigger) + bot.events.on("received.numeric.001").hook( + self.on_connect) + bot.events.on("self.join").hook(self.on_join) + bot.events.on("self.kick").hook(self.on_kick) - def on_self_part(self, event): - pass + def on_connect(self, event): + channels = event["server"].get_setting("autojoin", []) + chan_keys = event["server"].get_setting("channel_keys", {}) + channels_sorted = sorted(channels, + key=lambda x: 0 if x in chan_keys else 1) + + keys_sorted = list(map(lambda x: x[1], + sorted(chan_keys.items(), + key=lambda x: channels_sorted.index(x[0])))) + + for i in range(len(channels_sorted)): + channel = channels_sorted[i] + key = None if len(keys_sorted) <= i else keys_sorted[i] + event["server"].attempted_join[channel] = key + + event["server"].send_join( + ",".join(channels_sorted), ",".join(keys_sorted)) def on_join(self, event): channels = set(event["server"].get_setting("autojoin", [])) channels.add(event["channel"].name) event["server"].set_setting("autojoin", list(channels)) - def on_identify_trigger(self, event): - if event["number"]=="001" and not event["server"].sasl_success: return - if event["line_split"][3].lower() == "#bitbot" or event["number"]=="001": - channels = event["server"].get_setting("autojoin", []) - chan_keys = event["server"].get_setting("channel_keys", {}) - channels_sorted = sorted(channels, - key=lambda x: 0 if x in chan_keys else 1) - - keys_sorted = map(lambda x: x[1], - sorted(chan_keys.items(), - key=lambda x: channels_sorted.index(x[0]))) - event["server"].send_join( - ",".join(channels_sorted), ",".join(keys_sorted)) - def on_kick(self, event): channels = event["server"].get_setting("autojoin", []) if event["channel"].name in channels: diff --git a/modules/nickserv.py b/modules/nickserv.py index 8e811c65..7abd67e3 100644 --- a/modules/nickserv.py +++ b/modules/nickserv.py @@ -1,27 +1,19 @@ import base64 +import EventManager class Module(object): def __init__(self, bot): - bot.events.on("new").on("server").hook(self.on_new_server) bot.events.on("received").on("numeric").on("001" - ).hook(self.on_connect) + ).hook(self.on_connect, priority=EventManager.PRIORITY_URGENT) bot.events.on("received").on("command").on("setnickserv" ).hook(self.set_nickserv, min_args=1, permission="setnickserv", help="Set bot's nickserv password", usage="<password>", private_only=True) - bot.events.on("received").on("cap").hook(self.on_cap) - bot.events.on("received").on("authenticate").hook(self.on_authenticate) - for code in ["902", "903", "904", "905", "906", "907", "908"]: - bot.events.on("received").on("numeric").on(code).hook(self.on_90x) - - def on_new_server(self, event): - event["server"].attempted_auth = False - event["server"].sasl_success = False def on_connect(self, event): nickserv_password = event["server"].get_setting( "nickserv-password") - if nickserv_password and not event["server"].sasl_success: + if nickserv_password: event["server"].attempted_auth = True event["server"].send_message("nickserv", "identify %s" % nickserv_password) @@ -30,30 +22,3 @@ class Module(object): nickserv_password = event["args"] event["server"].set_setting("nickserv-password", nickserv_password) event["stdout"].write("Nickserv password saved") - - def on_cap(self, event): - if event["subcommand"] == "NAK": - event["server"].send_capability_end() - elif event["subcommand"] == "ACK": - if not "sasl" in event["capabilities"]: - event["server"].send_capability_end() - else: - event["server"].send_authenticate("PLAIN") - else: - pass - - def on_authenticate(self, event): - if event["message"] != "+": - event["server"].send_authenticate("*") - else: - nick = event["server"].original_nickname - password = event["server"].get_setting("nickserv-password") - event["server"].attempted_auth = True - event["server"].send_authenticate( - base64.b64encode(("%s\0%s\0%s" % (nick, nick, password)).encode("utf8")).decode("utf8") - ) - - def on_90x(self, event): - if event["number"]=="903": - event["server"].sasl_success = True - event["server"].send_capability_end() diff --git a/modules/sasl.py b/modules/sasl.py new file mode 100644 index 00000000..afe48522 --- /dev/null +++ b/modules/sasl.py @@ -0,0 +1,33 @@ +import base64 + +class Module(object): + def __init__(self, bot): + self.bot = bot + bot.events.on("received").on("cap").hook(self.on_cap) + bot.events.on("received").on("authenticate").hook(self.on_authenticate) + bot.events.on("received").on("numeric").on( + "902", "903", "904", "905", "906", "907", "908").hook(self.on_90x) + + def on_cap(self, event): + if event["subcommand"] == "NAK": + event["server"].send_capability_end() + elif event["subcommand"] == "ACK": + if not "sasl" in event["capabilities"]: + event["server"].send_capability_end() + else: + event["server"].send_authenticate("PLAIN") + + def on_authenticate(self, event): + if event["message"] != "+": + event["server"].send_authenticate("*") + else: + sasl_nick, sasl_pass = event["server"].get_setting("sasl") + auth_text = "%s\0%s\0%s" % ( + sasl_nick, sasl_nick, sasl_pass) + auth_text = base64.b64encode(auth_text.encode("utf8")) + auth_text = auth_text.decode("utf8") + event["server"].send_authenticate(auth_text) + + def on_90x(self, event): + event["server"].send_capability_end() + |
