Mark Veidemanis
6ad6d6dc50
Fix a bug where the channel allocation algorithm failed due to necessary relays not having been provisioned yet. Passed the newly created relay numbers to the allocation function and assumed their CHANMAX would be the same as all other relays for the same network.
74 lines
3.1 KiB
Python
74 lines
3.1 KiB
Python
import main
|
|
from core.bot import deliverRelayCommands
|
|
from utils.logging.log import *
|
|
from twisted.internet import reactor
|
|
|
|
def provisionUserData(num, nick, altnick, ident, realname, unused): # last field is password,
|
|
# which we don't want to inherit here, but still want to use * expansion, so this is a bit of a hack
|
|
commands = {}
|
|
commands["controlpanel"] = []
|
|
commands["controlpanel"].append("AddUser %s %s" % (nick, main.config["Relay"]["Password"]))
|
|
commands["controlpanel"].append("Set Nick %s %s" % (nick, nick))
|
|
commands["controlpanel"].append("Set Altnick %s %s" % (nick, altnick))
|
|
commands["controlpanel"].append("Set Ident %s %s" % (nick, ident))
|
|
commands["controlpanel"].append("Set RealName %s %s" % (nick, realname))
|
|
deliverRelayCommands(num, commands)
|
|
return
|
|
|
|
def provisionNetworkData(num, nick, network, host, port, security, auth, password):
|
|
commands = {}
|
|
stage2commands = {}
|
|
stage2commands["status"] = []
|
|
commands["controlpanel"] = []
|
|
commands["controlpanel"].append("AddNetwork %s %s" % (nick, network))
|
|
if security == "ssl":
|
|
commands["controlpanel"].append("SetNetwork TrustAllCerts %s %s true" % (nick, network)) # Don't judge me
|
|
commands["controlpanel"].append("AddServer %s %s %s +%s" % (nick, network, host, port))
|
|
elif security == "plain":
|
|
commands["controlpanel"].append("AddServer %s %s %s %s" % (nick, network, host, port))
|
|
if auth == "sasl":
|
|
stage2commands["sasl"] = []
|
|
stage2commands["status"].append("LoadMod sasl")
|
|
stage2commands["sasl"].append("Mechanism plain")
|
|
stage2commands["sasl"].append("Set %s %s" % (nick, password))
|
|
elif auth == "ns":
|
|
stage2commands["nickserv"] = []
|
|
stage2commands["status"].append("LoadMod nickserv")
|
|
stage2commands["nickserv"].append("Set %s" % password)
|
|
if not main.config["ConnectOnCreate"]:
|
|
stage2commands["status"].append("Disconnect")
|
|
if main.config["Toggles"]["CycleChans"]:
|
|
stage2commands["status"].append("LoadMod disconkick")
|
|
stage2commands["status"].append("LoadMod chansaver")
|
|
deliverRelayCommands(num, commands,
|
|
stage2=[[nick+"/"+network, stage2commands]])
|
|
return
|
|
|
|
def provisionRelayForNetwork(num, alias, network):
|
|
provisionNetworkData(num, alias, network,
|
|
main.network[network].host,
|
|
main.network[network].port,
|
|
main.network[network].security,
|
|
main.network[network].auth,
|
|
main.network[network].aliases[num]["password"])
|
|
return
|
|
|
|
def provisionRelay(num, network):
|
|
aliasObj = main.alias[num]
|
|
alias = aliasObj["nick"]
|
|
provisionUserData(num, *aliasObj.values())
|
|
reactor.callLater(5, provisionRelayForNetwork, num, alias, network)
|
|
if main.config["ConnectOnCreate"]:
|
|
reactor.callLater(10, main.network[network].start_bot, num)
|
|
return
|
|
|
|
def provisionMultipleRelays(net, relaysNeeded):
|
|
numsProvisioned = []
|
|
for i in range(relaysNeeded):
|
|
num, alias = main.network[net].add_relay()
|
|
numsProvisioned.append(num)
|
|
provisionRelay(num, net)
|
|
main.saveConf("network")
|
|
return numsProvisioned
|
|
|