Strip newlines from received lines and change file extension
This commit is contained in:
92
threshold
Executable file
92
threshold
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.ssl import DefaultOpenSSLContextFactory
|
||||
from twisted.internet.protocol import Protocol, Factory
|
||||
from json import load, dump
|
||||
from sys import exit
|
||||
|
||||
listener = None
|
||||
connections = {}
|
||||
|
||||
def log(data):
|
||||
print("[LOG]", data)
|
||||
|
||||
def debug(data):
|
||||
print("[DEBUG]", data)
|
||||
|
||||
def warn(data):
|
||||
print("[WARNING]", data)
|
||||
|
||||
def error(data):
|
||||
print("[ERROR]", data)
|
||||
exit(1)
|
||||
|
||||
class Base(Protocol):
|
||||
def __init__(self, addr):
|
||||
self.addr = addr
|
||||
self.authed = False
|
||||
|
||||
def send(self, data):
|
||||
data += "\r\n"
|
||||
data = data.encode("utf-8", "replace")
|
||||
self.transport.write(data)
|
||||
|
||||
def dataReceived(self, data):
|
||||
data = data.rstrip()
|
||||
log("Data received from %s:%s -- %s" % (self.addr.host, self.addr.port, data))
|
||||
|
||||
def connectionMade(self):
|
||||
log("Connection from %s:%s" % (self.addr.host, self.addr.port))
|
||||
self.send("Hello.")
|
||||
|
||||
def connectionLost(self, reason):
|
||||
global connections
|
||||
log("Connection lost from %s: %s" % (self.addr.host, 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.")
|
||||
|
||||
class BaseFactory(Factory):
|
||||
def buildProtocol(self, addr):
|
||||
global connections
|
||||
entry = Base(addr)
|
||||
connections[addr] = entry
|
||||
return entry
|
||||
|
||||
def send(self, addr, data):
|
||||
global connections
|
||||
if addr in connections.keys():
|
||||
connection = connections[addr]
|
||||
connection.send(data)
|
||||
else:
|
||||
return
|
||||
|
||||
class Helper(object):
|
||||
def getConfig(self):
|
||||
with open("config.json", "r") as f:
|
||||
config = load(f)
|
||||
if set(["port", "bind", "usessl"]).issubset(set(config.keys())):
|
||||
if config["usessl"] == True:
|
||||
if not set(["cert", "key"]).issubset(set(config.keys())):
|
||||
error("SSL is on but certificate or key is not defined")
|
||||
return config
|
||||
else:
|
||||
error("Mandatory values missing from config")
|
||||
|
||||
if __name__ == "__main__":
|
||||
helper = Helper()
|
||||
config = helper.getConfig()
|
||||
|
||||
listener = BaseFactory()
|
||||
if config["usessl"] == True:
|
||||
reactor.listenSSL(config["port"], listener, DefaultOpenSSLContextFactory(config["key"], config["cert"]), interface=config["bind"])
|
||||
log("Threshold running with SSL on %s:%s" % (config["bind"], config["port"]))
|
||||
else:
|
||||
reactor.listen(config["port"], listener, interface=config["bind"])
|
||||
log("Threshold running on %s:%s" % (config["bind"], config["port"]))
|
||||
|
||||
reactor.run()
|
||||
Reference in New Issue
Block a user