Reformat project
This commit is contained in:
parent
9d4d31fdc2
commit
760e43b59a
|
@ -1,13 +1,21 @@
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/ambv/black
|
- repo: https://github.com/psf/black
|
||||||
rev: 22.3.0
|
rev: 22.6.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: black
|
||||||
args:
|
exclude: ^core/migrations
|
||||||
- --line-length=120
|
- repo: https://github.com/PyCQA/isort
|
||||||
- repo: https://gitlab.com/pycqa/flake8
|
rev: 5.10.1
|
||||||
|
hooks:
|
||||||
|
- id: isort
|
||||||
|
- repo: https://github.com/PyCQA/flake8
|
||||||
rev: 4.0.1
|
rev: 4.0.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: flake8
|
- id: flake8
|
||||||
args:
|
args: [--max-line-length=88]
|
||||||
- "--max-line-length=120"
|
exclude: ^core/migrations
|
||||||
|
- repo: https://github.com/thibaudcolas/curlylint
|
||||||
|
rev: v0.13.1
|
||||||
|
hooks:
|
||||||
|
- id: curlylint
|
||||||
|
files: \.(html|sls)$
|
||||||
|
|
|
@ -6,7 +6,9 @@ class AdmallCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.admall(*args)
|
self.admall(*args)
|
||||||
|
|
||||||
def admall(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def admall(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length > 2:
|
if length > 2:
|
||||||
for i in main.network.keys():
|
for i in main.network.keys():
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import main
|
|
||||||
from yaml import dump
|
from yaml import dump
|
||||||
|
|
||||||
|
import main
|
||||||
from modules import alias
|
from modules import alias
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +8,9 @@ class AliasCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.alias(*args)
|
self.alias(*args)
|
||||||
|
|
||||||
def alias(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def alias(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
info(dump(main.alias))
|
info(dump(main.alias))
|
||||||
|
|
|
@ -6,7 +6,9 @@ class AllCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.all(*args)
|
self.all(*args)
|
||||||
|
|
||||||
def all(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def all(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length > 2:
|
if length > 2:
|
||||||
for i in main.network.keys():
|
for i in main.network.keys():
|
||||||
|
@ -15,7 +17,10 @@ class AllCommand:
|
||||||
net = main.network[i].relays[x]["net"]
|
net = main.network[i].relays[x]["net"]
|
||||||
alias = main.alias[x]["nick"]
|
alias = main.alias[x]["nick"]
|
||||||
commands = {spl[1]: [" ".join(spl[2:])]}
|
commands = {spl[1]: [" ".join(spl[2:])]}
|
||||||
success("Sending commands to relay %s as user %s" % (num, alias + "/" + net))
|
success(
|
||||||
|
"Sending commands to relay %s as user %s"
|
||||||
|
% (num, alias + "/" + net)
|
||||||
|
)
|
||||||
deliverRelayCommands(num, commands, user=alias + "/" + net)
|
deliverRelayCommands(num, commands, user=alias + "/" + net)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -6,7 +6,9 @@ class AllcCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.allc(*args)
|
self.allc(*args)
|
||||||
|
|
||||||
def allc(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def allc(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length > 4:
|
if length > 4:
|
||||||
targets = []
|
targets = []
|
||||||
|
@ -20,7 +22,8 @@ class AllcCommand:
|
||||||
[
|
[
|
||||||
targets.append((i, x))
|
targets.append((i, x))
|
||||||
for x in main.alias.keys()
|
for x in main.alias.keys()
|
||||||
if main.alias[x]["nick"] == spl[2] and x in main.network[i].aliases.keys()
|
if main.alias[x]["nick"] == spl[2]
|
||||||
|
and x in main.network[i].aliases.keys()
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
incUsage("allc")
|
incUsage("allc")
|
||||||
|
@ -33,7 +36,10 @@ class AllcCommand:
|
||||||
num = i[1]
|
num = i[1]
|
||||||
alias = main.alias[num]["nick"]
|
alias = main.alias[num]["nick"]
|
||||||
commands = {spl[3]: [" ".join(spl[4:])]}
|
commands = {spl[3]: [" ".join(spl[4:])]}
|
||||||
success("Sending commands to relay %i as user %s" % (num, alias + "/" + net))
|
success(
|
||||||
|
"Sending commands to relay %i as user %s"
|
||||||
|
% (num, alias + "/" + net)
|
||||||
|
)
|
||||||
deliverRelayCommands(num, commands, user=alias + "/" + net)
|
deliverRelayCommands(num, commands, user=alias + "/" + net)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -5,7 +5,9 @@ class AuthcheckCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.authcheck(*args)
|
self.authcheck(*args)
|
||||||
|
|
||||||
def authcheck(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def authcheck(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
results = []
|
results = []
|
||||||
|
@ -13,7 +15,9 @@ class AuthcheckCommand:
|
||||||
num = main.IRCPool[i].num
|
num = main.IRCPool[i].num
|
||||||
net = main.IRCPool[i].net
|
net = main.IRCPool[i].net
|
||||||
if not main.IRCPool[i].authenticated:
|
if not main.IRCPool[i].authenticated:
|
||||||
results.append("%s - %s: %s" % (net, num, main.alias[num]["nick"]))
|
results.append(
|
||||||
|
"%s - %s: %s" % (net, num, main.alias[num]["nick"])
|
||||||
|
)
|
||||||
info("\n".join(results))
|
info("\n".join(results))
|
||||||
return
|
return
|
||||||
elif length == 2:
|
elif length == 2:
|
||||||
|
@ -27,7 +31,9 @@ class AuthcheckCommand:
|
||||||
if not net == spl[1]:
|
if not net == spl[1]:
|
||||||
continue
|
continue
|
||||||
if not main.IRCPool[i].authenticated:
|
if not main.IRCPool[i].authenticated:
|
||||||
results.append("%s - %s: %s" % (net, num, main.alias[num]["nick"]))
|
results.append(
|
||||||
|
"%s - %s: %s" % (net, num, main.alias[num]["nick"])
|
||||||
|
)
|
||||||
info("\n".join(results))
|
info("\n".join(results))
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -6,7 +6,9 @@ class AutoCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.auto(*args)
|
self.auto(*args)
|
||||||
|
|
||||||
def auto(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def auto(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
for i in main.network.keys():
|
for i in main.network.keys():
|
||||||
|
@ -14,9 +16,15 @@ class AutoCommand:
|
||||||
info("Skipping %s - first relay exists" % i)
|
info("Skipping %s - first relay exists" % i)
|
||||||
else:
|
else:
|
||||||
num, alias = main.network[i].add_relay(1)
|
num, alias = main.network[i].add_relay(1)
|
||||||
success("Successfully created first relay on network %s with alias %s" % (i, alias))
|
success(
|
||||||
|
"Successfully created first relay on network %s with alias %s"
|
||||||
|
% (i, alias)
|
||||||
|
)
|
||||||
provision.provisionRelay(num, i)
|
provision.provisionRelay(num, i)
|
||||||
success("Started provisioning network %s on first relay for alias %s" % (i, alias))
|
success(
|
||||||
|
"Started provisioning network %s on first relay for alias %s"
|
||||||
|
% (i, alias)
|
||||||
|
)
|
||||||
main.saveConf("network")
|
main.saveConf("network")
|
||||||
return
|
return
|
||||||
elif length == 2:
|
elif length == 2:
|
||||||
|
@ -27,9 +35,15 @@ class AutoCommand:
|
||||||
failure("First relay exists on %s" % spl[1])
|
failure("First relay exists on %s" % spl[1])
|
||||||
return
|
return
|
||||||
num, alias = main.network[spl[1]].add_relay(1)
|
num, alias = main.network[spl[1]].add_relay(1)
|
||||||
success("Successfully created relay %i on network %s with alias %s" % (num, spl[1], alias))
|
success(
|
||||||
|
"Successfully created relay %i on network %s with alias %s"
|
||||||
|
% (num, spl[1], alias)
|
||||||
|
)
|
||||||
provision.provisionRelay(num, spl[1])
|
provision.provisionRelay(num, spl[1])
|
||||||
success("Started provisioning network %s on relay %s for alias %s" % (spl[1], num, alias))
|
success(
|
||||||
|
"Started provisioning network %s on relay %s for alias %s"
|
||||||
|
% (spl[1], num, alias)
|
||||||
|
)
|
||||||
main.saveConf("network")
|
main.saveConf("network")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
import main
|
|
||||||
from yaml import dump
|
from yaml import dump
|
||||||
|
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
class BlacklistCommand:
|
class BlacklistCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.blacklist(*args)
|
self.blacklist(*args)
|
||||||
|
|
||||||
def blacklist(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def blacklist(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
info(dump(main.blacklist))
|
info(dump(main.blacklist))
|
||||||
|
|
|
@ -6,7 +6,9 @@ class ChansCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.chans(*args)
|
self.chans(*args)
|
||||||
|
|
||||||
def chans(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def chans(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if len(spl) < 2:
|
if len(spl) < 2:
|
||||||
incUsage("chans")
|
incUsage("chans")
|
||||||
|
|
|
@ -6,7 +6,9 @@ class CmdCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.cmd(*args)
|
self.cmd(*args)
|
||||||
|
|
||||||
def cmd(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def cmd(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length > 4:
|
if length > 4:
|
||||||
if not spl[1].isdigit():
|
if not spl[1].isdigit():
|
||||||
|
|
|
@ -6,7 +6,9 @@ class ConfirmCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.confirm(*args)
|
self.confirm(*args)
|
||||||
|
|
||||||
def confirm(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def confirm(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 4:
|
if length == 4:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
@ -19,7 +21,10 @@ class ConfirmCommand:
|
||||||
failure("No such relay on %s: %s" % (spl[1], spl[2]))
|
failure("No such relay on %s: %s" % (spl[1], spl[2]))
|
||||||
return
|
return
|
||||||
regproc.confirmAccount(spl[1], int(spl[2]), spl[3])
|
regproc.confirmAccount(spl[1], int(spl[2]), spl[3])
|
||||||
success("Requested confirmation on %s - %s with token %s" % (spl[1], spl[2], spl[3]))
|
success(
|
||||||
|
"Requested confirmation on %s - %s with token %s"
|
||||||
|
% (spl[1], spl[2], spl[3])
|
||||||
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
incUsage("confirm")
|
incUsage("confirm")
|
||||||
|
|
|
@ -6,7 +6,9 @@ class DisableCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.disable(*args)
|
self.disable(*args)
|
||||||
|
|
||||||
def disable(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def disable(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 3:
|
if length == 3:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
|
from subprocess import PIPE, run
|
||||||
|
|
||||||
import main
|
import main
|
||||||
from subprocess import run, PIPE
|
|
||||||
|
|
||||||
|
|
||||||
class DistCommand:
|
class DistCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.dist(*args)
|
self.dist(*args)
|
||||||
|
|
||||||
def dist(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def dist(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if main.config["Dist"]["Enabled"]:
|
if main.config["Dist"]["Enabled"]:
|
||||||
rtrn = run([main.config["Dist"]["File"]], shell=True, stdout=PIPE)
|
rtrn = run([main.config["Dist"]["File"]], shell=True, stdout=PIPE)
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
import main
|
|
||||||
from yaml import dump
|
from yaml import dump
|
||||||
|
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
class EmailCommand:
|
class EmailCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.email(*args)
|
self.email(*args)
|
||||||
|
|
||||||
def email(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def email(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 4:
|
if length == 4:
|
||||||
if spl[1] == "add":
|
if spl[1] == "add":
|
||||||
|
@ -19,10 +22,16 @@ class EmailCommand:
|
||||||
return
|
return
|
||||||
if not domain in main.irc["_"]["domains"]:
|
if not domain in main.irc["_"]["domains"]:
|
||||||
main.irc["_"]["domains"].append(domain)
|
main.irc["_"]["domains"].append(domain)
|
||||||
success("Successfully added domain %s to default config" % domain)
|
success(
|
||||||
|
"Successfully added domain %s to default config"
|
||||||
|
% domain
|
||||||
|
)
|
||||||
main.saveConf("irc")
|
main.saveConf("irc")
|
||||||
else:
|
else:
|
||||||
failure("Domain already exists in default config: %s" % domain)
|
failure(
|
||||||
|
"Domain already exists in default config: %s"
|
||||||
|
% domain
|
||||||
|
)
|
||||||
return
|
return
|
||||||
elif spl[1] == "del":
|
elif spl[1] == "del":
|
||||||
if not spl[2].isdigit():
|
if not spl[2].isdigit():
|
||||||
|
@ -32,10 +41,16 @@ class EmailCommand:
|
||||||
|
|
||||||
if domain in main.irc["_"]["domains"]:
|
if domain in main.irc["_"]["domains"]:
|
||||||
main.irc["_"]["domains"].remove(domain)
|
main.irc["_"]["domains"].remove(domain)
|
||||||
success("Successfully removed domain %s to default config" % domain)
|
success(
|
||||||
|
"Successfully removed domain %s to default config"
|
||||||
|
% domain
|
||||||
|
)
|
||||||
main.saveConf("irc")
|
main.saveConf("irc")
|
||||||
else:
|
else:
|
||||||
failure("Domain does not exist in default config: %s" % domain)
|
failure(
|
||||||
|
"Domain does not exist in default config: %s"
|
||||||
|
% domain
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -47,10 +62,15 @@ class EmailCommand:
|
||||||
if not spl[3] in main.alias[num]["emails"]:
|
if not spl[3] in main.alias[num]["emails"]:
|
||||||
main.alias[num]["emails"].append(spl[3])
|
main.alias[num]["emails"].append(spl[3])
|
||||||
main.saveConf("alias")
|
main.saveConf("alias")
|
||||||
success("Successfully added email %s to alias %i" % (spl[3], num))
|
success(
|
||||||
|
"Successfully added email %s to alias %i"
|
||||||
|
% (spl[3], num)
|
||||||
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
failure("Email already exists in alias %i: %s" % (num, spl[3]))
|
failure(
|
||||||
|
"Email already exists in alias %i: %s" % (num, spl[3])
|
||||||
|
)
|
||||||
return
|
return
|
||||||
elif spl[1] == "del":
|
elif spl[1] == "del":
|
||||||
if not num in main.alias.keys():
|
if not num in main.alias.keys():
|
||||||
|
@ -59,10 +79,15 @@ class EmailCommand:
|
||||||
if spl[3] in main.alias[num]["emails"]:
|
if spl[3] in main.alias[num]["emails"]:
|
||||||
main.alias[num]["emails"].remove(spl[3])
|
main.alias[num]["emails"].remove(spl[3])
|
||||||
main.saveConf("alias")
|
main.saveConf("alias")
|
||||||
success("Successfully removed email %s from alias %i" % (spl[3], num))
|
success(
|
||||||
|
"Successfully removed email %s from alias %i"
|
||||||
|
% (spl[3], num)
|
||||||
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
failure("Email does not exist in alias %i: %s" % (spl[3], num))
|
failure(
|
||||||
|
"Email does not exist in alias %i: %s" % (spl[3], num)
|
||||||
|
)
|
||||||
return
|
return
|
||||||
elif length == 2:
|
elif length == 2:
|
||||||
if spl[1] == "list":
|
if spl[1] == "list":
|
||||||
|
@ -74,7 +99,12 @@ class EmailCommand:
|
||||||
elif length == 3:
|
elif length == 3:
|
||||||
if spl[1] == "list":
|
if spl[1] == "list":
|
||||||
if spl[2] == "domain":
|
if spl[2] == "domain":
|
||||||
filtered = {f"{k}:{k2}":v2 for k,v in main.irc.items() for k2,v2 in v.items() if k2 == "domains"}
|
filtered = {
|
||||||
|
f"{k}:{k2}": v2
|
||||||
|
for k, v in main.irc.items()
|
||||||
|
for k2, v2 in v.items()
|
||||||
|
if k2 == "domains"
|
||||||
|
}
|
||||||
info(dump(filtered))
|
info(dump(filtered))
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -6,7 +6,9 @@ class EnableCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.enable(*args)
|
self.enable(*args)
|
||||||
|
|
||||||
def enable(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def enable(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 3:
|
if length == 3:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
|
|
@ -5,7 +5,9 @@ class ExecCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.exec(*args)
|
self.exec(*args)
|
||||||
|
|
||||||
def exec(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def exec(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length > 1:
|
if length > 1:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -5,7 +5,9 @@ class HelpCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.help(*args)
|
self.help(*args)
|
||||||
|
|
||||||
def help(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def help(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
helpMap = []
|
helpMap = []
|
||||||
for i in main.help.keys():
|
for i in main.help.keys():
|
||||||
|
|
|
@ -6,7 +6,9 @@ class JoinCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.join(*args)
|
self.join(*args)
|
||||||
|
|
||||||
def join(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def join(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 3:
|
if length == 3:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
|
|
@ -5,7 +5,9 @@ class ListCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.list(*args)
|
self.list(*args)
|
||||||
|
|
||||||
def list(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def list(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
for i in main.network.keys():
|
for i in main.network.keys():
|
||||||
|
|
|
@ -5,7 +5,9 @@ class LoadCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.load(*args)
|
self.load(*args)
|
||||||
|
|
||||||
def load(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def load(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 2:
|
if length == 2:
|
||||||
if spl[1] in main.filemap.keys():
|
if spl[1] in main.filemap.keys():
|
||||||
|
|
|
@ -6,7 +6,9 @@ class LoadmodCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.loadmod(*args)
|
self.loadmod(*args)
|
||||||
|
|
||||||
def loadmod(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def loadmod(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 2:
|
if length == 2:
|
||||||
rtrn = loadSingle(spl[1])
|
rtrn = loadSingle(spl[1])
|
||||||
|
|
|
@ -5,7 +5,9 @@ class LogoutCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.logout(*args)
|
self.logout(*args)
|
||||||
|
|
||||||
def logout(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def logout(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
obj.authed = False
|
obj.authed = False
|
||||||
success("Logged out")
|
success("Logged out")
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
import main
|
|
||||||
from yaml import dump
|
from yaml import dump
|
||||||
|
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
class ModCommand:
|
class ModCommand:
|
||||||
# This could be greatly improved, but not really important right now
|
# This could be greatly improved, but not really important right now
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.mod(*args)
|
self.mod(*args)
|
||||||
|
|
||||||
def mod(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def mod(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 4:
|
if length == 4:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
@ -21,7 +24,9 @@ class ModCommand:
|
||||||
return
|
return
|
||||||
|
|
||||||
main.saveConf("network")
|
main.saveConf("network")
|
||||||
success("Successfully set key %s to %s on %s" % (spl[2], spl[3], spl[1]))
|
success(
|
||||||
|
"Successfully set key %s to %s on %s" % (spl[2], spl[3], spl[1])
|
||||||
|
)
|
||||||
return
|
return
|
||||||
# Find a better way to do this
|
# Find a better way to do this
|
||||||
# elif length == 6:
|
# elif length == 6:
|
||||||
|
|
|
@ -5,7 +5,9 @@ class MsgCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.msg(*args)
|
self.msg(*args)
|
||||||
|
|
||||||
def msg(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def msg(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length >= 5:
|
if length >= 5:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
@ -20,7 +22,10 @@ class MsgCommand:
|
||||||
if not spl[3] in main.IRCPool[spl[1] + spl[2]].channels:
|
if not spl[3] in main.IRCPool[spl[1] + spl[2]].channels:
|
||||||
info("Bot not on channel: %s" % spl[3])
|
info("Bot not on channel: %s" % spl[3])
|
||||||
main.IRCPool[spl[1] + spl[2]].msg(spl[3], " ".join(spl[4:]))
|
main.IRCPool[spl[1] + spl[2]].msg(spl[3], " ".join(spl[4:]))
|
||||||
success("Sent %s to %s on relay %s on network %s" % (" ".join(spl[4:]), spl[3], spl[2], spl[1]))
|
success(
|
||||||
|
"Sent %s to %s on relay %s on network %s"
|
||||||
|
% (" ".join(spl[4:]), spl[3], spl[2], spl[1])
|
||||||
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
incUsage("msg")
|
incUsage("msg")
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
import main
|
|
||||||
from yaml import dump
|
|
||||||
from modules.network import Network
|
|
||||||
from string import digits
|
from string import digits
|
||||||
|
|
||||||
|
from yaml import dump
|
||||||
|
|
||||||
|
import main
|
||||||
|
from modules.network import Network
|
||||||
|
|
||||||
|
|
||||||
class NetworkCommand:
|
class NetworkCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.network(*args)
|
self.network(*args)
|
||||||
|
|
||||||
def network(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def network(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 7:
|
if length == 7:
|
||||||
if spl[1] == "add":
|
if spl[1] == "add":
|
||||||
|
@ -28,7 +32,9 @@ class NetworkCommand:
|
||||||
failure("Auth must be sasl, ns or none, not %s" % spl[5])
|
failure("Auth must be sasl, ns or none, not %s" % spl[5])
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
main.network[spl[2]] = Network(spl[2], spl[3], int(spl[4]), spl[5].lower(), spl[6].lower())
|
main.network[spl[2]] = Network(
|
||||||
|
spl[2], spl[3], int(spl[4]), spl[5].lower(), spl[6].lower()
|
||||||
|
)
|
||||||
success("Successfully created network: %s" % spl[2])
|
success("Successfully created network: %s" % spl[2])
|
||||||
main.saveConf("network")
|
main.saveConf("network")
|
||||||
return
|
return
|
||||||
|
|
|
@ -5,7 +5,9 @@ class PartCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.part(*args)
|
self.part(*args)
|
||||||
|
|
||||||
def part(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def part(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 4:
|
if length == 4:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
|
|
@ -5,7 +5,9 @@ class PassCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.password(*args)
|
self.password(*args)
|
||||||
|
|
||||||
def password(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def password(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
info("You are already authenticated")
|
info("You are already authenticated")
|
||||||
return
|
return
|
||||||
|
|
|
@ -5,14 +5,19 @@ class PendingCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.pending(*args)
|
self.pending(*args)
|
||||||
|
|
||||||
def pending(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def pending(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
results = []
|
results = []
|
||||||
for i in main.network.keys():
|
for i in main.network.keys():
|
||||||
for x in main.network[i].relays.keys():
|
for x in main.network[i].relays.keys():
|
||||||
if not main.network[i].relays[x]["registered"]:
|
if not main.network[i].relays[x]["registered"]:
|
||||||
results.append("%s: confirm %s %s [code]" % (main.alias[x]["nick"], i, x))
|
results.append(
|
||||||
|
"%s: confirm %s %s [code]"
|
||||||
|
% (main.alias[x]["nick"], i, x)
|
||||||
|
)
|
||||||
info("\n".join(results))
|
info("\n".join(results))
|
||||||
return
|
return
|
||||||
elif length == 2:
|
elif length == 2:
|
||||||
|
@ -22,7 +27,10 @@ class PendingCommand:
|
||||||
results = []
|
results = []
|
||||||
for x in main.network[spl[1]].relays.keys():
|
for x in main.network[spl[1]].relays.keys():
|
||||||
if not main.network[spl[1]].relays[x]["registered"]:
|
if not main.network[spl[1]].relays[x]["registered"]:
|
||||||
results.append("%s: confirm %s %s [code]" % (main.alias[x]["nick"], spl[1], x))
|
results.append(
|
||||||
|
"%s: confirm %s %s [code]"
|
||||||
|
% (main.alias[x]["nick"], spl[1], x)
|
||||||
|
)
|
||||||
info("\n".join(results))
|
info("\n".join(results))
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -5,7 +5,9 @@ class RecheckauthCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.recheckauth(*args)
|
self.recheckauth(*args)
|
||||||
|
|
||||||
def recheckauth(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def recheckauth(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
results = []
|
results = []
|
||||||
|
|
|
@ -6,7 +6,9 @@ class RegCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.reg(*args)
|
self.reg(*args)
|
||||||
|
|
||||||
def reg(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def reg(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 2:
|
if length == 2:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
|
|
@ -1,18 +1,24 @@
|
||||||
import main
|
|
||||||
from yaml import dump
|
from yaml import dump
|
||||||
|
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
class RelayCommand:
|
class RelayCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.relay(*args)
|
self.relay(*args)
|
||||||
|
|
||||||
def relay(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def relay(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 3:
|
if length == 3:
|
||||||
if spl[1] == "add":
|
if spl[1] == "add":
|
||||||
if spl[2] in main.network.keys():
|
if spl[2] in main.network.keys():
|
||||||
id, alias = main.network[spl[2]].add_relay()
|
id, alias = main.network[spl[2]].add_relay()
|
||||||
success("Successfully created relay %s on network %s with alias %s" % (str(id), spl[2], alias))
|
success(
|
||||||
|
"Successfully created relay %s on network %s with alias %s"
|
||||||
|
% (str(id), spl[2], alias)
|
||||||
|
)
|
||||||
main.saveConf("network")
|
main.saveConf("network")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
@ -35,7 +41,10 @@ class RelayCommand:
|
||||||
failure("Must be a number, not %s" % spl[3])
|
failure("Must be a number, not %s" % spl[3])
|
||||||
return
|
return
|
||||||
id, alias = main.network[spl[2]].add_relay(int(spl[3]))
|
id, alias = main.network[spl[2]].add_relay(int(spl[3]))
|
||||||
success("Successfully created relay %s on network %s with alias %s" % (str(id), spl[2], alias))
|
success(
|
||||||
|
"Successfully created relay %s on network %s with alias %s"
|
||||||
|
% (str(id), spl[2], alias)
|
||||||
|
)
|
||||||
main.saveConf("network")
|
main.saveConf("network")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
@ -52,7 +61,9 @@ class RelayCommand:
|
||||||
failure("No such relay: %s on network %s" % (spl[3], spl[2]))
|
failure("No such relay: %s on network %s" % (spl[3], spl[2]))
|
||||||
return
|
return
|
||||||
main.network[spl[2]].delete_relay(int(spl[3]))
|
main.network[spl[2]].delete_relay(int(spl[3]))
|
||||||
success("Successfully deleted relay %s on network %s" % (spl[3], spl[2]))
|
success(
|
||||||
|
"Successfully deleted relay %s on network %s" % (spl[3], spl[2])
|
||||||
|
)
|
||||||
main.saveConf("network")
|
main.saveConf("network")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -5,7 +5,9 @@ class SaveCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.save(*args)
|
self.save(*args)
|
||||||
|
|
||||||
def save(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def save(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 2:
|
if length == 2:
|
||||||
if spl[1] in main.filemap.keys():
|
if spl[1] in main.filemap.keys():
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
|
from string import digits
|
||||||
|
|
||||||
import main
|
import main
|
||||||
import modules.counters as count
|
import modules.counters as count
|
||||||
import modules.userinfo as userinfo
|
import modules.userinfo as userinfo
|
||||||
from string import digits
|
|
||||||
|
|
||||||
|
|
||||||
class StatsCommand:
|
class StatsCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.stats(*args)
|
self.stats(*args)
|
||||||
|
|
||||||
def stats(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def stats(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 1:
|
if length == 1:
|
||||||
stats = []
|
stats = []
|
||||||
|
|
|
@ -5,7 +5,9 @@ class SwhoCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.swho(*args)
|
self.swho(*args)
|
||||||
|
|
||||||
def swho(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def swho(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 2:
|
if length == 2:
|
||||||
if not spl[1] in main.network.keys():
|
if not spl[1] in main.network.keys():
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
import main
|
|
||||||
from yaml import dump
|
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
|
from yaml import dump
|
||||||
|
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
class TokenCommand:
|
class TokenCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.token(*args)
|
self.token(*args)
|
||||||
|
|
||||||
def token(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def token(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 2:
|
if length == 2:
|
||||||
if spl[1] == "list":
|
if spl[1] == "list":
|
||||||
|
|
|
@ -6,7 +6,9 @@ class UsersCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.users(*args)
|
self.users(*args)
|
||||||
|
|
||||||
def users(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def users(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if len(spl) < 2:
|
if len(spl) < 2:
|
||||||
incUsage("users")
|
incUsage("users")
|
||||||
|
|
|
@ -6,7 +6,9 @@ class WhoCommand:
|
||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
self.who(*args)
|
self.who(*args)
|
||||||
|
|
||||||
def who(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
|
def who(
|
||||||
|
self, addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
):
|
||||||
if authed:
|
if authed:
|
||||||
if length == 2:
|
if length == 2:
|
||||||
result = userinfo.getWho(spl[1])
|
result = userinfo.getWho(spl[1])
|
||||||
|
|
119
core/bot.py
119
core/bot.py
|
@ -1,45 +1,38 @@
|
||||||
from twisted.internet.protocol import ReconnectingClientFactory
|
|
||||||
from twisted.words.protocols.irc import IRCClient
|
|
||||||
from twisted.internet.defer import Deferred
|
|
||||||
from twisted.internet.task import LoopingCall
|
|
||||||
from twisted.internet import reactor, task
|
|
||||||
from twisted.words.protocols.irc import (
|
|
||||||
symbolic_to_numeric,
|
|
||||||
numeric_to_symbolic,
|
|
||||||
lowDequote,
|
|
||||||
IRCBadMessage,
|
|
||||||
)
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from string import digits
|
|
||||||
from random import randint
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from random import randint
|
||||||
|
from string import digits
|
||||||
|
|
||||||
from modules import userinfo
|
from twisted.internet import reactor, task
|
||||||
from modules import counters
|
from twisted.internet.defer import Deferred
|
||||||
from modules import monitor
|
from twisted.internet.protocol import ReconnectingClientFactory
|
||||||
from modules import chankeep
|
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||||
from modules import regproc
|
from twisted.internet.task import LoopingCall
|
||||||
|
from twisted.words.protocols.irc import (IRCBadMessage, IRCClient, lowDequote,
|
||||||
from core.relay import sendRelayNotification
|
numeric_to_symbolic,
|
||||||
from utils.dedup import dedup
|
symbolic_to_numeric)
|
||||||
from utils.get import getRelay
|
|
||||||
|
|
||||||
import main
|
import main
|
||||||
from utils.logging.log import *
|
from core.relay import sendRelayNotification
|
||||||
|
from modules import chankeep, counters, monitor, regproc, userinfo
|
||||||
|
from utils.dedup import dedup
|
||||||
|
from utils.get import getRelay
|
||||||
from utils.logging.debug import *
|
from utils.logging.debug import *
|
||||||
|
from utils.logging.log import *
|
||||||
from utils.logging.send import *
|
from utils.logging.send import *
|
||||||
from utils.parsing import parsen
|
from utils.parsing import parsen
|
||||||
|
|
||||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
|
||||||
|
|
||||||
|
|
||||||
def deliverRelayCommands(num, relayCommands, user=None, stage2=None):
|
def deliverRelayCommands(num, relayCommands, user=None, stage2=None):
|
||||||
keyFN = main.certPath + main.config["Key"]
|
keyFN = main.certPath + main.config["Key"]
|
||||||
certFN = main.certPath + main.config["Certificate"]
|
certFN = main.certPath + main.config["Certificate"]
|
||||||
contextFactory = DefaultOpenSSLContextFactory(keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace"))
|
contextFactory = DefaultOpenSSLContextFactory(
|
||||||
bot = IRCBotFactory(net=None, num=num, relayCommands=relayCommands, user=user, stage2=stage2)
|
keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace")
|
||||||
|
)
|
||||||
|
bot = IRCBotFactory(
|
||||||
|
net=None, num=num, relayCommands=relayCommands, user=user, stage2=stage2
|
||||||
|
)
|
||||||
host, port = getRelay(num)
|
host, port = getRelay(num)
|
||||||
rct = reactor.connectSSL(host, port, bot, contextFactory)
|
rct = reactor.connectSSL(host, port, bot, contextFactory)
|
||||||
|
|
||||||
|
@ -165,7 +158,9 @@ class IRCBot(IRCClient):
|
||||||
self.listAttempted = False # we asked for a list
|
self.listAttempted = False # we asked for a list
|
||||||
self.listSimple = False # after asking again we got the list, so use the simple
|
self.listSimple = False # after asking again we got the list, so use the simple
|
||||||
# syntax from now on
|
# syntax from now on
|
||||||
self.wantList = False # we want to send a LIST, but not all relays are active yet
|
self.wantList = (
|
||||||
|
False # we want to send a LIST, but not all relays are active yet
|
||||||
|
)
|
||||||
self.chanlimit = 0
|
self.chanlimit = 0
|
||||||
self.prefix = {}
|
self.prefix = {}
|
||||||
self.servername = None
|
self.servername = None
|
||||||
|
@ -197,9 +192,14 @@ class IRCBot(IRCClient):
|
||||||
if not i in self.channels:
|
if not i in self.channels:
|
||||||
if self.net in main.blacklist.keys():
|
if self.net in main.blacklist.keys():
|
||||||
if i in main.blacklist[self.net]:
|
if i in main.blacklist[self.net]:
|
||||||
debug("Not joining blacklisted channel %s on %s - %i" % (i, self.net, self.num))
|
debug(
|
||||||
|
"Not joining blacklisted channel %s on %s - %i"
|
||||||
|
% (i, self.net, self.num)
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
debug(self.net, "-", self.num, ": joining", i, "in", sleeptime, "seconds")
|
debug(
|
||||||
|
self.net, "-", self.num, ": joining", i, "in", sleeptime, "seconds"
|
||||||
|
)
|
||||||
reactor.callLater(sleeptime, self.join, i)
|
reactor.callLater(sleeptime, self.join, i)
|
||||||
sleeptime += increment
|
sleeptime += increment
|
||||||
if sleeptime == 10:
|
if sleeptime == 10:
|
||||||
|
@ -207,11 +207,17 @@ class IRCBot(IRCClient):
|
||||||
increment = 0.7
|
increment = 0.7
|
||||||
increment += 0.1
|
increment += 0.1
|
||||||
else:
|
else:
|
||||||
error("%s - Cannot join channel we are already on: %s - %i" % (i, self.net, self.num))
|
error(
|
||||||
|
"%s - Cannot join channel we are already on: %s - %i"
|
||||||
|
% (i, self.net, self.num)
|
||||||
|
)
|
||||||
|
|
||||||
def checkChannels(self):
|
def checkChannels(self):
|
||||||
if not chankeep.allRelaysActive(self.net):
|
if not chankeep.allRelaysActive(self.net):
|
||||||
debug("Skipping channel check as we have inactive relays: %s - %i" % (self.net, self.num))
|
debug(
|
||||||
|
"Skipping channel check as we have inactive relays: %s - %i"
|
||||||
|
% (self.net, self.num)
|
||||||
|
)
|
||||||
return
|
return
|
||||||
if self.net in main.TempChan.keys():
|
if self.net in main.TempChan.keys():
|
||||||
if self.num in main.TempChan[self.net].keys():
|
if self.num in main.TempChan[self.net].keys():
|
||||||
|
@ -225,7 +231,9 @@ class IRCBot(IRCClient):
|
||||||
cast["ts"] = str(datetime.now().isoformat())
|
cast["ts"] = str(datetime.now().isoformat())
|
||||||
|
|
||||||
# remove odd stuff
|
# remove odd stuff
|
||||||
for i in list(cast.keys()): # Make a copy of the .keys() as Python 3 cannot handle iterating over
|
for i in list(
|
||||||
|
cast.keys()
|
||||||
|
): # Make a copy of the .keys() as Python 3 cannot handle iterating over
|
||||||
if cast[i] == "": # a dictionary that changes length with each iteration
|
if cast[i] == "": # a dictionary that changes length with each iteration
|
||||||
del cast[i]
|
del cast[i]
|
||||||
# remove server stuff
|
# remove server stuff
|
||||||
|
@ -359,7 +367,9 @@ class IRCBot(IRCClient):
|
||||||
|
|
||||||
def irc_ERR_PASSWDMISMATCH(self, prefix, params):
|
def irc_ERR_PASSWDMISMATCH(self, prefix, params):
|
||||||
log("%s - %i: password mismatch as %s" % (self.net, self.num, self.username))
|
log("%s - %i: password mismatch as %s" % (self.net, self.num, self.username))
|
||||||
sendAll("%s - %i: password mismatch as %s" % (self.net, self.num, self.username))
|
sendAll(
|
||||||
|
"%s - %i: password mismatch as %s" % (self.net, self.num, self.username)
|
||||||
|
)
|
||||||
|
|
||||||
def _who(self, channel):
|
def _who(self, channel):
|
||||||
d = Deferred()
|
d = Deferred()
|
||||||
|
@ -474,12 +484,17 @@ class IRCBot(IRCClient):
|
||||||
debug("Will not send LIST, unauthenticated: %s - %i" % (self.net, self.num))
|
debug("Will not send LIST, unauthenticated: %s - %i" % (self.net, self.num))
|
||||||
return
|
return
|
||||||
if self.listAttempted:
|
if self.listAttempted:
|
||||||
debug("List request dropped, already asked for LIST - %s - %i" % (self.net, self.num))
|
debug(
|
||||||
|
"List request dropped, already asked for LIST - %s - %i"
|
||||||
|
% (self.net, self.num)
|
||||||
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.listAttempted = True
|
self.listAttempted = True
|
||||||
if self.listOngoing:
|
if self.listOngoing:
|
||||||
debug("LIST request dropped, already ongoing - %s - %i" % (self.net, self.num))
|
debug(
|
||||||
|
"LIST request dropped, already ongoing - %s - %i" % (self.net, self.num)
|
||||||
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
if nocheck:
|
if nocheck:
|
||||||
|
@ -504,7 +519,9 @@ class IRCBot(IRCClient):
|
||||||
self._tempList[1].append([channel, users, topic])
|
self._tempList[1].append([channel, users, topic])
|
||||||
|
|
||||||
def irc_RPL_LISTEND(self, prefix, params):
|
def irc_RPL_LISTEND(self, prefix, params):
|
||||||
if not len(self._tempList[0]) > 0: # there are no callbacks, can't do anything there
|
if (
|
||||||
|
not len(self._tempList[0]) > 0
|
||||||
|
): # there are no callbacks, can't do anything there
|
||||||
debug("We didn't ask for this LIST, discarding")
|
debug("We didn't ask for this LIST, discarding")
|
||||||
self._tempList[0].clear()
|
self._tempList[0].clear()
|
||||||
self._tempList[1].clear()
|
self._tempList[1].clear()
|
||||||
|
@ -529,7 +546,10 @@ class IRCBot(IRCClient):
|
||||||
else:
|
else:
|
||||||
if self.listRetried:
|
if self.listRetried:
|
||||||
self.listRetried = False
|
self.listRetried = False
|
||||||
debug("List received after retry - defaulting to simple list syntax: %s - %i" % (self.net, self.num))
|
debug(
|
||||||
|
"List received after retry - defaulting to simple list syntax: %s - %i"
|
||||||
|
% (self.net, self.num)
|
||||||
|
)
|
||||||
self.listSimple = True
|
self.listSimple = True
|
||||||
|
|
||||||
def got_list(self, listinfo):
|
def got_list(self, listinfo):
|
||||||
|
@ -543,7 +563,10 @@ class IRCBot(IRCClient):
|
||||||
name = self.net + "1"
|
name = self.net + "1"
|
||||||
if main.IRCPool[name].wantList == True:
|
if main.IRCPool[name].wantList == True:
|
||||||
main.IRCPool[name].list(nocheck=True)
|
main.IRCPool[name].list(nocheck=True)
|
||||||
debug("Asking for a list for %s after final relay %i connected" % (self.net, self.num))
|
debug(
|
||||||
|
"Asking for a list for %s after final relay %i connected"
|
||||||
|
% (self.net, self.num)
|
||||||
|
)
|
||||||
if self.num == 1: # Only one instance should do a list
|
if self.num == 1: # Only one instance should do a list
|
||||||
if self.chanlimit:
|
if self.chanlimit:
|
||||||
if allRelays:
|
if allRelays:
|
||||||
|
@ -560,7 +583,9 @@ class IRCBot(IRCClient):
|
||||||
]: # TODO: add check for register request sent, only send it once
|
]: # TODO: add check for register request sent, only send it once
|
||||||
if main.config["AutoReg"]:
|
if main.config["AutoReg"]:
|
||||||
if not self.authenticated:
|
if not self.authenticated:
|
||||||
self._regAttempt = reactor.callLater(5, regproc.registerAccount, self.net, self.num)
|
self._regAttempt = reactor.callLater(
|
||||||
|
5, regproc.registerAccount, self.net, self.num
|
||||||
|
)
|
||||||
# regproc.registerAccount(self.net, self.num)
|
# regproc.registerAccount(self.net, self.num)
|
||||||
try:
|
try:
|
||||||
self.chanlimit = int(chanlimit)
|
self.chanlimit = int(chanlimit)
|
||||||
|
@ -568,7 +593,9 @@ class IRCBot(IRCClient):
|
||||||
warn("Invalid chanlimit: %s" % i)
|
warn("Invalid chanlimit: %s" % i)
|
||||||
if self.chanlimit == 0:
|
if self.chanlimit == 0:
|
||||||
self.chanlimit = 200 # don't take the piss if it's not limited
|
self.chanlimit = 200 # don't take the piss if it's not limited
|
||||||
if not regproc.needToRegister(self.net): # if we need to register, only recheck on auth confirmation
|
if not regproc.needToRegister(
|
||||||
|
self.net
|
||||||
|
): # if we need to register, only recheck on auth confirmation
|
||||||
self.recheckList()
|
self.recheckList()
|
||||||
|
|
||||||
def seed_prefix(self, prefix):
|
def seed_prefix(self, prefix):
|
||||||
|
@ -669,7 +696,9 @@ class IRCBot(IRCClient):
|
||||||
if negativepass == True:
|
if negativepass == True:
|
||||||
if self._negativePass == None:
|
if self._negativePass == None:
|
||||||
self._negativePass = True
|
self._negativePass = True
|
||||||
debug("Positive registration check - %s - %i" % (self.net, self.num))
|
debug(
|
||||||
|
"Positive registration check - %s - %i" % (self.net, self.num)
|
||||||
|
)
|
||||||
if sinst["ping"]:
|
if sinst["ping"]:
|
||||||
debug("Sending ping - %s - %i" % (self.net, self.num))
|
debug("Sending ping - %s - %i" % (self.net, self.num))
|
||||||
self.msg(sinst["entity"], sinst["pingmsg"])
|
self.msg(sinst["entity"], sinst["pingmsg"])
|
||||||
|
@ -725,7 +754,9 @@ class IRCBot(IRCClient):
|
||||||
lc = self._getWho[channel]
|
lc = self._getWho[channel]
|
||||||
lc.stop()
|
lc.stop()
|
||||||
del self._getWho[channel]
|
del self._getWho[channel]
|
||||||
userinfo.delChannels(self.net, [channel]) # < we do not need to deduplicate this
|
userinfo.delChannels(
|
||||||
|
self.net, [channel]
|
||||||
|
) # < we do not need to deduplicate this
|
||||||
# log("Can no longer cover %s, removing records" % channel)# as it will only be matched once --
|
# log("Can no longer cover %s, removing records" % channel)# as it will only be matched once --
|
||||||
# other bots have different nicknames so
|
# other bots have different nicknames so
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import logstash
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from json import dumps, loads
|
from json import dumps, loads
|
||||||
|
|
||||||
|
import logstash
|
||||||
|
|
||||||
import main
|
import main
|
||||||
from utils.logging.log import *
|
from utils.logging.log import *
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,9 @@ def parseCommand(addr, authed, data):
|
||||||
failure("No text was sent")
|
failure("No text was sent")
|
||||||
return
|
return
|
||||||
if spl[0] in main.CommandMap.keys():
|
if spl[0] in main.CommandMap.keys():
|
||||||
main.CommandMap[spl[0]](addr, authed, data, obj, spl, success, failure, info, incUsage, length)
|
main.CommandMap[spl[0]](
|
||||||
|
addr, authed, data, obj, spl, success, failure, info, incUsage, length
|
||||||
|
)
|
||||||
return
|
return
|
||||||
incUsage(None)
|
incUsage(None)
|
||||||
return
|
return
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from twisted.internet.protocol import Protocol, Factory, ClientFactory
|
|
||||||
from json import dumps, loads
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
from json import dumps, loads
|
||||||
|
|
||||||
|
from twisted.internet.protocol import ClientFactory, Factory, Protocol
|
||||||
|
|
||||||
import main
|
import main
|
||||||
from utils.logging.log import *
|
from utils.logging.log import *
|
||||||
|
@ -114,8 +115,13 @@ class Relay(Protocol):
|
||||||
|
|
||||||
def handleHello(self, parsed):
|
def handleHello(self, parsed):
|
||||||
if parsed["key"] in main.tokens.keys():
|
if parsed["key"] in main.tokens.keys():
|
||||||
if parsed["hello"] == main.tokens[parsed["key"]]["hello"] and main.tokens[parsed["key"]]["usage"] == "relay":
|
if (
|
||||||
self.sendMsg({"type": "hello", "hello": main.tokens[parsed["key"]]["counter"]})
|
parsed["hello"] == main.tokens[parsed["key"]]["hello"]
|
||||||
|
and main.tokens[parsed["key"]]["usage"] == "relay"
|
||||||
|
):
|
||||||
|
self.sendMsg(
|
||||||
|
{"type": "hello", "hello": main.tokens[parsed["key"]]["counter"]}
|
||||||
|
)
|
||||||
self.authed = True
|
self.authed = True
|
||||||
else:
|
else:
|
||||||
self.transport.loseConnection()
|
self.transport.loseConnection()
|
||||||
|
@ -130,7 +136,10 @@ class Relay(Protocol):
|
||||||
|
|
||||||
def connectionLost(self, reason):
|
def connectionLost(self, reason):
|
||||||
self.authed = False
|
self.authed = False
|
||||||
log("Relay connection lost from %s:%s -- %s" % (self.addr.host, self.addr.port, reason.getErrorMessage()))
|
log(
|
||||||
|
"Relay connection lost from %s:%s -- %s"
|
||||||
|
% (self.addr.host, self.addr.port, reason.getErrorMessage())
|
||||||
|
)
|
||||||
if self.addr in main.relayConnections.keys():
|
if self.addr in main.relayConnections.keys():
|
||||||
del main.relayConnections[self.addr]
|
del main.relayConnections[self.addr]
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
from twisted.internet.protocol import Protocol, Factory, ClientFactory
|
from twisted.internet.protocol import ClientFactory, Factory, Protocol
|
||||||
import main
|
|
||||||
from utils.logging.log import *
|
|
||||||
|
|
||||||
|
import main
|
||||||
from core.parser import parseCommand
|
from core.parser import parseCommand
|
||||||
|
from utils.logging.log import *
|
||||||
|
|
||||||
|
|
||||||
class Server(Protocol):
|
class Server(Protocol):
|
||||||
|
@ -34,7 +34,10 @@ class Server(Protocol):
|
||||||
|
|
||||||
def connectionLost(self, reason):
|
def connectionLost(self, reason):
|
||||||
self.authed = False
|
self.authed = False
|
||||||
log("Connection lost from %s:%s -- %s" % (self.addr.host, self.addr.port, reason.getErrorMessage()))
|
log(
|
||||||
|
"Connection lost from %s:%s -- %s"
|
||||||
|
% (self.addr.host, self.addr.port, reason.getErrorMessage())
|
||||||
|
)
|
||||||
if self.addr in main.connections.keys():
|
if self.addr in main.connections.keys():
|
||||||
del main.connections[self.addr]
|
del main.connections[self.addr]
|
||||||
else:
|
else:
|
||||||
|
|
13
main.py
13
main.py
|
@ -1,8 +1,9 @@
|
||||||
import json
|
import json
|
||||||
import pickle
|
import pickle
|
||||||
from redis import StrictRedis
|
|
||||||
from string import digits
|
|
||||||
from os import urandom
|
from os import urandom
|
||||||
|
from string import digits
|
||||||
|
|
||||||
|
from redis import StrictRedis
|
||||||
|
|
||||||
from utils.logging.log import *
|
from utils.logging.log import *
|
||||||
|
|
||||||
|
@ -106,5 +107,9 @@ def initConf():
|
||||||
def initMain():
|
def initMain():
|
||||||
global r, g
|
global r, g
|
||||||
initConf()
|
initConf()
|
||||||
r = StrictRedis(unix_socket_path=config["RedisSocket"], db=config["RedisDBEphemeral"]) # Ephemeral - flushed on quit
|
r = StrictRedis(
|
||||||
g = StrictRedis(unix_socket_path=config["RedisSocket"], db=config["RedisDBPersistent"]) # Persistent
|
unix_socket_path=config["RedisSocket"], db=config["RedisDBEphemeral"]
|
||||||
|
) # Ephemeral - flushed on quit
|
||||||
|
g = StrictRedis(
|
||||||
|
unix_socket_path=config["RedisSocket"], db=config["RedisDBPersistent"]
|
||||||
|
) # Persistent
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import main
|
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
def generate_password():
|
def generate_password():
|
||||||
return "".join([chr(random.randint(0, 74) + 48) for i in range(32)])
|
return "".join([chr(random.randint(0, 74) + 48) for i in range(32)])
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import main
|
|
||||||
from utils.logging.log import *
|
|
||||||
from utils.logging.debug import *
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from math import ceil
|
from math import ceil
|
||||||
import modules.provision
|
|
||||||
from twisted.internet.threads import deferToThread
|
from twisted.internet.threads import deferToThread
|
||||||
|
|
||||||
|
import main
|
||||||
|
import modules.provision
|
||||||
|
from utils.logging.debug import *
|
||||||
|
from utils.logging.log import *
|
||||||
|
|
||||||
|
|
||||||
def allRelaysActive(net):
|
def allRelaysActive(net):
|
||||||
relayNum = len(main.network[net].relays.keys())
|
relayNum = len(main.network[net].relays.keys())
|
||||||
|
@ -46,7 +48,10 @@ def emptyChanAllocate(net, flist, relay, new):
|
||||||
if toalloc > sum(chanfree[0].values()):
|
if toalloc > sum(chanfree[0].values()):
|
||||||
correction = round(toalloc - sum(chanfree[0].values()) / chanfree[1])
|
correction = round(toalloc - sum(chanfree[0].values()) / chanfree[1])
|
||||||
# print("correction", correction)
|
# print("correction", correction)
|
||||||
warn("Ran out of channel spaces, provisioning additional %i relays for %s" % (correction, net))
|
warn(
|
||||||
|
"Ran out of channel spaces, provisioning additional %i relays for %s"
|
||||||
|
% (correction, net)
|
||||||
|
)
|
||||||
# newNums = modules.provision.provisionMultipleRelays(net, correction)
|
# newNums = modules.provision.provisionMultipleRelays(net, correction)
|
||||||
return False
|
return False
|
||||||
for i in chanfree[0].keys():
|
for i in chanfree[0].keys():
|
||||||
|
@ -99,12 +104,18 @@ def keepChannels(net, listinfo, mean, sigrelay, relay):
|
||||||
listinfo = minifyChans(net, listinfo)
|
listinfo = minifyChans(net, listinfo)
|
||||||
if not listinfo:
|
if not listinfo:
|
||||||
return
|
return
|
||||||
if relay <= main.config["ChanKeep"]["SigSwitch"]: # we can cover all of the channels
|
if (
|
||||||
|
relay <= main.config["ChanKeep"]["SigSwitch"]
|
||||||
|
): # we can cover all of the channels
|
||||||
coverAll = True
|
coverAll = True
|
||||||
elif relay > main.config["ChanKeep"]["SigSwitch"]: # we cannot cover all of the channels
|
elif (
|
||||||
|
relay > main.config["ChanKeep"]["SigSwitch"]
|
||||||
|
): # we cannot cover all of the channels
|
||||||
coverAll = False
|
coverAll = False
|
||||||
if not sigrelay <= main.config["ChanKeep"]["MaxRelay"]:
|
if not sigrelay <= main.config["ChanKeep"]["MaxRelay"]:
|
||||||
error("Network %s is too big to cover: %i relays required" % (net, sigrelay))
|
error(
|
||||||
|
"Network %s is too big to cover: %i relays required" % (net, sigrelay)
|
||||||
|
)
|
||||||
return
|
return
|
||||||
if coverAll:
|
if coverAll:
|
||||||
needed = relay - len(main.network[net].relays.keys())
|
needed = relay - len(main.network[net].relays.keys())
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import main
|
|
||||||
from twisted.internet.task import LoopingCall
|
from twisted.internet.task import LoopingCall
|
||||||
|
|
||||||
|
import main
|
||||||
|
|
||||||
|
|
||||||
def event(name, eventType):
|
def event(name, eventType):
|
||||||
if not "local" in main.counters.keys():
|
if not "local" in main.counters.keys():
|
||||||
|
|
|
@ -2,10 +2,9 @@ from copy import deepcopy
|
||||||
from json import dumps
|
from json import dumps
|
||||||
|
|
||||||
import main
|
import main
|
||||||
from core.relay import sendRelayNotification
|
|
||||||
from core.logstash import sendLogstashNotification
|
from core.logstash import sendLogstashNotification
|
||||||
from modules import userinfo
|
from core.relay import sendRelayNotification
|
||||||
from modules import regproc
|
from modules import regproc, userinfo
|
||||||
from utils.dedup import dedup
|
from utils.dedup import dedup
|
||||||
|
|
||||||
order = [
|
order = [
|
||||||
|
@ -68,7 +67,9 @@ def parsemeta(numName, c):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def event(numName, c): # yes I'm using a short variable because otherwise it goes off the screen
|
def event(
|
||||||
|
numName, c
|
||||||
|
): # yes I'm using a short variable because otherwise it goes off the screen
|
||||||
if dedup(numName, c):
|
if dedup(numName, c):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
from twisted.internet import reactor
|
||||||
|
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||||
|
|
||||||
|
import main
|
||||||
|
from core.bot import IRCBot, IRCBotFactory
|
||||||
from modules import alias
|
from modules import alias
|
||||||
from modules.chankeep import nukeNetwork
|
from modules.chankeep import nukeNetwork
|
||||||
from modules.regproc import needToRegister
|
from modules.regproc import needToRegister
|
||||||
from twisted.internet import reactor
|
|
||||||
from core.bot import IRCBot, IRCBotFactory
|
|
||||||
import main
|
|
||||||
from utils.logging.log import *
|
|
||||||
from utils.get import getRelay
|
from utils.get import getRelay
|
||||||
|
from utils.logging.log import *
|
||||||
|
|
||||||
|
|
||||||
class Network:
|
class Network:
|
||||||
|
@ -77,7 +78,9 @@ class Network:
|
||||||
# e.g. freenode1 for the first relay on freenode network
|
# e.g. freenode1 for the first relay on freenode network
|
||||||
keyFN = main.certPath + main.config["Key"]
|
keyFN = main.certPath + main.config["Key"]
|
||||||
certFN = main.certPath + main.config["Certificate"]
|
certFN = main.certPath + main.config["Certificate"]
|
||||||
contextFactory = DefaultOpenSSLContextFactory(keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace"))
|
contextFactory = DefaultOpenSSLContextFactory(
|
||||||
|
keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace")
|
||||||
|
)
|
||||||
bot = IRCBotFactory(self.net, num)
|
bot = IRCBotFactory(self.net, num)
|
||||||
# host, port = self.relays[num]["host"], self.relays[num]["port"]
|
# host, port = self.relays[num]["host"], self.relays[num]["port"]
|
||||||
host, port = getRelay(num)
|
host, port = getRelay(num)
|
||||||
|
|
|
@ -1,11 +1,25 @@
|
||||||
|
from twisted.internet import reactor
|
||||||
|
|
||||||
import main
|
import main
|
||||||
|
import modules.regproc
|
||||||
from core.bot import deliverRelayCommands
|
from core.bot import deliverRelayCommands
|
||||||
from utils.logging.log import *
|
from utils.logging.log import *
|
||||||
from twisted.internet import reactor
|
|
||||||
import modules.regproc
|
|
||||||
|
|
||||||
|
|
||||||
def provisionUserNetworkData(num, nick, altnick, ident, realname, emails, network, host, port, security, auth, password):
|
def provisionUserNetworkData(
|
||||||
|
num,
|
||||||
|
nick,
|
||||||
|
altnick,
|
||||||
|
ident,
|
||||||
|
realname,
|
||||||
|
emails,
|
||||||
|
network,
|
||||||
|
host,
|
||||||
|
port,
|
||||||
|
security,
|
||||||
|
auth,
|
||||||
|
password,
|
||||||
|
):
|
||||||
print("nick", nick)
|
print("nick", nick)
|
||||||
print("altnick", altnick)
|
print("altnick", altnick)
|
||||||
print("emails", emails)
|
print("emails", emails)
|
||||||
|
@ -16,17 +30,25 @@ def provisionUserNetworkData(num, nick, altnick, ident, realname, emails, networ
|
||||||
stage2commands["status"] = []
|
stage2commands["status"] = []
|
||||||
commands["controlpanel"] = []
|
commands["controlpanel"] = []
|
||||||
user = nick.lower()
|
user = nick.lower()
|
||||||
commands["controlpanel"].append("AddUser %s %s" % (user, main.config["Relay"]["Password"]))
|
commands["controlpanel"].append(
|
||||||
|
"AddUser %s %s" % (user, main.config["Relay"]["Password"])
|
||||||
|
)
|
||||||
commands["controlpanel"].append("AddNetwork %s %s" % (user, network))
|
commands["controlpanel"].append("AddNetwork %s %s" % (user, network))
|
||||||
commands["controlpanel"].append("Set Nick %s %s" % (user, nick))
|
commands["controlpanel"].append("Set Nick %s %s" % (user, nick))
|
||||||
commands["controlpanel"].append("Set Altnick %s %s" % (user, altnick))
|
commands["controlpanel"].append("Set Altnick %s %s" % (user, altnick))
|
||||||
commands["controlpanel"].append("Set Ident %s %s" % (user, ident))
|
commands["controlpanel"].append("Set Ident %s %s" % (user, ident))
|
||||||
commands["controlpanel"].append("Set RealName %s %s" % (user, realname))
|
commands["controlpanel"].append("Set RealName %s %s" % (user, realname))
|
||||||
if security == "ssl":
|
if security == "ssl":
|
||||||
commands["controlpanel"].append("SetNetwork TrustAllCerts %s %s true" % (user, network)) # Don't judge me
|
commands["controlpanel"].append(
|
||||||
commands["controlpanel"].append("AddServer %s %s %s +%s" % (user, network, host, port))
|
"SetNetwork TrustAllCerts %s %s true" % (user, network)
|
||||||
|
) # Don't judge me
|
||||||
|
commands["controlpanel"].append(
|
||||||
|
"AddServer %s %s %s +%s" % (user, network, host, port)
|
||||||
|
)
|
||||||
elif security == "plain":
|
elif security == "plain":
|
||||||
commands["controlpanel"].append("AddServer %s %s %s %s" % (user, network, host, port))
|
commands["controlpanel"].append(
|
||||||
|
"AddServer %s %s %s %s" % (user, network, host, port)
|
||||||
|
)
|
||||||
if not main.config["ConnectOnCreate"]:
|
if not main.config["ConnectOnCreate"]:
|
||||||
stage2commands["status"].append("Disconnect")
|
stage2commands["status"].append("Disconnect")
|
||||||
if main.config["Toggles"]["CycleChans"]:
|
if main.config["Toggles"]["CycleChans"]:
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import main
|
|
||||||
from modules import provision
|
|
||||||
from utils.logging.log import *
|
|
||||||
from utils.logging.debug import *
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from random import choice
|
from random import choice
|
||||||
|
|
||||||
|
import main
|
||||||
|
from modules import provision
|
||||||
|
from utils.logging.debug import *
|
||||||
|
from utils.logging.log import *
|
||||||
|
|
||||||
|
|
||||||
def needToRegister(net):
|
def needToRegister(net):
|
||||||
# Check if the network does not support authentication
|
# Check if the network does not support authentication
|
||||||
networkObj = main.network[net]
|
networkObj = main.network[net]
|
||||||
|
@ -51,7 +53,7 @@ def substitute(net, num, token=None):
|
||||||
nickname = alias["nick"]
|
nickname = alias["nick"]
|
||||||
username = nickname + "/" + net
|
username = nickname + "/" + net
|
||||||
password = main.network[net].aliases[num]["password"]
|
password = main.network[net].aliases[num]["password"]
|
||||||
#inst["email"] = inst["email"].replace("{nickname}", nickname)
|
# inst["email"] = inst["email"].replace("{nickname}", nickname)
|
||||||
for i in inst.keys():
|
for i in inst.keys():
|
||||||
if not isinstance(inst[i], str):
|
if not isinstance(inst[i], str):
|
||||||
continue
|
continue
|
||||||
|
@ -112,8 +114,12 @@ def enableAuthentication(net, num):
|
||||||
auth = obj.auth
|
auth = obj.auth
|
||||||
password = obj.aliases[num]["password"]
|
password = obj.aliases[num]["password"]
|
||||||
uname = main.alias[num]["nick"] + "/" + net
|
uname = main.alias[num]["nick"] + "/" + net
|
||||||
provision.provisionAuthenticationData(num, nick, net, security, auth, password) # Set up for auth
|
provision.provisionAuthenticationData(
|
||||||
main.IRCPool[net + str(num)].msg(main.config["Tweaks"]["ZNC"]["Prefix"] + "status", "Jump")
|
num, nick, net, security, auth, password
|
||||||
|
) # Set up for auth
|
||||||
|
main.IRCPool[net + str(num)].msg(
|
||||||
|
main.config["Tweaks"]["ZNC"]["Prefix"] + "status", "Jump"
|
||||||
|
)
|
||||||
if selectInst(net)["check"] == False:
|
if selectInst(net)["check"] == False:
|
||||||
confirmRegistration(net, num)
|
confirmRegistration(net, num)
|
||||||
|
|
||||||
|
@ -129,10 +135,14 @@ def registerTest(c):
|
||||||
if not main.IRCPool[name]._negativePass == True:
|
if not main.IRCPool[name]._negativePass == True:
|
||||||
if c["type"] == "query" and c["nick"] == sinst["entity"]:
|
if c["type"] == "query" and c["nick"] == sinst["entity"]:
|
||||||
if sinst["checknegativemsg"] in c["msg"]:
|
if sinst["checknegativemsg"] in c["msg"]:
|
||||||
confirmRegistration(c["net"], c["num"], negativepass=False) # Not passed negative check, report back
|
confirmRegistration(
|
||||||
|
c["net"], c["num"], negativepass=False
|
||||||
|
) # Not passed negative check, report back
|
||||||
return
|
return
|
||||||
if sinst["checkendnegative"] in c["msg"]:
|
if sinst["checkendnegative"] in c["msg"]:
|
||||||
confirmRegistration(c["net"], c["num"], negativepass=True) # Passed the negative check, report back
|
confirmRegistration(
|
||||||
|
c["net"], c["num"], negativepass=True
|
||||||
|
) # Passed the negative check, report back
|
||||||
return
|
return
|
||||||
if sinst["ping"]:
|
if sinst["ping"]:
|
||||||
if sinst["checkmsg2"] in c["msg"] and c["nick"] == sinst["entity"]:
|
if sinst["checkmsg2"] in c["msg"] and c["nick"] == sinst["entity"]:
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
from twisted.internet.threads import deferToThread
|
|
||||||
from string import digits
|
from string import digits
|
||||||
|
|
||||||
|
from twisted.internet.threads import deferToThread
|
||||||
|
|
||||||
import main
|
import main
|
||||||
from utils.logging.log import *
|
|
||||||
from utils.logging.debug import debug, trace
|
from utils.logging.debug import debug, trace
|
||||||
|
from utils.logging.log import *
|
||||||
from utils.parsing import parsen
|
from utils.parsing import parsen
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,7 +146,9 @@ def delUser(name, channel, nick, user):
|
||||||
p.srem(namespace, nick)
|
p.srem(namespace, nick)
|
||||||
if channels == {channel.encode()}: # can we only see them on this channel?
|
if channels == {channel.encode()}: # can we only see them on this channel?
|
||||||
p.delete(chanspace) # remove channel tracking entry
|
p.delete(chanspace) # remove channel tracking entry
|
||||||
p.hdel("live.prefix." + name + "." + channel, nick) # remove prefix tracking entry
|
p.hdel(
|
||||||
|
"live.prefix." + name + "." + channel, nick
|
||||||
|
) # remove prefix tracking entry
|
||||||
p.hdel(mapspace, nick) # remove nick mapping entry
|
p.hdel(mapspace, nick) # remove nick mapping entry
|
||||||
if user:
|
if user:
|
||||||
p.srem(gnamespace, user) # remove global userinfo entry
|
p.srem(gnamespace, user) # remove global userinfo entry
|
||||||
|
@ -170,7 +173,10 @@ def getUserByNick(name, nick):
|
||||||
if main.r.hexists(mapspace, nick):
|
if main.r.hexists(mapspace, nick):
|
||||||
return main.r.hget(mapspace, nick)
|
return main.r.hget(mapspace, nick)
|
||||||
else:
|
else:
|
||||||
warn("Entry doesn't exist: %s on %s - attempting auxiliary lookup" % (nick, mapspace))
|
warn(
|
||||||
|
"Entry doesn't exist: %s on %s - attempting auxiliary lookup"
|
||||||
|
% (nick, mapspace)
|
||||||
|
)
|
||||||
# return False
|
# return False
|
||||||
# legacy code below - remove when map is reliable
|
# legacy code below - remove when map is reliable
|
||||||
usermatch = main.r.sscan(gnamespace, match=escape(nick) + "!*", count=999999999)
|
usermatch = main.r.sscan(gnamespace, match=escape(nick) + "!*", count=999999999)
|
||||||
|
@ -200,10 +206,18 @@ def renameUser(name, oldnick, olduser, newnick, newuser):
|
||||||
p.sadd("live.who." + name + "." + i, newnick)
|
p.sadd("live.who." + name + "." + i, newnick)
|
||||||
p.hdel(mapspace, oldnick)
|
p.hdel(mapspace, oldnick)
|
||||||
p.hset(mapspace, newnick, newuser)
|
p.hset(mapspace, newnick, newuser)
|
||||||
if main.r.exists("live.prefix." + name + "." + i): # if there's a prefix entry for the channel
|
if main.r.exists(
|
||||||
if main.r.hexists("live.prefix." + name + "." + i, oldnick): # if the old nick is in it
|
"live.prefix." + name + "." + i
|
||||||
mode = main.r.hget("live.prefix." + name + "." + i, oldnick) # retrieve old modes
|
): # if there's a prefix entry for the channel
|
||||||
p.hset("live.prefix." + name + "." + i, newnick, mode) # set old modes to new nickname
|
if main.r.hexists(
|
||||||
|
"live.prefix." + name + "." + i, oldnick
|
||||||
|
): # if the old nick is in it
|
||||||
|
mode = main.r.hget(
|
||||||
|
"live.prefix." + name + "." + i, oldnick
|
||||||
|
) # retrieve old modes
|
||||||
|
p.hset(
|
||||||
|
"live.prefix." + name + "." + i, newnick, mode
|
||||||
|
) # set old modes to new nickname
|
||||||
if main.r.exists(chanspace):
|
if main.r.exists(chanspace):
|
||||||
p.rename(chanspace, newchanspace)
|
p.rename(chanspace, newchanspace)
|
||||||
else:
|
else:
|
||||||
|
|
35
threshold
35
threshold
|
@ -1,14 +1,14 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
from twisted.internet import reactor
|
|
||||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
|
||||||
import sys
|
import sys
|
||||||
from signal import signal, SIGINT
|
from codecs import getwriter # fix printing odd shit to the terminal
|
||||||
|
from signal import SIGINT, signal
|
||||||
# from twisted.python import log
|
# from twisted.python import log
|
||||||
# from sys import stdout
|
# from sys import stdout
|
||||||
# log.startLogging(stdout)
|
# log.startLogging(stdout)
|
||||||
from sys import stdout, stderr # Import again because we want to override
|
from sys import stderr, stdout # Import again because we want to override
|
||||||
from codecs import getwriter # fix printing odd shit to the terminal
|
|
||||||
|
from twisted.internet import reactor
|
||||||
|
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||||
|
|
||||||
stdout = getwriter("utf8")(stdout) # this is a generic fix but we all know
|
stdout = getwriter("utf8")(stdout) # this is a generic fix but we all know
|
||||||
stderr = getwriter("utf8")(stderr) # it's just for the retards on Rizon using
|
stderr = getwriter("utf8")(stderr) # it's just for the retards on Rizon using
|
||||||
|
@ -23,11 +23,11 @@ if "--debug" in sys.argv: # yes really
|
||||||
main.config["Debug"] = True
|
main.config["Debug"] = True
|
||||||
if "--trace" in sys.argv:
|
if "--trace" in sys.argv:
|
||||||
main.config["Trace"] = True
|
main.config["Trace"] = True
|
||||||
from utils.logging.log import *
|
|
||||||
from utils.loaders.command_loader import loadCommands
|
|
||||||
from core.server import Server, ServerFactory
|
|
||||||
from core.relay import Relay, RelayFactory
|
|
||||||
import modules.counters
|
import modules.counters
|
||||||
|
from core.relay import Relay, RelayFactory
|
||||||
|
from core.server import Server, ServerFactory
|
||||||
|
from utils.loaders.command_loader import loadCommands
|
||||||
|
from utils.logging.log import *
|
||||||
|
|
||||||
loadCommands()
|
loadCommands()
|
||||||
import core.logstash
|
import core.logstash
|
||||||
|
@ -46,14 +46,20 @@ if __name__ == "__main__":
|
||||||
),
|
),
|
||||||
interface=main.config["Listener"]["Address"],
|
interface=main.config["Listener"]["Address"],
|
||||||
)
|
)
|
||||||
log("Threshold running with SSL on %s:%s" % (main.config["Listener"]["Address"], main.config["Listener"]["Port"]))
|
log(
|
||||||
|
"Threshold running with SSL on %s:%s"
|
||||||
|
% (main.config["Listener"]["Address"], main.config["Listener"]["Port"])
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
reactor.listenTCP(
|
reactor.listenTCP(
|
||||||
main.config["Listener"]["Port"],
|
main.config["Listener"]["Port"],
|
||||||
listener,
|
listener,
|
||||||
interface=main.config["Listener"]["Address"],
|
interface=main.config["Listener"]["Address"],
|
||||||
)
|
)
|
||||||
log("Threshold running on %s:%s" % (main.config["Listener"]["Address"], main.config["Listener"]["Port"]))
|
log(
|
||||||
|
"Threshold running on %s:%s"
|
||||||
|
% (main.config["Listener"]["Address"], main.config["Listener"]["Port"])
|
||||||
|
)
|
||||||
if main.config["RelayAPI"]["Enabled"]:
|
if main.config["RelayAPI"]["Enabled"]:
|
||||||
relay = RelayFactory()
|
relay = RelayFactory()
|
||||||
if main.config["RelayAPI"]["UseSSL"] == True:
|
if main.config["RelayAPI"]["UseSSL"] == True:
|
||||||
|
@ -76,7 +82,10 @@ if __name__ == "__main__":
|
||||||
relay,
|
relay,
|
||||||
interface=main.config["RelayAPI"]["Address"],
|
interface=main.config["RelayAPI"]["Address"],
|
||||||
)
|
)
|
||||||
log("Threshold relay running on %s:%s" % (main.config["RelayAPI"]["Address"], main.config["RelayAPI"]["Port"]))
|
log(
|
||||||
|
"Threshold relay running on %s:%s"
|
||||||
|
% (main.config["RelayAPI"]["Address"], main.config["RelayAPI"]["Port"])
|
||||||
|
)
|
||||||
for net in main.network.keys():
|
for net in main.network.keys():
|
||||||
main.network[net].start_bots()
|
main.network[net].start_bots()
|
||||||
modules.counters.setupCounterLoop()
|
modules.counters.setupCounterLoop()
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
import main
|
import sys
|
||||||
|
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
|
|
||||||
|
import main
|
||||||
from utils.logging.debug import debug
|
from utils.logging.debug import debug
|
||||||
from utils.logging.log import *
|
from utils.logging.log import *
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def handler(sig, frame):
|
def handler(sig, frame):
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
from datetime import datetime
|
|
||||||
from csiphash import siphash24
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
from datetime import datetime
|
||||||
from json import dumps
|
from json import dumps
|
||||||
|
|
||||||
|
from csiphash import siphash24
|
||||||
|
|
||||||
import main
|
import main
|
||||||
from utils.logging.debug import debug
|
from utils.logging.debug import debug
|
||||||
|
|
||||||
|
@ -10,16 +12,24 @@ def dedup(numName, b):
|
||||||
c = deepcopy(b)
|
c = deepcopy(b)
|
||||||
if "ts" in c.keys():
|
if "ts" in c.keys():
|
||||||
del c["ts"]
|
del c["ts"]
|
||||||
c["approxtime"] = str(datetime.utcnow().timestamp())[: main.config["Tweaks"]["DedupPrecision"]]
|
c["approxtime"] = str(datetime.utcnow().timestamp())[
|
||||||
|
: main.config["Tweaks"]["DedupPrecision"]
|
||||||
|
]
|
||||||
castHash = siphash24(main.hashKey, dumps(c, sort_keys=True).encode("utf-8"))
|
castHash = siphash24(main.hashKey, dumps(c, sort_keys=True).encode("utf-8"))
|
||||||
del c["approxtime"]
|
del c["approxtime"]
|
||||||
isDuplicate = any(castHash in main.lastEvents[x] for x in main.lastEvents.keys() if not x == numName)
|
isDuplicate = any(
|
||||||
|
castHash in main.lastEvents[x]
|
||||||
|
for x in main.lastEvents.keys()
|
||||||
|
if not x == numName
|
||||||
|
)
|
||||||
if isDuplicate:
|
if isDuplicate:
|
||||||
debug("Duplicate: %s" % (c))
|
debug("Duplicate: %s" % (c))
|
||||||
return True
|
return True
|
||||||
if numName in main.lastEvents.keys():
|
if numName in main.lastEvents.keys():
|
||||||
main.lastEvents[numName].insert(0, castHash)
|
main.lastEvents[numName].insert(0, castHash)
|
||||||
main.lastEvents[numName] = main.lastEvents[numName][0 : main.config["Tweaks"]["MaxHash"]]
|
main.lastEvents[numName] = main.lastEvents[numName][
|
||||||
|
0 : main.config["Tweaks"]["MaxHash"]
|
||||||
|
]
|
||||||
else:
|
else:
|
||||||
main.lastEvents[numName] = [castHash]
|
main.lastEvents[numName] = [castHash]
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
from os import listdir
|
from os import listdir
|
||||||
|
|
||||||
|
import commands
|
||||||
|
from main import CommandMap
|
||||||
from utils.logging.debug import debug
|
from utils.logging.debug import debug
|
||||||
from utils.logging.log import *
|
from utils.logging.log import *
|
||||||
import commands
|
|
||||||
|
|
||||||
from main import CommandMap
|
|
||||||
|
|
||||||
|
|
||||||
def loadCommands(allowDup=False):
|
def loadCommands(allowDup=False):
|
||||||
|
@ -15,11 +14,15 @@ def loadCommands(allowDup=False):
|
||||||
try:
|
try:
|
||||||
module = __import__("commands.%s" % commandName)
|
module = __import__("commands.%s" % commandName)
|
||||||
if not commandName in CommandMap:
|
if not commandName in CommandMap:
|
||||||
CommandMap[commandName] = getattr(getattr(module, commandName), className)
|
CommandMap[commandName] = getattr(
|
||||||
|
getattr(module, commandName), className
|
||||||
|
)
|
||||||
debug("Registered command: %s" % commandName)
|
debug("Registered command: %s" % commandName)
|
||||||
else:
|
else:
|
||||||
if allowDup:
|
if allowDup:
|
||||||
CommandMap[commandName] = getattr(getattr(module, commandName), className)
|
CommandMap[commandName] = getattr(
|
||||||
|
getattr(module, commandName), className
|
||||||
|
)
|
||||||
debug("Registered command: %s" % commandName)
|
debug("Registered command: %s" % commandName)
|
||||||
|
|
||||||
error("Duplicate command: %s" % (commandName))
|
error("Duplicate command: %s" % (commandName))
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
from os import listdir
|
|
||||||
from importlib import reload
|
|
||||||
import sys
|
import sys
|
||||||
|
from importlib import reload
|
||||||
|
from os import listdir
|
||||||
|
|
||||||
|
import commands
|
||||||
|
from main import CommandMap
|
||||||
from utils.logging.debug import debug
|
from utils.logging.debug import debug
|
||||||
from utils.logging.log import *
|
from utils.logging.log import *
|
||||||
import commands
|
|
||||||
|
|
||||||
from main import CommandMap
|
|
||||||
|
|
||||||
|
|
||||||
def loadSingle(commandName):
|
def loadSingle(commandName):
|
||||||
|
@ -15,7 +14,9 @@ def loadSingle(commandName):
|
||||||
try:
|
try:
|
||||||
if commandName in CommandMap.keys():
|
if commandName in CommandMap.keys():
|
||||||
reload(sys.modules["commands." + commandName])
|
reload(sys.modules["commands." + commandName])
|
||||||
CommandMap[commandName] = getattr(sys.modules["commands." + commandName], className)
|
CommandMap[commandName] = getattr(
|
||||||
|
sys.modules["commands." + commandName], className
|
||||||
|
)
|
||||||
debug("Reloaded command: %s" % commandName)
|
debug("Reloaded command: %s" % commandName)
|
||||||
return "RELOAD"
|
return "RELOAD"
|
||||||
module = __import__("commands.%s" % commandName)
|
module = __import__("commands.%s" % commandName)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import main
|
import main
|
||||||
|
|
||||||
|
|
||||||
# we need a seperate module to log.py, as log.py is imported by main.py, and we need to access main
|
# we need a seperate module to log.py, as log.py is imported by main.py, and we need to access main
|
||||||
# to read the setting
|
# to read the setting
|
||||||
def debug(*data):
|
def debug(*data):
|
||||||
|
|
Loading…
Reference in New Issue