diff --git a/keyword.json b/keyword.json new file mode 100644 index 0000000..cc4da5b --- /dev/null +++ b/keyword.json @@ -0,0 +1,6 @@ +{ + "Keywords": [ + "kek" + ], + "KeywordsExcept": {} +} \ No newline at end of file diff --git a/threshold b/threshold index 99a4659..e53a25a 100755 --- a/threshold +++ b/threshold @@ -231,6 +231,15 @@ class Base(Protocol): def dataReceived(self, data): data = data.decode("utf-8", "replace") #log("Data received from %s:%s -- %s" % (self.addr.host, self.addr.port, repr(data))) + if "\n" in data: + splitData = [x for x in data.split("\n") if x] + if "\n" in data: + #timePlus = 0.0 + for i in splitData: + helper.parseCommand(self.addr, self.authed, i) + #reactor.callLater(timePlus, lambda: helper.parseCommand(self.addr, self.authed, i)) + #timePlus += 0.01 + return helper.parseCommand(self.addr, self.authed, data) def connectionMade(self): @@ -279,12 +288,24 @@ class Helper(object): else: error("Mandatory values missing from config") + def saveConfig(self): global config with open("config.json", "w") as f: dump(config, f, indent=4) return + def getKeywordConfig(self): + with open("keyword.json", "r") as f: + keyconf = load(f) + return keyconf + + def saveKeywordConfig(self): + global keyconf + with open("keyword.json", "w") as f: + dump(keyconf, f, indent=4) + return + def getPool(self): with open("pool.json", "r") as f: data = f.read() @@ -329,14 +350,14 @@ class Helper(object): toUndo = False uniqueNum = 0 totalNum = 0 - for i in config["Keywords"]: + for i in keyconf["Keywords"]: if i in message: - if i in config["KeywordsExcept"].keys(): - for x in config["KeywordsExcept"][i]: + if i in keyconf["KeywordsExcept"].keys(): + for x in keyconf["KeywordsExcept"][i]: if x in message: toUndo = True messageDuplicate = messageDuplicate.replace(x, "\0\r\n\n\0") - for y in config["Keywords"]: + for y in keyconf["Keywords"]: if i in messageDuplicate: totalNum += messageDuplicate.count(i) message = messageDuplicate.replace(i, "{"+i+"}") @@ -388,28 +409,31 @@ class Helper(object): return def addKeyword(self, keyword): - if keyword in config["Keywords"]: + if keyword in keyconf["Keywords"]: return "EXISTS" else: - for i in config["Keywords"]: + for i in keyconf["Keywords"]: if i in keyword or keyword in i: return "ISIN" - config["Keywords"].append(keyword) - helper.saveConfig() + keyconf["Keywords"].append(keyword) + helper.saveKeywordConfig() return True def delKeyword(self, keyword): - if not keyword in config["Keywords"]: + if not keyword in keyconf["Keywords"]: return "NOKEY" - config["Keywords"].remove(keyword) - helper.saveConfig() + keyconf["Keywords"].remove(keyword) + helper.saveKeywordConfig() return True def parseCommand(self, addr, authed, data): global pool - data = data.strip("\n") spl = data.split() - obj = connections[addr] + if addr in connections.keys(): + obj = connections[addr] + else: + warning("Got connection object with no instance in the address pool") + return success = lambda data: sendSuccess(addr, data) failure = lambda data: sendFailure(addr, data) @@ -434,8 +458,15 @@ class Helper(object): elif cmd == "rehash": global config config = helper.getConfig() + log("Configuration rehashed") success("Configuration rehashed successfully") + elif cmd == "rekey": + global keyconf + keyconf = helper.getKeywordConfig() + log("Keyword configuration rehashed") + success("Keyword configuration rehashed successfully") + elif cmd == "pass": info("You are already authenticated") return @@ -576,35 +607,35 @@ class Helper(object): return if length == 4: if spl[1] == "except": - if not spl[2] in config["Keywords"]: + if not spl[2] in keyconf["Keywords"]: failure("No such keyword: %s" % spl[2]) return - if spl[2] in config["KeywordsExcept"].keys(): - if spl[3] in config["KeywordsExcept"][spl[2]]: + if spl[2] in keyconf["KeywordsExcept"].keys(): + if spl[3] in keyconf["KeywordsExcept"][spl[2]]: failure("Exception exists: %s" % spl[3]) return else: if not spl[2] in spl[3]: failure("Keyword %s not in exception %s. This won't work" % (spl[2], spl[3])) return - config["KeywordsExcept"][spl[2]] = [] + keyconf["KeywordsExcept"][spl[2]] = [] - config["KeywordsExcept"][spl[2]].append(spl[3]) - helper.saveConfig() + keyconf["KeywordsExcept"][spl[2]].append(spl[3]) + helper.saveKeywordConfig() success("Successfully added exception %s for keyword %s" % (spl[3], spl[2])) return elif spl[1] == "unexcept": - if not spl[2] in config["KeywordsExcept"].keys(): + if not spl[2] in keyconf["KeywordsExcept"].keys(): failure("No such exception: %s" % spl[2]) return - if not spl[3] in config["KeywordsExcept"][spl[2]]: + if not spl[3] in keyconf["KeywordsExcept"][spl[2]]: failure("Exception %s has no attribute %s" % (spl[2], spl[3])) return - config["KeywordsExcept"][spl[2]].remove(spl[3]) - if config["KeywordsExcept"][spl[2]] == []: - del config["KeywordsExcept"][spl[2]] - helper.saveConfig() + keyconf["KeywordsExcept"][spl[2]].remove(spl[3]) + if keyconf["KeywordsExcept"][spl[2]] == []: + del keyconf["KeywordsExcept"][spl[2]] + helper.saveKeywordConfig() success("Successfully removed exception %s for keyword %s" % (spl[3], spl[2])) return else: @@ -612,23 +643,23 @@ class Helper(object): return if length == 3: if spl[1] == "unexcept": - if not spl[2] in config["KeywordsExcept"].keys(): + if not spl[2] in keyconf["KeywordsExcept"].keys(): failure("No such exception: %s" % spl[2]) return - del config["KeywordsExcept"][spl[2]] - helper.saveConfig() + del keyconf["KeywordsExcept"][spl[2]] + helper.saveKeywordConfig() success("Successfully removed exception list of %s" % spl[2]) return if length == 2: if spl[1] == "show": - info(",".join(config["Keywords"])) + info(",".join(keyconf["Keywords"])) return elif spl[1] == "showexcept": exceptMap = [] - for i in config["KeywordsExcept"].keys(): + for i in keyconf["KeywordsExcept"].keys(): exceptMap.append("Key: %s" % i) - exceptMap.append("%s: %s" % (i, ",".join(config["KeywordsExcept"][i]))) + exceptMap.append("%s: %s" % (i, ",".join(keyconf["KeywordsExcept"][i]))) exceptMap.append("\n") info("\n".join(exceptMap)) return @@ -815,6 +846,7 @@ class Helper(object): if __name__ == "__main__": helper = Helper() config = helper.getConfig() + keyconf = helper.getKeywordConfig() pool = helper.getPool() help = helper.getHelp()