From 6046329a83c3bb55833e52087cdc66895afc0e99 Mon Sep 17 00:00:00 2001 From: Mark Veidemanis Date: Sun, 20 Jan 2019 19:56:54 +0000 Subject: [PATCH] Start implementing relay abstractions for smarter network handling and minor cosmetic changes --- .gitignore | 2 + commands/alias.py | 50 +++++++++++++++++++++ commands/load.py | 3 ++ commands/relay.py | 54 +++++++++++++++++++++++ commands/save.py | 2 + conf/example/{wholist.json => alias.json} | 0 conf/example/relay.json | 1 + conf/help.json | 8 ++-- main.py | 3 +- utils/logging/send.py | 12 +++-- 10 files changed, 128 insertions(+), 7 deletions(-) create mode 100644 commands/alias.py create mode 100644 commands/relay.py rename conf/example/{wholist.json => alias.json} (100%) create mode 100644 conf/example/relay.json diff --git a/.gitignore b/.gitignore index 1b77df6..23ae7fa 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,7 @@ conf/keyword.json conf/counters.json conf/masterbuf.json conf/monitor.json +conf/alias.json +conf/relay.json conf/dist.sh env/ diff --git a/commands/alias.py b/commands/alias.py new file mode 100644 index 0000000..a466de8 --- /dev/null +++ b/commands/alias.py @@ -0,0 +1,50 @@ +import main +from yaml import dump + +class Alias: + def __init__(self, register): + register("alias", self.alias) + + def alias(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + if authed: + if length == 6: + if spl[1] == "add": + if spl[2] in main.alias.keys(): + failure("Alias already exists: %s" % spl[2]) + return + else: + main.alias[spl[2]] = {"nick": spl[3], + "ident": spl[4], + "realname": spl[5]} + success("Successfully created alias: %s" % spl[2]) + main.saveConf("alias") + return + else: + incUsage("alias") + return + + elif length == 3: + if spl[1] == "del": + if spl[2] in main.alias.keys(): + del main.alias[spl[2]] + success("Successfully removed alias: %s" % spl[2]) + main.saveConf("alias") + return + else: + failure("No such alias: %s" % spl[2]) + return + else: + incUsage("alias") + return + elif length == 2: + if spl[1] == "list": + info(dump(main.alias)) + return + else: + incUsage("alias") + return + else: + incUsage("alias") + return + else: + incUsage(None) diff --git a/commands/load.py b/commands/load.py index 91e168a..dc35292 100644 --- a/commands/load.py +++ b/commands/load.py @@ -16,6 +16,9 @@ class Load: main.loadConf(i) success("Loaded %s from %s" % (i, main.filemap[i][0])) return + elif spl[1] == "list": + info(", ".join(main.filemap.keys())) + return else: incUsage("load") return diff --git a/commands/relay.py b/commands/relay.py new file mode 100644 index 0000000..d611fc2 --- /dev/null +++ b/commands/relay.py @@ -0,0 +1,54 @@ +import main +from yaml import dump + +class Relay: + def __init__(self, register): + register("relay", self.relay) + + def relay(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length): + if authed: + if length == 7: + if spl[1] == "add": + if spl[2] in main.relay.keys(): + failure("Relay already exists: %s" % spl[2]) + return + else: + if not spl[4].isdigit(): + failure("Port must be an integer, not %s" % spl[4]) + return + main.relay[spl[2]] = {"host": spl[3], + "port": spl[4], + "user": spl[5], + "password": spl[6]} + success("Successfully created relay: %s" % spl[2]) + main.saveConf("relay") + return + else: + incUsage("relay") + return + + elif length == 3: + if spl[1] == "del": + if spl[2] in main.relay.keys(): + del main.relay[spl[2]] + success("Successfully removed relay: %s" % spl[2]) + main.saveConf("relay") + return + else: + failure("No such relay: %s" % spl[2]) + return + else: + incUsage("relay") + return + elif length == 2: + if spl[1] == "list": + info(dump(main.relay)) + return + else: + incUsage("relay") + return + else: + incUsage("relay") + return + else: + incUsage(None) diff --git a/commands/save.py b/commands/save.py index aebec15..492896b 100644 --- a/commands/save.py +++ b/commands/save.py @@ -16,6 +16,8 @@ class Save: main.saveConf(i) success("Saved %s to %s" % (i, main.filemap[i][0])) return + elif spl[1] == "list": + info(", ".join(main.filemap.keys())) else: incUsage("save") return diff --git a/conf/example/wholist.json b/conf/example/alias.json similarity index 100% rename from conf/example/wholist.json rename to conf/example/alias.json diff --git a/conf/example/relay.json b/conf/example/relay.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/conf/example/relay.json @@ -0,0 +1 @@ +{} diff --git a/conf/help.json b/conf/help.json index 995abdb..d4d8c7b 100644 --- a/conf/help.json +++ b/conf/help.json @@ -14,12 +14,14 @@ "disable": "disable ", "list": "list", "stats": "stats []", - "save": "save ", - "load": "load ", + "save": "save <(file)|list|all>", + "load": "load <(file)|list|all>", "dist": "dist", "loadmod": "loadmod ", "msg": "msg ", "mon": "mon -h", "chans": "chans [ ...]", - "users": "users [ ...]" + "users": "users [ ...]", + "alias": "alias [ ]", + "relay": "relay [ " } diff --git a/main.py b/main.py index cc08e94..aa54dca 100644 --- a/main.py +++ b/main.py @@ -12,10 +12,11 @@ filemap = { "keyconf": ["keyword.json", "keyword lists"], "pool": ["pool.json", "pool"], "help": ["help.json", "command help"], -# "wholist": ["wholist.json", "WHO lists"], "counters": ["counters.json", "counters file"], "masterbuf": ["masterbuf.json", "master buffer"], "monitor": ["monitor.json", "monitoring database"], + "alias": ["alias.json", "alias details"], + "relay": ["relay.json", "relay list"], } connections = {} diff --git a/utils/logging/send.py b/utils/logging/send.py index dd6bfab..50b858a 100644 --- a/utils/logging/send.py +++ b/utils/logging/send.py @@ -3,14 +3,20 @@ import main def sendData(addr, data): main.connections[addr].send(data) +def sendWithPrefix(addr, data, prefix): + toSend = "" + for i in data.split("\n"): + toSend += prefix + " " + i + "\n" + sendData(addr, toSend) + def sendSuccess(addr, data): - sendData(addr, "[y] " + data) + sendWithPrefix(addr, data, "[y]") def sendFailure(addr, data): - sendData(addr, "[n] " + data) + sendWithPrefix(addr, data, "[n]") def sendInfo(addr, data): - sendData(addr, "[i] " + data) + sendWithPrefix(addr, data, "[i]") def sendAll(data): for i in main.connections: