32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
|
import base64
|
||
|
import znc
|
||
|
|
||
|
class athemesasl(znc.Module):
|
||
|
module_types = [znc.CModInfo.UserModule]
|
||
|
|
||
|
def __init__(self):
|
||
|
self.description = "Atheme SASL"
|
||
|
|
||
|
def OnServerCapAvailable(self, scap):
|
||
|
self.cookie = self.getCookie()
|
||
|
self.username = self.GetUser().GetUserName()
|
||
|
return scap == "sasl"
|
||
|
|
||
|
def OnServerCapResult(self, scap, success):
|
||
|
if scap == "sasl":
|
||
|
if success:
|
||
|
self.PutIRC("AUTHENTICATE AUTHCOOKIE")
|
||
|
self.PutIRC("AUTHENTICATE " +
|
||
|
self.makeSaslAuthString(self.username, self.cookie))
|
||
|
self.PutUser(":bnc.yolo-swag.com NOTICE * :*** Authenticated over Atheme XMLRPC")
|
||
|
|
||
|
def makeSaslAuthString(self, username, cookie):
|
||
|
return (base64.b64encode(bytes("%s\0%s\0%s" %
|
||
|
(username, username, cookie), "utf-8"))).decode("utf-8")
|
||
|
|
||
|
def getCookie(self):
|
||
|
with open("/tmp/znc-cookie-%s" %
|
||
|
self.GetUser().GetUserName(), "r") as fin:
|
||
|
return fin.readline()
|
||
|
|