Implement indexing into Apache Druid #1
|
@ -1,13 +1,21 @@
|
|||
repos:
|
||||
- repo: https://github.com/ambv/black
|
||||
rev: 22.3.0
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 22.6.0
|
||||
hooks:
|
||||
- id: black
|
||||
args:
|
||||
- --line-length=120
|
||||
- repo: https://gitlab.com/pycqa/flake8
|
||||
exclude: ^core/migrations
|
||||
- repo: https://github.com/PyCQA/isort
|
||||
rev: 5.10.1
|
||||
hooks:
|
||||
- id: isort
|
||||
- repo: https://github.com/PyCQA/flake8
|
||||
rev: 4.0.1
|
||||
hooks:
|
||||
- id: flake8
|
||||
args:
|
||||
- "--max-line-length=120"
|
||||
args: [--max-line-length=88]
|
||||
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):
|
||||
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 length > 2:
|
||||
for i in main.network.keys():
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import main
|
||||
from yaml import dump
|
||||
|
||||
import main
|
||||
from modules import alias
|
||||
|
||||
|
||||
|
@ -7,7 +8,9 @@ class AliasCommand:
|
|||
def __init__(self, *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 length == 1:
|
||||
info(dump(main.alias))
|
||||
|
|
|
@ -6,7 +6,9 @@ class AllCommand:
|
|||
def __init__(self, *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 length > 2:
|
||||
for i in main.network.keys():
|
||||
|
@ -15,7 +17,10 @@ class AllCommand:
|
|||
net = main.network[i].relays[x]["net"]
|
||||
alias = main.alias[x]["nick"]
|
||||
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)
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -6,7 +6,9 @@ class AllcCommand:
|
|||
def __init__(self, *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 length > 4:
|
||||
targets = []
|
||||
|
@ -20,7 +22,8 @@ class AllcCommand:
|
|||
[
|
||||
targets.append((i, x))
|
||||
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:
|
||||
incUsage("allc")
|
||||
|
@ -33,7 +36,10 @@ class AllcCommand:
|
|||
num = i[1]
|
||||
alias = main.alias[num]["nick"]
|
||||
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)
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -5,7 +5,9 @@ class AuthcheckCommand:
|
|||
def __init__(self, *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 length == 1:
|
||||
results = []
|
||||
|
@ -13,7 +15,9 @@ class AuthcheckCommand:
|
|||
num = main.IRCPool[i].num
|
||||
net = main.IRCPool[i].net
|
||||
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))
|
||||
return
|
||||
elif length == 2:
|
||||
|
@ -27,7 +31,9 @@ class AuthcheckCommand:
|
|||
if not net == spl[1]:
|
||||
continue
|
||||
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))
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -6,7 +6,9 @@ class AutoCommand:
|
|||
def __init__(self, *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 length == 1:
|
||||
for i in main.network.keys():
|
||||
|
@ -14,9 +16,15 @@ class AutoCommand:
|
|||
info("Skipping %s - first relay exists" % i)
|
||||
else:
|
||||
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)
|
||||
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")
|
||||
return
|
||||
elif length == 2:
|
||||
|
@ -27,9 +35,15 @@ class AutoCommand:
|
|||
failure("First relay exists on %s" % spl[1])
|
||||
return
|
||||
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])
|
||||
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")
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
import main
|
||||
from yaml import dump
|
||||
|
||||
import main
|
||||
|
||||
|
||||
class BlacklistCommand:
|
||||
def __init__(self, *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 length == 1:
|
||||
info(dump(main.blacklist))
|
||||
|
|
|
@ -6,7 +6,9 @@ class ChansCommand:
|
|||
def __init__(self, *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 len(spl) < 2:
|
||||
incUsage("chans")
|
||||
|
|
|
@ -6,7 +6,9 @@ class CmdCommand:
|
|||
def __init__(self, *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 length > 4:
|
||||
if not spl[1].isdigit():
|
||||
|
|
|
@ -6,7 +6,9 @@ class ConfirmCommand:
|
|||
def __init__(self, *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 length == 4:
|
||||
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]))
|
||||
return
|
||||
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
|
||||
else:
|
||||
incUsage("confirm")
|
||||
|
|
|
@ -6,7 +6,9 @@ class DisableCommand:
|
|||
def __init__(self, *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 length == 3:
|
||||
if not spl[1] in main.network.keys():
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
from subprocess import PIPE, run
|
||||
|
||||
import main
|
||||
from subprocess import run, PIPE
|
||||
|
||||
|
||||
class DistCommand:
|
||||
def __init__(self, *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 main.config["Dist"]["Enabled"]:
|
||||
rtrn = run([main.config["Dist"]["File"]], shell=True, stdout=PIPE)
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
import main
|
||||
from yaml import dump
|
||||
|
||||
import main
|
||||
|
||||
|
||||
class EmailCommand:
|
||||
def __init__(self, *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 length == 4:
|
||||
if spl[1] == "add":
|
||||
|
@ -19,10 +22,16 @@ class EmailCommand:
|
|||
return
|
||||
if not domain in main.irc["_"]["domains"]:
|
||||
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")
|
||||
else:
|
||||
failure("Domain already exists in default config: %s" % domain)
|
||||
failure(
|
||||
"Domain already exists in default config: %s"
|
||||
% domain
|
||||
)
|
||||
return
|
||||
elif spl[1] == "del":
|
||||
if not spl[2].isdigit():
|
||||
|
@ -32,10 +41,16 @@ class EmailCommand:
|
|||
|
||||
if domain in main.irc["_"]["domains"]:
|
||||
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")
|
||||
else:
|
||||
failure("Domain does not exist in default config: %s" % domain)
|
||||
failure(
|
||||
"Domain does not exist in default config: %s"
|
||||
% domain
|
||||
)
|
||||
return
|
||||
|
||||
else:
|
||||
|
@ -47,10 +62,15 @@ class EmailCommand:
|
|||
if not spl[3] in main.alias[num]["emails"]:
|
||||
main.alias[num]["emails"].append(spl[3])
|
||||
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
|
||||
else:
|
||||
failure("Email already exists in alias %i: %s" % (num, spl[3]))
|
||||
failure(
|
||||
"Email already exists in alias %i: %s" % (num, spl[3])
|
||||
)
|
||||
return
|
||||
elif spl[1] == "del":
|
||||
if not num in main.alias.keys():
|
||||
|
@ -59,10 +79,15 @@ class EmailCommand:
|
|||
if spl[3] in main.alias[num]["emails"]:
|
||||
main.alias[num]["emails"].remove(spl[3])
|
||||
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
|
||||
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
|
||||
elif length == 2:
|
||||
if spl[1] == "list":
|
||||
|
@ -74,7 +99,12 @@ class EmailCommand:
|
|||
elif length == 3:
|
||||
if spl[1] == "list":
|
||||
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))
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -6,7 +6,9 @@ class EnableCommand:
|
|||
def __init__(self, *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 length == 3:
|
||||
if not spl[1] in main.network.keys():
|
||||
|
|
|
@ -5,7 +5,9 @@ class ExecCommand:
|
|||
def __init__(self, *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 length > 1:
|
||||
try:
|
||||
|
|
|
@ -5,7 +5,9 @@ class HelpCommand:
|
|||
def __init__(self, *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:
|
||||
helpMap = []
|
||||
for i in main.help.keys():
|
||||
|
|
|
@ -6,7 +6,9 @@ class JoinCommand:
|
|||
def __init__(self, *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 length == 3:
|
||||
if not spl[1] in main.network.keys():
|
||||
|
|
|
@ -5,7 +5,9 @@ class ListCommand:
|
|||
def __init__(self, *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 length == 1:
|
||||
for i in main.network.keys():
|
||||
|
|
|
@ -5,7 +5,9 @@ class LoadCommand:
|
|||
def __init__(self, *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 length == 2:
|
||||
if spl[1] in main.filemap.keys():
|
||||
|
|
|
@ -6,7 +6,9 @@ class LoadmodCommand:
|
|||
def __init__(self, *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 length == 2:
|
||||
rtrn = loadSingle(spl[1])
|
||||
|
|
|
@ -5,7 +5,9 @@ class LogoutCommand:
|
|||
def __init__(self, *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:
|
||||
obj.authed = False
|
||||
success("Logged out")
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
import main
|
||||
from yaml import dump
|
||||
|
||||
import main
|
||||
|
||||
|
||||
class ModCommand:
|
||||
# This could be greatly improved, but not really important right now
|
||||
def __init__(self, *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 length == 4:
|
||||
if not spl[1] in main.network.keys():
|
||||
|
@ -21,7 +24,9 @@ class ModCommand:
|
|||
return
|
||||
|
||||
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
|
||||
# Find a better way to do this
|
||||
# elif length == 6:
|
||||
|
|
|
@ -5,7 +5,9 @@ class MsgCommand:
|
|||
def __init__(self, *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 length >= 5:
|
||||
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:
|
||||
info("Bot not on channel: %s" % spl[3])
|
||||
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
|
||||
else:
|
||||
incUsage("msg")
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
import main
|
||||
from yaml import dump
|
||||
from modules.network import Network
|
||||
from string import digits
|
||||
|
||||
from yaml import dump
|
||||
|
||||
import main
|
||||
from modules.network import Network
|
||||
|
||||
|
||||
class NetworkCommand:
|
||||
def __init__(self, *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 length == 7:
|
||||
if spl[1] == "add":
|
||||
|
@ -28,7 +32,9 @@ class NetworkCommand:
|
|||
failure("Auth must be sasl, ns or none, not %s" % spl[5])
|
||||
return
|
||||
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])
|
||||
main.saveConf("network")
|
||||
return
|
||||
|
|
|
@ -5,7 +5,9 @@ class PartCommand:
|
|||
def __init__(self, *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 length == 4:
|
||||
if not spl[1] in main.network.keys():
|
||||
|
|
|
@ -5,7 +5,9 @@ class PassCommand:
|
|||
def __init__(self, *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:
|
||||
info("You are already authenticated")
|
||||
return
|
||||
|
|
|
@ -5,14 +5,19 @@ class PendingCommand:
|
|||
def __init__(self, *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 length == 1:
|
||||
results = []
|
||||
for i in main.network.keys():
|
||||
for x in main.network[i].relays.keys():
|
||||
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))
|
||||
return
|
||||
elif length == 2:
|
||||
|
@ -22,7 +27,10 @@ class PendingCommand:
|
|||
results = []
|
||||
for x in main.network[spl[1]].relays.keys():
|
||||
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))
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -5,7 +5,9 @@ class RecheckauthCommand:
|
|||
def __init__(self, *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 length == 1:
|
||||
results = []
|
||||
|
|
|
@ -6,7 +6,9 @@ class RegCommand:
|
|||
def __init__(self, *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 length == 2:
|
||||
if not spl[1] in main.network.keys():
|
||||
|
|
|
@ -1,18 +1,24 @@
|
|||
import main
|
||||
from yaml import dump
|
||||
|
||||
import main
|
||||
|
||||
|
||||
class RelayCommand:
|
||||
def __init__(self, *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 length == 3:
|
||||
if spl[1] == "add":
|
||||
if spl[2] in main.network.keys():
|
||||
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")
|
||||
return
|
||||
else:
|
||||
|
@ -35,7 +41,10 @@ class RelayCommand:
|
|||
failure("Must be a number, not %s" % spl[3])
|
||||
return
|
||||
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")
|
||||
return
|
||||
else:
|
||||
|
@ -52,7 +61,9 @@ class RelayCommand:
|
|||
failure("No such relay: %s on network %s" % (spl[3], spl[2]))
|
||||
return
|
||||
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")
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -5,7 +5,9 @@ class SaveCommand:
|
|||
def __init__(self, *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 length == 2:
|
||||
if spl[1] in main.filemap.keys():
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
from string import digits
|
||||
|
||||
import main
|
||||
import modules.counters as count
|
||||
import modules.userinfo as userinfo
|
||||
from string import digits
|
||||
|
||||
|
||||
class StatsCommand:
|
||||
def __init__(self, *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 length == 1:
|
||||
stats = []
|
||||
|
|
|
@ -5,7 +5,9 @@ class SwhoCommand:
|
|||
def __init__(self, *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 length == 2:
|
||||
if not spl[1] in main.network.keys():
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
import main
|
||||
from yaml import dump
|
||||
from uuid import uuid4
|
||||
|
||||
from yaml import dump
|
||||
|
||||
import main
|
||||
|
||||
|
||||
class TokenCommand:
|
||||
def __init__(self, *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 length == 2:
|
||||
if spl[1] == "list":
|
||||
|
|
|
@ -6,7 +6,9 @@ class UsersCommand:
|
|||
def __init__(self, *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 len(spl) < 2:
|
||||
incUsage("users")
|
||||
|
|
|
@ -6,7 +6,9 @@ class WhoCommand:
|
|||
def __init__(self, *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 length == 2:
|
||||
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
|
||||
from string import digits
|
||||
from random import randint
|
||||
from copy import deepcopy
|
||||
from datetime import datetime
|
||||
from random import randint
|
||||
from string import digits
|
||||
|
||||
from modules import userinfo
|
||||
from modules import counters
|
||||
from modules import monitor
|
||||
from modules import chankeep
|
||||
from modules import regproc
|
||||
|
||||
from core.relay import sendRelayNotification
|
||||
from utils.dedup import dedup
|
||||
from utils.get import getRelay
|
||||
from twisted.internet import reactor, task
|
||||
from twisted.internet.defer import Deferred
|
||||
from twisted.internet.protocol import ReconnectingClientFactory
|
||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||
from twisted.internet.task import LoopingCall
|
||||
from twisted.words.protocols.irc import (IRCBadMessage, IRCClient, lowDequote,
|
||||
numeric_to_symbolic,
|
||||
symbolic_to_numeric)
|
||||
|
||||
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.log import *
|
||||
from utils.logging.send import *
|
||||
from utils.parsing import parsen
|
||||
|
||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||
|
||||
|
||||
def deliverRelayCommands(num, relayCommands, user=None, stage2=None):
|
||||
keyFN = main.certPath + main.config["Key"]
|
||||
certFN = main.certPath + main.config["Certificate"]
|
||||
contextFactory = DefaultOpenSSLContextFactory(keyFN.encode("utf-8", "replace"), certFN.encode("utf-8", "replace"))
|
||||
bot = IRCBotFactory(net=None, num=num, relayCommands=relayCommands, user=user, stage2=stage2)
|
||||
contextFactory = DefaultOpenSSLContextFactory(
|
||||
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)
|
||||
rct = reactor.connectSSL(host, port, bot, contextFactory)
|
||||
|
||||
|
@ -165,7 +158,9 @@ class IRCBot(IRCClient):
|
|||
self.listAttempted = False # we asked for a list
|
||||
self.listSimple = False # after asking again we got the list, so use the simple
|
||||
# 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.prefix = {}
|
||||
self.servername = None
|
||||
|
@ -197,9 +192,14 @@ class IRCBot(IRCClient):
|
|||
if not i in self.channels:
|
||||
if self.net in main.blacklist.keys():
|
||||
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
|
||||
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)
|
||||
sleeptime += increment
|
||||
if sleeptime == 10:
|
||||
|
@ -207,11 +207,17 @@ class IRCBot(IRCClient):
|
|||
increment = 0.7
|
||||
increment += 0.1
|
||||
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):
|
||||
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
|
||||
if self.net in main.TempChan.keys():
|
||||
if self.num in main.TempChan[self.net].keys():
|
||||
|
@ -225,7 +231,9 @@ class IRCBot(IRCClient):
|
|||
cast["ts"] = str(datetime.now().isoformat())
|
||||
|
||||
# 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
|
||||
del cast[i]
|
||||
# remove server stuff
|
||||
|
@ -359,7 +367,9 @@ class IRCBot(IRCClient):
|
|||
|
||||
def irc_ERR_PASSWDMISMATCH(self, prefix, params):
|
||||
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):
|
||||
d = Deferred()
|
||||
|
@ -474,12 +484,17 @@ class IRCBot(IRCClient):
|
|||
debug("Will not send LIST, unauthenticated: %s - %i" % (self.net, self.num))
|
||||
return
|
||||
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
|
||||
else:
|
||||
self.listAttempted = True
|
||||
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
|
||||
else:
|
||||
if nocheck:
|
||||
|
@ -504,7 +519,9 @@ class IRCBot(IRCClient):
|
|||
self._tempList[1].append([channel, users, topic])
|
||||
|
||||
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")
|
||||
self._tempList[0].clear()
|
||||
self._tempList[1].clear()
|
||||
|
@ -529,7 +546,10 @@ class IRCBot(IRCClient):
|
|||
else:
|
||||
if self.listRetried:
|
||||
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
|
||||
|
||||
def got_list(self, listinfo):
|
||||
|
@ -543,7 +563,10 @@ class IRCBot(IRCClient):
|
|||
name = self.net + "1"
|
||||
if main.IRCPool[name].wantList == 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.chanlimit:
|
||||
if allRelays:
|
||||
|
@ -560,7 +583,9 @@ class IRCBot(IRCClient):
|
|||
]: # TODO: add check for register request sent, only send it once
|
||||
if main.config["AutoReg"]:
|
||||
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)
|
||||
try:
|
||||
self.chanlimit = int(chanlimit)
|
||||
|
@ -568,7 +593,9 @@ class IRCBot(IRCClient):
|
|||
warn("Invalid chanlimit: %s" % i)
|
||||
if self.chanlimit == 0:
|
||||
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()
|
||||
|
||||
def seed_prefix(self, prefix):
|
||||
|
@ -669,7 +696,9 @@ class IRCBot(IRCClient):
|
|||
if negativepass == True:
|
||||
if self._negativePass == None:
|
||||
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"]:
|
||||
debug("Sending ping - %s - %i" % (self.net, self.num))
|
||||
self.msg(sinst["entity"], sinst["pingmsg"])
|
||||
|
@ -725,7 +754,9 @@ class IRCBot(IRCClient):
|
|||
lc = self._getWho[channel]
|
||||
lc.stop()
|
||||
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 --
|
||||
# other bots have different nicknames so
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import logstash
|
||||
import logging
|
||||
|
||||
from json import dumps, loads
|
||||
|
||||
import logstash
|
||||
|
||||
import main
|
||||
from utils.logging.log import *
|
||||
|
||||
|
|
|
@ -24,7 +24,9 @@ def parseCommand(addr, authed, data):
|
|||
failure("No text was sent")
|
||||
return
|
||||
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
|
||||
incUsage(None)
|
||||
return
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from twisted.internet.protocol import Protocol, Factory, ClientFactory
|
||||
from json import dumps, loads
|
||||
from copy import deepcopy
|
||||
from json import dumps, loads
|
||||
|
||||
from twisted.internet.protocol import ClientFactory, Factory, Protocol
|
||||
|
||||
import main
|
||||
from utils.logging.log import *
|
||||
|
@ -114,8 +115,13 @@ class Relay(Protocol):
|
|||
|
||||
def handleHello(self, parsed):
|
||||
if parsed["key"] in main.tokens.keys():
|
||||
if parsed["hello"] == main.tokens[parsed["key"]]["hello"] and main.tokens[parsed["key"]]["usage"] == "relay":
|
||||
self.sendMsg({"type": "hello", "hello": main.tokens[parsed["key"]]["counter"]})
|
||||
if (
|
||||
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
|
||||
else:
|
||||
self.transport.loseConnection()
|
||||
|
@ -130,7 +136,10 @@ class Relay(Protocol):
|
|||
|
||||
def connectionLost(self, reason):
|
||||
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():
|
||||
del main.relayConnections[self.addr]
|
||||
else:
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
from twisted.internet.protocol import Protocol, Factory, ClientFactory
|
||||
import main
|
||||
from utils.logging.log import *
|
||||
from twisted.internet.protocol import ClientFactory, Factory, Protocol
|
||||
|
||||
import main
|
||||
from core.parser import parseCommand
|
||||
from utils.logging.log import *
|
||||
|
||||
|
||||
class Server(Protocol):
|
||||
|
@ -34,7 +34,10 @@ class Server(Protocol):
|
|||
|
||||
def connectionLost(self, reason):
|
||||
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():
|
||||
del main.connections[self.addr]
|
||||
else:
|
||||
|
|
13
main.py
13
main.py
|
@ -1,8 +1,9 @@
|
|||
import json
|
||||
import pickle
|
||||
from redis import StrictRedis
|
||||
from string import digits
|
||||
from os import urandom
|
||||
from string import digits
|
||||
|
||||
from redis import StrictRedis
|
||||
|
||||
from utils.logging.log import *
|
||||
|
||||
|
@ -106,5 +107,9 @@ def initConf():
|
|||
def initMain():
|
||||
global r, g
|
||||
initConf()
|
||||
r = StrictRedis(unix_socket_path=config["RedisSocket"], db=config["RedisDBEphemeral"]) # Ephemeral - flushed on quit
|
||||
g = StrictRedis(unix_socket_path=config["RedisSocket"], db=config["RedisDBPersistent"]) # Persistent
|
||||
r = StrictRedis(
|
||||
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 re
|
||||
|
||||
import main
|
||||
|
||||
|
||||
def generate_password():
|
||||
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 math import ceil
|
||||
import modules.provision
|
||||
|
||||
from twisted.internet.threads import deferToThread
|
||||
|
||||
import main
|
||||
import modules.provision
|
||||
from utils.logging.debug import *
|
||||
from utils.logging.log import *
|
||||
|
||||
|
||||
def allRelaysActive(net):
|
||||
relayNum = len(main.network[net].relays.keys())
|
||||
|
@ -46,7 +48,10 @@ def emptyChanAllocate(net, flist, relay, new):
|
|||
if toalloc > sum(chanfree[0].values()):
|
||||
correction = round(toalloc - sum(chanfree[0].values()) / chanfree[1])
|
||||
# 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)
|
||||
return False
|
||||
for i in chanfree[0].keys():
|
||||
|
@ -99,12 +104,18 @@ def keepChannels(net, listinfo, mean, sigrelay, relay):
|
|||
listinfo = minifyChans(net, listinfo)
|
||||
if not listinfo:
|
||||
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
|
||||
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
|
||||
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
|
||||
if coverAll:
|
||||
needed = relay - len(main.network[net].relays.keys())
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import main
|
||||
from twisted.internet.task import LoopingCall
|
||||
|
||||
import main
|
||||
|
||||
|
||||
def event(name, eventType):
|
||||
if not "local" in main.counters.keys():
|
||||
|
|
|
@ -2,10 +2,9 @@ from copy import deepcopy
|
|||
from json import dumps
|
||||
|
||||
import main
|
||||
from core.relay import sendRelayNotification
|
||||
from core.logstash import sendLogstashNotification
|
||||
from modules import userinfo
|
||||
from modules import regproc
|
||||
from core.relay import sendRelayNotification
|
||||
from modules import regproc, userinfo
|
||||
from utils.dedup import dedup
|
||||
|
||||
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):
|
||||
return
|
||||
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||
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.chankeep import nukeNetwork
|
||||
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.logging.log import *
|
||||
|
||||
|
||||
class Network:
|
||||
|
@ -77,7 +78,9 @@ class Network:
|
|||
# e.g. freenode1 for the first relay on freenode network
|
||||
keyFN = main.certPath + main.config["Key"]
|
||||
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)
|
||||
# host, port = self.relays[num]["host"], self.relays[num]["port"]
|
||||
host, port = getRelay(num)
|
||||
|
|
|
@ -1,11 +1,25 @@
|
|||
from twisted.internet import reactor
|
||||
|
||||
import main
|
||||
import modules.regproc
|
||||
from core.bot import deliverRelayCommands
|
||||
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("altnick", altnick)
|
||||
print("emails", emails)
|
||||
|
@ -16,17 +30,25 @@ def provisionUserNetworkData(num, nick, altnick, ident, realname, emails, networ
|
|||
stage2commands["status"] = []
|
||||
commands["controlpanel"] = []
|
||||
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("Set Nick %s %s" % (user, nick))
|
||||
commands["controlpanel"].append("Set Altnick %s %s" % (user, altnick))
|
||||
commands["controlpanel"].append("Set Ident %s %s" % (user, ident))
|
||||
commands["controlpanel"].append("Set RealName %s %s" % (user, realname))
|
||||
if security == "ssl":
|
||||
commands["controlpanel"].append("SetNetwork TrustAllCerts %s %s true" % (user, network)) # Don't judge me
|
||||
commands["controlpanel"].append("AddServer %s %s %s +%s" % (user, network, host, port))
|
||||
commands["controlpanel"].append(
|
||||
"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":
|
||||
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"]:
|
||||
stage2commands["status"].append("Disconnect")
|
||||
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 random import choice
|
||||
|
||||
import main
|
||||
from modules import provision
|
||||
from utils.logging.debug import *
|
||||
from utils.logging.log import *
|
||||
|
||||
|
||||
def needToRegister(net):
|
||||
# Check if the network does not support authentication
|
||||
networkObj = main.network[net]
|
||||
|
@ -112,8 +114,12 @@ def enableAuthentication(net, num):
|
|||
auth = obj.auth
|
||||
password = obj.aliases[num]["password"]
|
||||
uname = main.alias[num]["nick"] + "/" + net
|
||||
provision.provisionAuthenticationData(num, nick, net, security, auth, password) # Set up for auth
|
||||
main.IRCPool[net + str(num)].msg(main.config["Tweaks"]["ZNC"]["Prefix"] + "status", "Jump")
|
||||
provision.provisionAuthenticationData(
|
||||
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:
|
||||
confirmRegistration(net, num)
|
||||
|
||||
|
@ -129,10 +135,14 @@ def registerTest(c):
|
|||
if not main.IRCPool[name]._negativePass == True:
|
||||
if c["type"] == "query" and c["nick"] == sinst["entity"]:
|
||||
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
|
||||
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
|
||||
if sinst["ping"]:
|
||||
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 twisted.internet.threads import deferToThread
|
||||
|
||||
import main
|
||||
from utils.logging.log import *
|
||||
from utils.logging.debug import debug, trace
|
||||
from utils.logging.log import *
|
||||
from utils.parsing import parsen
|
||||
|
||||
|
||||
|
@ -145,7 +146,9 @@ def delUser(name, channel, nick, user):
|
|||
p.srem(namespace, nick)
|
||||
if channels == {channel.encode()}: # can we only see them on this channel?
|
||||
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
|
||||
if user:
|
||||
p.srem(gnamespace, user) # remove global userinfo entry
|
||||
|
@ -170,7 +173,10 @@ def getUserByNick(name, nick):
|
|||
if main.r.hexists(mapspace, nick):
|
||||
return main.r.hget(mapspace, nick)
|
||||
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
|
||||
# legacy code below - remove when map is reliable
|
||||
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.hdel(mapspace, oldnick)
|
||||
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.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(
|
||||
"live.prefix." + name + "." + i
|
||||
): # if there's a prefix entry for the channel
|
||||
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):
|
||||
p.rename(chanspace, newchanspace)
|
||||
else:
|
||||
|
|
35
threshold
35
threshold
|
@ -1,14 +1,14 @@
|
|||
#!/usr/bin/env python
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||
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 sys import stdout
|
||||
# log.startLogging(stdout)
|
||||
from sys import stdout, stderr # Import again because we want to override
|
||||
from codecs import getwriter # fix printing odd shit to the terminal
|
||||
from sys import stderr, stdout # Import again because we want to override
|
||||
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||
|
||||
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
|
||||
|
@ -23,11 +23,11 @@ if "--debug" in sys.argv: # yes really
|
|||
main.config["Debug"] = True
|
||||
if "--trace" in sys.argv:
|
||||
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
|
||||
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()
|
||||
import core.logstash
|
||||
|
@ -46,14 +46,20 @@ if __name__ == "__main__":
|
|||
),
|
||||
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:
|
||||
reactor.listenTCP(
|
||||
main.config["Listener"]["Port"],
|
||||
listener,
|
||||
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"]:
|
||||
relay = RelayFactory()
|
||||
if main.config["RelayAPI"]["UseSSL"] == True:
|
||||
|
@ -76,7 +82,10 @@ if __name__ == "__main__":
|
|||
relay,
|
||||
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():
|
||||
main.network[net].start_bots()
|
||||
modules.counters.setupCounterLoop()
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
import main
|
||||
import sys
|
||||
|
||||
from twisted.internet import reactor
|
||||
|
||||
import main
|
||||
from utils.logging.debug import debug
|
||||
from utils.logging.log import *
|
||||
import sys
|
||||
|
||||
|
||||
def handler(sig, frame):
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
from datetime import datetime
|
||||
from csiphash import siphash24
|
||||
from copy import deepcopy
|
||||
from datetime import datetime
|
||||
from json import dumps
|
||||
|
||||
from csiphash import siphash24
|
||||
|
||||
import main
|
||||
from utils.logging.debug import debug
|
||||
|
||||
|
@ -10,16 +12,24 @@ def dedup(numName, b):
|
|||
c = deepcopy(b)
|
||||
if "ts" in c.keys():
|
||||
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"))
|
||||
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:
|
||||
debug("Duplicate: %s" % (c))
|
||||
return True
|
||||
if numName in main.lastEvents.keys():
|
||||
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:
|
||||
main.lastEvents[numName] = [castHash]
|
||||
return False
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
from os import listdir
|
||||
|
||||
import commands
|
||||
from main import CommandMap
|
||||
from utils.logging.debug import debug
|
||||
from utils.logging.log import *
|
||||
import commands
|
||||
|
||||
from main import CommandMap
|
||||
|
||||
|
||||
def loadCommands(allowDup=False):
|
||||
|
@ -15,11 +14,15 @@ def loadCommands(allowDup=False):
|
|||
try:
|
||||
module = __import__("commands.%s" % commandName)
|
||||
if not commandName in CommandMap:
|
||||
CommandMap[commandName] = getattr(getattr(module, commandName), className)
|
||||
CommandMap[commandName] = getattr(
|
||||
getattr(module, commandName), className
|
||||
)
|
||||
debug("Registered command: %s" % commandName)
|
||||
else:
|
||||
if allowDup:
|
||||
CommandMap[commandName] = getattr(getattr(module, commandName), className)
|
||||
CommandMap[commandName] = getattr(
|
||||
getattr(module, commandName), className
|
||||
)
|
||||
debug("Registered command: %s" % commandName)
|
||||
|
||||
error("Duplicate command: %s" % (commandName))
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
from os import listdir
|
||||
from importlib import reload
|
||||
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.log import *
|
||||
import commands
|
||||
|
||||
from main import CommandMap
|
||||
|
||||
|
||||
def loadSingle(commandName):
|
||||
|
@ -15,7 +14,9 @@ def loadSingle(commandName):
|
|||
try:
|
||||
if commandName in CommandMap.keys():
|
||||
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)
|
||||
return "RELOAD"
|
||||
module = __import__("commands.%s" % commandName)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 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
|
||||
def debug(*data):
|
||||
|
|
Loading…
Reference in New Issue