dockerfiles/net/hosted-znc/athemeauth.py

104 lines
3.2 KiB
Python

from xmlrpc.client import ServerProxy, Fault
import znc
class Atheme:
def __init__(self, url):
self.url = url
self.proxy = ServerProxy(url)
self.cookie = "*"
self.username = "*"
self._privset = None
def login(self, username, password):
self.username = username
self.cookie = self.proxy.atheme.login(username, password)
self.privs()
def privs(self):
if self._privset is not None:
return self._privset
self._privset = self.proxy.atheme.privset(self.cookie, self.username).split()
return self._privset
class athemeauth(znc.Module):
module_types = [znc.CModInfo.GlobalModule]
def __init__(self):
pass
def OnLoginAttempt(self, auth):
username = auth.GetUsername()
password = auth.GetPassword()
atheme = Atheme("http://173.10.70.249:8069/xmlrpc")
user = znc.CZNC.Get().FindUser(username)
if user != None:
if user.GetPass() != "::":
#Allow normal ZNC accounts to log in
return znc.CONTINUE
try:
atheme.login(username, password)
except Fault:
return znc.CONTINUE
if user == None:
myuser = znc.CUser(username)
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Creating account for %s...\r\n" % username)
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Thank you for supporting ShadowNET!\r\n")
baseuser = znc.CZNC.Get().FindUser("scrub")
baseuser.thisown = 0
s = znc.String()
s.thisown = 0
if not myuser.Clone(baseuser, s, False):
print("WTF?", s)
return znc.CONTINUE
if not znc.CZNC.Get().AddUser(myuser, s):
print("WTF?", s)
return znc.CONTINUE
user = myuser
user.SetPass("::", znc.CUser.HASH_MD5, "::")
#this is a new user, set up stuff
user.SetNick(username)
user.SetAltNick(username + "`")
user.SetIdent(username[:8])
user.SetRealName("ShadowNET hosted bnc user %s" % username)
user.SetDenySetBindHost(True)
user.SetQuitMsg("Shutting down!")
user.SetMaxNetworks(1)
user.SetAdmin(False)
#They are going to want a network to talk on.
user.AddNetwork("ShadowNET", s)
network = user.FindNetwork("ShadowNET")
network.AddServer("cyka.yolo-swag.com +6697")
network.AddChan("#lobby", True)
network.AddChan("#bnc", True)
network.JoinChans()
fout = open("/tmp/znc-cookie-%s" % username, "w")
fout.write(atheme.cookie)
fout.close()
znc.CZNC.Get().WriteConfig()
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Welcome to the ShadowNET BNC %s!\r\n" % username)
auth.GetSocket().Write(":bnc.yolo-swag.com NOTICE * :*** Your IP address is %s and may be checked for proxies.\r\n" % auth.GetRemoteIP())
auth.AcceptLogin(user)
user.thisown = 0
return znc.HALT