#!/usr/bin/env python from twisted.internet import reactor from twisted.internet.ssl import DefaultOpenSSLContextFactory from twisted.internet.protocol import Protocol, Factory, ClientFactory #from twisted.python import log #from sys import stdout #log.startLogging(stdout) from core.main import ( numbers, configPath, certPath, listener, connections, IRCPool, ReactorPool, FactoryPool, MonitorPool, saveConf, loadConf, initMain, ) initMain() from core.main import ( config, keyconf, pool, help, wholist, ) from utils.logging.log import * import modules.userinfo as userinfo import core.helper as helper from core.parser import parseCommand class Base(Protocol): def __init__(self, addr): self.addr = addr self.authed = False if config["UsePassword"] == False: self.authed = True def send(self, data): data += "\r\n" data = data.encode("utf-8", "replace") self.transport.write(data) 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: for i in splitData: parseCommand(self.addr, self.authed, i) return parseCommand(self.addr, self.authed, data) def connectionMade(self): log("Connection from %s:%s" % (self.addr.host, self.addr.port)) self.send("Hello.") def connectionLost(self, reason): self.authed = False log("Connection lost from %s:%s -- %s" % (self.addr.host, self.addr.port, reason.getErrorMessage())) if not listener == None: if self.addr in connections.keys(): del connections[self.addr] else: warn("Tried to remove a non-existant connection.") else: warn("Tried to remove a connection from a listener that wasn't running.") if self.addr in MonitorPool: MonitorPool.remove(self.addr) class BaseFactory(Factory): def buildProtocol(self, addr): entry = Base(addr) connections[addr] = entry return entry def send(self, addr, data): if addr in connections.keys(): connection = connections[addr] connection.send(data) else: return if __name__ == "__main__": for i in pool.keys(): if pool[i]["enabled"] == True: helper.addBot(i) listener = BaseFactory() if config["Listener"]["UseSSL"] == True: reactor.listenSSL(config["Listener"]["Port"], listener, DefaultOpenSSLContextFactory(certPath+config["Listener"]["Key"], certPath+config["Listener"]["Certificate"]), interface=config["Listener"]["Address"]) log("Threshold running with SSL on %s:%s" % (config["Listener"]["Address"], config["Listener"]["Port"])) else: reactor.listenTCP(config["Listener"]["Port"], listener, interface=config["Listener"]["Address"]) log("Threshold running on %s:%s" % (config["Listener"]["Address"], config["Listener"]["Port"])) reactor.run()