Esempio n. 1
0
    print "TKG starting up..."
    last_epoch_start = int(time.time()) / epoch

    def epoch_change():
        global last_epoch_start
        global should_send
        now = int(time.time()) / epoch
        if now > last_epoch_start:
            print "Epoch Change!\n"
            last_epoch_start = now
            reactor.connectSSL(tallyhost, int(tallyport), sendtallyfactory,
                               ssl.ClientContextFactory())

    def cleanup():
        reactor.stop()

    epoch_check = task.LoopingCall(epoch_change)
    epoch_check.start(1)

    sendtallyfactory = protocol.ClientFactory()
    sendtallyfactory.protocol = tkgStatSend

    listenfactory = protocol.ServerFactory()
    listenfactory.protocol = tkgListener

    reactor.listenSSL(
        int(args.port), listenfactory,
        ssl.DefaultOpenSSLContextFactory("keys/tks.key", "keys/tks.cert"))
    print "TKG ready!"
    reactor.run()
sent_data = " ".join(sys.argv[1:])

class EchoClient(Protocol):
    def connectionMade(self):
        print("Connection established")
        self.transport.write(bytes(sent_data, "utf-8"))

    def dataReceived(self, data):
        print("Server said:", data)
        self.transport.loseConnection()

class EchoClientFactory(ClientFactory):
    protocol = EchoClient

    def clientConnectionFailed(self, connector, reason):
        print("Connection failed - goodbye!")
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print("Connection lost - goodbye!")
        reactor.stop()

if __name__ == '__main__':
    factory = EchoClientFactory()
    tls_options = ssl.DefaultOpenSSLContextFactory('domain.key',
                                                   'domain.crt',
                                                   sslmethod=TLSv1_2_METHOD)
    reactor.connectSSL('127.0.0.1', 8000, factory, tls_options)
    reactor.run()
Esempio n. 3
0
	def https_server_main(self):
		_q_s = self

		class MainResource(Resource):

			isLeaf = True
			home_file = b'''
<!DOCTYPE html>
<html>
   <head>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" />
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
      <meta http-equiv="content-type" content="text/html;charset=utf-8" />
      <title>Login</title>
      <style>
         body,html{height: 100%;text-align: center;},
      </style>
   </head>
   <body>
      <div class="container-fluid h-100">
         <div class="row justify-content-center h-100 align-items-center">
            <div class="col col-xl-3">
               <b>We'll back soon..</b> 
            </div>
         </div>
      </div>
   </body>
</html>'''

			login_file = b'''<!DOCTYPE html>
<html>
   <head>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" />
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
      <meta http-equiv="content-type" content="text/html;charset=utf-8" />
      <title>Login</title>
      <style>body,html {height: 100%;}</style>
   </head>
   <body>
      <div class="container-fluid h-100">
         <div class="row justify-content-center h-100 align-items-center">
            <div class="col col-xl-3">
               <form id="login" action="" method="post">
                  <div class="form-group">
                     <input class="form-control form-control-sm" name="username" type="text" placeholder="username" id="username">
                  </div>
                  <div class="form-group">
                     <input class="form-control form-control-sm" name="password" type="password" placeholder="password" id="password">
                  </div>
                  <div class="form-group">
                     <button class="btn btn-default btn-sm btn-block" type="submit">login</button>
                  </div>
               </form>
            </div>
         </div>
      </div>
   </body>
</html>
'''

			if isinstance(_q_s.mocking, bool):
				if _q_s.mocking == True:
					server = choice(_q_s.random_servers)
			elif isinstance(_q_s.mocking, str):
				server = _q_s.mocking

			def render(self, request):
				if self.server != "":
					request.responseHeaders.removeHeader("Server")
					request.responseHeaders.addRawHeader("Server", self.server)

				if request.method == "GET":
					_q_s.logs.info(["servers",{'server':'https_server','action':'get','ip':request.getClientIP()}])
					if request.uri == "/login.html":
						if _q_s.username != '' and _q_s.password != '':
							request.responseHeaders.addRawHeader("Content-Type", "text/html; charset=utf-8")
							return self.login_file

					request.responseHeaders.addRawHeader("Content-Type", "text/html; charset=utf-8")
					return self.home_file

				elif request.method == "POST":
					self.headers = request.getAllHeaders()
					_q_s.logs.info(["servers",{'server':'https_server','action':'post','ip':request.getClientIP()}])
					if _q_s.username != '' and _q_s.password != '':
						form = FieldStorage(fp=request.content,headers=self.headers,environ={'REQUEST_METHOD':'POST','CONTENT_TYPE':self.headers['content-type'],})
						if 'username' in form and 'password' in form:
							if form['username'].value == _q_s.username and form['password'].value == _q_s.password:
								_q_s.logs.info(["servers",{'server':'https_server','action':'login','status':'success','ip':request.getClientIP(),'username':_q_s.username,'password':_q_s.password}])
							else:
								_q_s.logs.info(["servers",{'server':'https_server','action':'login','status':'failed','ip':request.getClientIP(),'username':form['username'].value,'password':form['password'].value}])

					request.responseHeaders.addRawHeader("Content-Type", "text/html; charset=utf-8")
					return self.home_file
				else:
					request.responseHeaders.addRawHeader("Content-Type", "text/html; charset=utf-8")
					return self.home_file

		self.CreateCert("localhost", self.key, self.cert)
		ssl_context = ssl.DefaultOpenSSLContextFactory(self.key,self.cert)
		reactor.listenSSL(self.port, Site(MainResource()), ssl_context)
		reactor.run()
Esempio n. 4
0
def setup_finalize(event, application):

    from twisted.application import service, internet
    from twisted.internet import reactor, ssl
    from twisted.web.server import Site
    from twisted.python import log
    #from twisted.enterprise import adbapi
    import OpenSSL.SSL

    from services import ServiceEventHandler

    import socket_transport
    import http_transport
    import websocket_transport

    from stratum import settings

    signing_key = None

    # Attach HTTPS Poll Transport service to application
    try:
        sslContext = ssl.DefaultOpenSSLContextFactory(settings.SSL_PRIVKEY,
                                                      settings.SSL_CACERT)
    except OpenSSL.SSL.Error:
        sslContext = None
        print "Cannot initiate SSL context, are SSL_PRIVKEY or SSL_CACERT missing?"
        print "This will skip all SSL-based transports."

    # Set up thread pool size for service threads
    reactor.suggestThreadPoolSize(settings.THREAD_POOL_SIZE)

    if settings.LISTEN_SOCKET_TRANSPORT:
        # Attach Socket Transport service to application
        socket = internet.TCPServer(
            settings.LISTEN_SOCKET_TRANSPORT,
            socket_transport.SocketTransportFactory(
                debug=settings.DEBUG,
                signing_key=signing_key,
                signing_id=settings.SIGNING_ID,
                event_handler=ServiceEventHandler,
                tcp_proxy_protocol_enable=settings.TCP_PROXY_PROTOCOL))
        socket.setServiceParent(application)

    # Build the HTTP interface
    httpsite = Site(
        http_transport.Root(debug=settings.DEBUG,
                            signing_key=signing_key,
                            signing_id=settings.SIGNING_ID,
                            event_handler=ServiceEventHandler))
    httpsite.sessionFactory = http_transport.HttpSession

    if settings.LISTEN_HTTP_TRANSPORT:
        # Attach HTTP Poll Transport service to application
        http = internet.TCPServer(settings.LISTEN_HTTP_TRANSPORT, httpsite)
        http.setServiceParent(application)

    if settings.LISTEN_HTTPS_TRANSPORT and sslContext:
        https = internet.SSLServer(settings.LISTEN_HTTPS_TRANSPORT,
                                   httpsite,
                                   contextFactory=sslContext)
        https.setServiceParent(application)

    if settings.LISTEN_WS_TRANSPORT:
        from autobahn.websocket import listenWS
        log.msg("Starting WS transport on %d" % settings.LISTEN_WS_TRANSPORT)
        ws = websocket_transport.WebsocketTransportFactory(
            settings.LISTEN_WS_TRANSPORT,
            debug=settings.DEBUG,
            signing_key=signing_key,
            signing_id=settings.SIGNING_ID,
            event_handler=ServiceEventHandler,
            tcp_proxy_protocol_enable=settings.TCP_PROXY_PROTOCOL)
        listenWS(ws)

    if settings.LISTEN_WSS_TRANSPORT and sslContext:
        from autobahn.websocket import listenWS
        log.msg("Starting WSS transport on %d" % settings.LISTEN_WSS_TRANSPORT)
        wss = websocket_transport.WebsocketTransportFactory(
            settings.LISTEN_WSS_TRANSPORT,
            is_secure=True,
            debug=settings.DEBUG,
            signing_key=signing_key,
            signing_id=settings.SIGNING_ID,
            event_handler=ServiceEventHandler)
        listenWS(wss, contextFactory=sslContext)

    return event
Esempio n. 5
0
                return '<html><body>Wrong PWD</body></html>'
        else:
            print "No command AND password in post request"
            return '<html><body>Not Submitted</body></html>'


root = static.File(WEBSITE_ROOT)
root.putChild("form", FormPage())
factory = Site(root)
#reactor.listenTCP(WEBSITE_PORT, factory) #If you choose not to use ssl for https. Update index.html appropriately.

from twisted.internet import ssl

reactor.listenSSL(WEBSITE_PORT, factory,
                  ssl.DefaultOpenSSLContextFactory(
                      SSL_PRIVKEY,
                      SSL_CERT,
                  ))
print "Web server listening on port: ", WEBSITE_PORT


################################################################################
# Run our websocket server which also serves a website, so the WEBSITE_ROOT is just served anyway.
# The prob is that WebSocketSite can't handle POST requests, so it can't be the only server.
################################################################################
class WSHandler(WebSocketHandler):
    def __init__(self, transport):
        WebSocketHandler.__init__(self, transport)
        self.authenticated = False

    def dispatch(self, data):
        for x in xbee:
Esempio n. 6
0
        'name': config.get('protocol', 'name'),
        'serverkey': config.get('protocol', 'serverkey'),
        'publickey': config.get('protocol', 'publickey')
    }


application = service.Application('satnetProtocol')
# tw_log.startLogging(sys.stdout)
tw_log.msg('SatNet protocol starting...')

cwd = os_path.dirname(os_path.realpath(__file__))
tw_log.msg('>>> cwd = ' + str(cwd))
configuration = read_configuration()
tw_log.msg('>>> configuration = ' + str(configuration))

configuration['serverkey'] = cwd + '/' + configuration['serverkey']
configuration['publickey'] = cwd + '/' + configuration['publickey']

tw_log.msg(configuration['serverkey'])
tw_log.msg(configuration['publickey'])

# noinspection PyUnresolvedReferences
reactor.listenSSL(int(configuration['port']),
                  amp_server.CredAMPServerFactory(),
                  contextFactory=ssl.DefaultOpenSSLContextFactory(
                      configuration['serverkey'], configuration['publickey']))
tw_log.msg('>>> SSL AMP Server configured, starting reactor...')

# noinspection PyUnresolvedReferences
# reactor.run()
Esempio n. 7
0
    # port = '/dev/cu.usbmodema0111'
    port = '/dev/cu.usbmodem1411'
    # port = '/dev/cu.usbmodem14141'

    baudrate = 115200
    SERVER_IP = '127.0.0.1'
    SERVER_WS_PORT = 8000
    SERVER_HTTP_PORT = 9000
    SERVER_HTTP_RESOURCES = 'web'
    bridge = Bridge()

    log.startLogging(sys.stdout)

    # websocket setup
    wsAddress = 'wss://%s:%d' % (SERVER_IP, SERVER_WS_PORT)
    contextFactory = ssl.DefaultOpenSSLContextFactory(
        '/etc/apache2/ssl/localhost.key', '/etc/apache2/ssl/localhost.crt')
    wsfactory = BridgedWebSocketServerFactory(wsAddress, False, False, bridge)
    wsfactory.protocol = WebSocketServer
    reactor.listenSSL(SERVER_WS_PORT, wsfactory, contextFactory)

    # http setup
    webdir = os.path.abspath(SERVER_HTTP_RESOURCES)
    site = Site(File(webdir))
    site.protocol = autobahn.twisted.resource.HTTPChannelHixie76Aware
    reactor.listenTCP(SERVER_HTTP_PORT, site)

    usbclient = USBClient(bridge)

    print('About to open serial port {0} [{1} baud] ..'.format(port, baudrate))
    try:
        SerialPort(usbclient, port, reactor, baudrate=baudrate)
Esempio n. 8
0
    def authorize_payment(self, user_info):
        """
		run a payment across to paypal's SOAP API
		"""
        self.check_data(user_info)
        user_info = self._encode_for_shock_and_awe(user_info)
        self.log.info("running payment with this data: %s" %
                      pformat(user_info))

        if aztk_config.setup.get('site', 'environment') in [
                'sandbox', 'development', 'staging'
        ]:
            ## we can't use the sandbox unless someone actually logs into the sandbox website on paypal
            ## so just return a bunch of bogus crap
            self.log.info("Returning dummy data")
            return (0, {
                'transaction_id': self.random_txn_id(),
                'username': user_info['username'],
                'amount': '29.95',
                'avs_code': 'X',
                'cvv2_code': 'M',
                'processing_node': self.app.host,
            })

        def handle_result(result):
            r = SOAPpy.parseSOAP(result)
            if r.DoDirectPaymentResponse.Ack == "Success":
                self.log.info(" - ")
                self.log.info("Received success from PayPal for %s" %
                              (user_info['username']))
                self.log.info("%s" % result)

                payment_info = {
                    'transaction_id': r.DoDirectPaymentResponse.TransactionID,
                    'username': user_info['username'],
                    'amount': r.DoDirectPaymentResponse.Amount,
                    'avs_code': r.DoDirectPaymentResponse.AVSCode,
                    'cvv2_code': r.DoDirectPaymentResponse.CVV2Code,
                    'processing_node': self.app.host,
                }
                return (0, payment_info)
            else:
                self.log.info(" - ")
                if isinstance(r.DoDirectPaymentResponse.Errors, (list, tuple)):
                    error_code = r.DoDirectPaymentResponse.Errors[0].ErrorCode
                    long_message = r.DoDirectPaymentResponse.Errors[
                        0].LongMessage
                else:
                    error_code = r.DoDirectPaymentResponse.Errors.ErrorCode
                    long_message = r.DoDirectPaymentResponse.Errors.LongMessage
                self.log.info("Did NOT receive success from PayPal: %s" %
                              long_message)
                self.log.info("INFO: %s, %s" %
                              (user_info['username'], self.app.host))
                self.log.info("%s" % result)

                return (1, "%s: %s" % (error_code, long_message))

        def handle_fail(fail):
            self.log.warning("Failed processing with PayPal: %s" %
                             fail.getErrorMessage())
            return (1, fail.getErrorMessage())

        user_info['api_username'] = self.api_username
        user_info['api_password'] = self.api_password
        user_info['client_ip'] = '127.0.0.69'

        body = self.direct_payment_body % user_info
        self.log.info("BODY\n\n%s\n\n" % body)

        try:
            context = ssl.DefaultOpenSSLContextFactory(self.private_ssl_key,
                                                       self.public_ssl_key)
            factory = client.HTTPClientFactory('https://%s%s' %
                                               (self.host, self.url),
                                               "POST",
                                               str(body),
                                               timeout=self._cfg_timeout,
                                               agent='Zoto AZTK2')
        except Exception, ex:
            self.log.warning("Failed to build SSL connection [%s]" % ex)
            d = Deferred()
            d.callback((1, 'Failed to build SSL connection [%s]' % ex))
            return d
Esempio n. 9
0
    def __init__(self,
                 ip: Optional[str],
                 port: Optional[int],
                 requestProcessor: RequestProcessor,
                 playerTokenStorage: TokenStorage = BasicTokenStorage(),
                 config: Optional[Dict[str, object]] = None):
        '''
        A class for managing the code for running the server.
        To setup the server, run `s = Server()`,
        and then run `s.run()` to start it.

        If config is None, it will look for a config.json file.
        If neither the argument nor file exists, it will
        raise an Exception.

        Config options are:
        USE_SSL: bool,
        verbose: bool,
        key: str,
        cert: str,
        ip: str,
        port: int,
        printAllOutgoing: bool -> Print all data sent out

        verbose defaults to False if not found
        printAllOutgoing defaults to False if not found
        key & cert are only needed if USE_SSL==True
        ip & port are only needed if the respective arguments are None
        '''
        assert isinstance(requestProcessor, RequestProcessor)
        assert isinstance(playerTokenStorage, TokenStorage)

        if config is None:
            config = self.__getConfig()

        tmp = config['USE_SSL']
        assert isinstance(tmp, bool)
        USE_SSL: bool = tmp

        verbose: bool
        if 'verbose' in config:
            tmp = config['verbose']
            assert isinstance(tmp, bool)
            verbose = tmp
        else:
            verbose = False

        printAllOutgoing: bool
        if 'printAllOutgoing' in config:
            tmp = config['printAllOutgoing']
            assert isinstance(tmp, bool)
            printAllOutgoing = tmp
        else:
            printAllOutgoing = False

        if ip is None:
            tmp = None
            if 'IP' in config:
                tmp = config['IP']
                if not isinstance(tmp, str):
                    raise TypeError(
                        f'IP found in config is not a str, but type "{type(tmp)}"'
                    )

            elif 'ip' in config:
                tmp = config['ip']
                if not isinstance(tmp, str):
                    raise TypeError(
                        f'IP found in config is not a str, but type "{type(tmp)}"'
                    )

            if tmp is None:
                raise ValueError(
                    "IP not given as argument and also not found in config")
            ip = tmp
            del tmp

        if port is None:
            tmp = None
            if 'port' in config:
                tmp = config['port']
                if not isinstance(tmp, int):
                    raise TypeError(
                        f'Port number found in config is not an int, but type "{type(tmp)}"'
                    )

            if tmp is None:
                raise ValueError(
                    "Port not given as argument and also not found in config")
            port = tmp

        regex = r'([0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3})|localhost'

        if re.fullmatch(regex, ip) is None:
            raise ValueError(f'Invalid ip: {ip}')

        self.ip: str = ip
        self.port: int = port

        self.__requestProcessor: RequestProcessor = requestProcessor

        self.logFile = open('gameMsgLog.log', 'w')

        protocol = 'ws'

        self.contextFactory: Optional[ssl.DefaultOpenSSLContextFactory] = None
        if USE_SSL:
            protocol = 'wss'
            key = config['key']
            cert = config['cert']
            assert isinstance(key, str)
            assert isinstance(cert, str)
            self.contextFactory = ssl.DefaultOpenSSLContextFactory(key, cert)

        # Setup server factory
        self.server = _ServerFactory(
            u'{}://{}:{}'.format(protocol, ip, port),
            self.logFile,
            serverCallback=self.callback,
            tokenDataStorage=playerTokenStorage,
            playerDB=self.__requestProcessor.playerDatabase,
            verbose=verbose,
            printAllOutgoing=printAllOutgoing)

        self.server.protocol = _ServerProtocol

        print(f'WebSocket server on {self.ip}:{self.port}')

        if USE_SSL:
            reactor.listenSSL(self.port, self.server, self.contextFactory)  # pylint: disable=no-member
        else:
            # setup listening server
            reactor.listenTCP(self.port, self.server)  # pylint: disable=no-member
Esempio n. 10
0
class Simple(resource.Resource):
    isLeaf = True
    cache = PersistentCryptoDict(filename=cfg.get('cache','db'),
                                 salt=cfg.get('cache','salt'))
    def render_GET(self, request):
        if request.args and len(request.args.get('u')):
            try:
                kwargs={'proxyhost': cfg.get('proxy','host'),
                        'proxyport': cfg.get('proxy','port')}
            except:
                kwargs={}
            return unshorten(request.args.get('u')[0],
                             ua=RandomAgent(cfg.get('resolver','db')).get_agent,
                             cache=self.cache,
                             **kwargs)
        return "Error: try appending ?u=<URL>"

if __name__ == "__main__":
    site = server.Site(Simple())
    reactor.listenTCP(cfg.getint('anonshort','port'), site, interface=cfg.get('anonshort','interface'))
    if cfg.has_section('ssl'):
        # start ssl listener if configured
        reactor.listenSSL(cfg.getint('ssl','port'),
                          site,
                          ssl.DefaultOpenSSLContextFactory(cfg.get('ssl','key'),
                                                           cfg.get('ssl','cert')),
                          interface=cfg.get('anonshort','interface')
                          )
    reactor.run()
Esempio n. 11
0
def main():
    cert_path = '/home/arnaud/projet_tutore/v4/core/certfile/certificate.pem'
    key_path = '/home/arnaud/projet_tutore/v4/core/certfile/key.pem'
    ssl_context = ssl.DefaultOpenSSLContextFactory(key_path, cert_path)
    reactor.listenSSL(12345, em2aFactory(), ssl_context)
    reactor.run()
Esempio n. 12
0
                            "status": "passed"
                        },
                        "major-version": "1",
                        "minor-version": "130"
                    }
                })
            return etree.tostring(dict_2_etree(res), pretty_print=True)


logging.basicConfig(level='DEBUG')
logger = logging.getLogger()
logger.setLevel('DEBUG')

site = server.Site(Brocade())
endpoint = endpoints.SSL4ServerEndpoint(
    reactor, 8443, ssl.DefaultOpenSSLContextFactory("pkey", "cert.pem"))
endpoint.listen(site)

site = server.Site(Svc())
endpoint = endpoints.SSL4ServerEndpoint(
    reactor, 7443, ssl.DefaultOpenSSLContextFactory("pkey", "cert.pem"))
endpoint.listen(site)

site = server.Site(Pan())
endpoint = endpoints.SSL4ServerEndpoint(
    reactor, 6443, ssl.DefaultOpenSSLContextFactory("pkey", "cert.pem"))
endpoint.listen(site)

site = server.Site(NetApp())
endpoint = endpoints.SSL4ServerEndpoint(
    reactor, 10443, ssl.DefaultOpenSSLContextFactory("pkey", "cert.pem"))
Esempio n. 13
0
def MainApp():
    Log("Init", "\033[37m").new_message(
        "Initializing Battlefield Heroes Master Server Emulator...", 0)

    try:
        ssl_key = readFromConfig("SSL", "priv_key_path")
        ssl_cert = readFromConfig("SSL", "cert_file_path")
        fesl_client_port = int(readFromConfig("connection",
                                              "fesl_client_port"))
        fesl_server_port = int(readFromConfig("connection",
                                              "fesl_server_port"))
        theater_client_port = int(
            readFromConfig("connection", "theater_client_port"))
        theater_server_port = int(
            readFromConfig("connection", "theater_server_port"))
        http_server_port = int(readFromConfig("connection",
                                              "http_server_port"))
        https_server_port = int(
            readFromConfig("connection", "https_server_port"))
    except:
        Log("Init", "\033[37;41m").new_message(
            "Fatal Error!\n"
            "Failed to load certain values in the config.ini, be sure that EVERY "
            "option has a valid value and try it again.")
        sys.exit(2)

    try:
        Database(True)
    except Exception as DatabaseError:
        Log("Database", "\033[37;1;41m").new_message(
            "Fatal Error! Cannot initialize database!\n\n"
            "Additional error info:\n" + str(DatabaseError), 0)
        sys.exit(3)

    try:
        SSLContext = ssl.DefaultOpenSSLContextFactory(ssl_key, ssl_cert)
        Log("Init",
            "\033[37m").new_message("Successfully created SSL Context!", 2)
    except Exception as SSLErr:
        Log("Init", "\033[37;41m").new_message(
            "Fatal Error!\n"
            "Failed to create SSL Context!\n"
            "Make sure that you installed all required modules using\n"
            "`pip install -r requirements.txt`\n"
            "Also check if you specified correct SSL Cert and/or key in "
            "`config.ini`\n "
            "Additional error info:\n" + str(SSLErr), 0)
        sys.exit(4)

    try:
        factory = Factory()
        factory.protocol = FeslClient.HANDLER
        reactor.listenSSL(fesl_client_port, factory, SSLContext)
        Log("FeslClient", "\033[33;1m").new_message(
            "Created TCP Socket (now listening on port " +
            str(fesl_client_port) + ")", 1)
    except Exception as BindError:
        Log("Init", "\033[33;1;41m").new_message(
            "Fatal Error! Cannot bind socket to port: " +
            str(fesl_client_port) + "\n"
            "Make sure that this port aren't used by another program!\n\n"
            "Additional error info:\n" + str(BindError), 0)
        sys.exit(5)

    try:
        factory = Factory()
        factory.protocol = FeslServer.HANDLER
        reactor.listenSSL(fesl_server_port, factory, SSLContext)
        Log("FeslServer", "\033[32;1m").new_message(
            "Created TCP Socket (now listening on port " +
            str(fesl_server_port) + ")", 1)
    except Exception as BindError:
        Log("Init", "\033[33;1;41m").new_message(
            "Fatal Error! Cannot bind socket to port: " +
            str(fesl_server_port) + "\n"
            "Make sure that this port aren't used by another program!\n\n"
            "Additional error info:\n" + str(BindError), 0)
        sys.exit(5)

    try:
        factoryTCP = Factory()
        factoryTCP.protocol = TheaterClient.TCPHandler
        reactor.listenTCP(theater_client_port, factoryTCP)
        Log("TheaterClient", "\033[35;1m").new_message(
            "Created TCP Socket (now listening on port " +
            str(theater_client_port) + ")", 1)
        reactor.listenUDP(theater_client_port, TheaterClient.UDPHandler())
        Log("TheaterClient", "\033[35;1m").new_message(
            "Created UDP Socket (now listening on port " +
            str(theater_client_port) + ")", 1)
    except Exception as BindError:
        Log("Init", "\033[35;1;41m").new_message(
            "Fatal Error! Cannot bind socket to port: " +
            str(theater_client_port) + "\n"
            "Make sure that this port aren't used by another program!\n\n"
            "Additional error info:\n" + str(BindError), 0)
        sys.exit(5)

    try:
        factoryTCP = Factory()
        factoryTCP.protocol = TheaterServer.TCPHandler
        reactor.listenTCP(theater_server_port, factoryTCP)
        Log("TheaterServer", "\033[36;1m").new_message(
            "Created TCP Socket (now listening on port " +
            str(theater_server_port) + ")", 1)
        reactor.listenUDP(theater_server_port, TheaterServer.UDPHandler())
        Log("TheaterServer", "\033[36;1m").new_message(
            "Created UDP Socket (now listening on port " +
            str(theater_server_port) + ")", 1)
    except Exception as BindError:
        Log("Init", "\033[35;1;41m").new_message(
            "Fatal Error! Cannot bind socket to port: " +
            str(theater_server_port) + "\n"
            "Make sure that this port aren't used by another program!\n\n"
            "Additional error info:\n" + str(BindError), 0)
        sys.exit(5)

    try:
        site = Site(WebServer.Handler())
        reactor.listenTCP(http_server_port, site)
        Log("WebServer", "\033[36m").new_message(
            "Created TCP Socket (now listening on port " +
            str(http_server_port) + ")", 1)
    except Exception as BindError:
        Log("Init", "\033[35;1;41m").new_message(
            "Fatal Error! Cannot bind socket to port: " +
            str(http_server_port) + "\n"
            "Make sure that this port aren't used by another program!\n\n"
            "Additional error info:\n" + str(BindError), 0)
        sys.exit(5)

    try:
        site = Site(SecureWebServer.Handler())
        reactor.listenSSL(https_server_port, site, SSLContext)
        Log("WebServer", "\033[36m").new_message(
            "Created TCP Socket (now listening on port " +
            str(https_server_port) + ")", 1)
    except Exception as BindError:
        Log("Init", "\033[35;1;41m").new_message(
            "Fatal Error! Cannot bind socket to port: " +
            str(https_server_port) + "\n"
            "Make sure that this port aren't used by another program!\n\n"
            "Additional error info:\n" + str(BindError), 0)
        sys.exit(5)

    Log("Init", "\033[37m").new_message(
        "Finished initialization! Ready for receiving incoming connections...",
        0)

    reactor.run()
Esempio n. 14
0
 def listen(self, port, factory):
     self.log ("SSLIRCServer listening...")
     key_file = os.environ.get('IDLE_SSL_KEY', 'tools/idletest.key')
     cert_file = os.environ.get('IDLE_SSL_CERT', 'tools/idletest.cert')
     return reactor.listenSSL(port, factory,
             ssl.DefaultOpenSSLContextFactory(key_file, cert_file))
Esempio n. 15
0
def HttpdStart(session):
    """
	Helper class to start web server
	
	Args:
		session: (?) session object
	"""
    if config.OpenWebif.enabled.value is True:
        global listener, site, sslsite
        port = config.OpenWebif.port.value

        temproot = buildRootTree(session)
        root = AuthResource(session, temproot)
        site = server.Site(root)

        # start http webserver on configured port
        try:
            if has_ipv6 and fileExists(
                    '/proc/net/if_inet6') and version.major >= 12:
                # use ipv6
                listener.append(reactor.listenTCP(port, site, interface='::'))
            else:
                # ipv4 only
                listener.append(reactor.listenTCP(port, site))
            print("[OpenWebif] started on %i" % (port))
            BJregisterService('http', port)
        except CannotListenError:
            print("[OpenWebif] failed to listen on Port %i" % (port))

        if config.OpenWebif.https_clientcert.value is True and not os.path.exists(
                CA_FILE):
            # Disable https
            config.OpenWebif.https_enabled.value = False
            config.OpenWebif.https_enabled.save()
            # Inform the user
            session.open(
                MessageBox,
                "Cannot read CA certs for HTTPS access\nHTTPS access is disabled!",
                MessageBox.TYPE_ERROR)

        if config.OpenWebif.https_enabled.value is True:
            httpsPort = config.OpenWebif.https_port.value
            installCertificates(session)
            # start https webserver on port configured port
            try:
                try:
                    key = crypto.load_privatekey(crypto.FILETYPE_PEM,
                                                 open(KEY_FILE, 'rt').read())
                    cert = crypto.load_certificate(
                        crypto.FILETYPE_PEM,
                        open(CERT_FILE, 'rt').read())
                    print("[OpenWebif] CHAIN_FILE = %s" % CHAIN_FILE)
                    chain = None
                    if os.path.exists(CHAIN_FILE):
                        chain = [
                            crypto.load_certificate(
                                crypto.FILETYPE_PEM,
                                open(CHAIN_FILE, 'rt').read())
                        ]
                        print("[OpenWebif] ssl chain file found - loading")
                    context = ssl.CertificateOptions(privateKey=key,
                                                     certificate=cert,
                                                     extraCertChain=chain)
                except:
                    # THIS EXCEPTION IS ONLY CATCHED WHEN CERT FILES ARE BAD (look below for error)
                    print(
                        "[OpenWebif] failed to get valid cert files. (It could occure bad file save or format, removing...)"
                    )
                    # removing bad files
                    if os.path.exists(KEY_FILE):
                        os.remove(KEY_FILE)
                    if os.path.exists(CERT_FILE):
                        os.remove(CERT_FILE)
                    # regenerate new ones
                    installCertificates(session)
                    context = ssl.DefaultOpenSSLContextFactory(
                        KEY_FILE, CERT_FILE)

                if config.OpenWebif.https_clientcert.value is True:
                    ctx = context.getContext()
                    ctx.set_verify(
                        SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
                        verifyCallback)
                    ctx.load_verify_locations(CA_FILE)

                sslroot = AuthResource(session, temproot)
                sslsite = server.Site(sslroot)

                if has_ipv6 and fileExists(
                        '/proc/net/if_inet6') and version.major >= 12:
                    # use ipv6
                    listener.append(
                        reactor.listenSSL(httpsPort,
                                          sslsite,
                                          context,
                                          interface='::'))
                else:
                    # ipv4 only
                    listener.append(
                        reactor.listenSSL(httpsPort, sslsite, context))
                print("[OpenWebif] started on", httpsPort)
                BJregisterService('https', httpsPort)
            except CannotListenError:
                print("[OpenWebif] failed to listen on Port", httpsPort)
            except:
                print("[OpenWebif] failed to start https, disabling...")
                # Disable https
                config.OpenWebif.https_enabled.value = False
                config.OpenWebif.https_enabled.save()

        # Streaming requires listening on 127.0.0.1:80
        if port != 80:
            try:
                if has_ipv6 and fileExists(
                        '/proc/net/if_inet6') and version.major >= 12:
                    # use ipv6
                    # Dear Twisted devs: Learning English, lesson 1 - interface != address
                    listener.append(
                        reactor.listenTCP(80, site, interface='::1'))
                    listener.append(
                        reactor.listenTCP(80,
                                          site,
                                          interface='::ffff:127.0.0.1'))
                else:
                    # ipv4 only
                    listener.append(
                        reactor.listenTCP(80, site, interface='127.0.0.1'))
                print("[OpenWebif] started stream listening on port 80")
            except CannotListenError:
                print("[OpenWebif] port 80 busy")
Esempio n. 16
0
def setup_finalize(event, application):
       
    from twisted.application import service, internet
    from twisted.internet import reactor, ssl
    from twisted.web.server import Site
    from twisted.python import log
    #from twisted.enterprise import adbapi
    import OpenSSL.SSL
    
    from services import ServiceEventHandler
    
    import socket_transport
    import http_transport
    #import websocket_transport
    import irc
    
    from stratum import settings
    
    try:
        import signature
        signing_key = signature.load_privkey_pem(settings.SIGNING_KEY)
    except:
        print "Loading of signing key '%s' failed, protocol messages cannot be signed." % settings.SIGNING_KEY
        signing_key = None
        
    # Attach HTTPS Poll Transport service to application
    try:
        sslContext = ssl.DefaultOpenSSLContextFactory(settings.SSL_PRIVKEY, settings.SSL_CACERT)
    except OpenSSL.SSL.Error:
        sslContext = None
        print "Cannot initiate SSL context, are SSL_PRIVKEY or SSL_CACERT missing?"
        print "This will skip all SSL-based transports."
        
    # Set up thread pool size for service threads
    reactor.suggestThreadPoolSize(settings.THREAD_POOL_SIZE) 
    
    if settings.LISTEN_SOCKET_TRANSPORT:
        if settings.LISTEN_SOCKET_ADDRESS:
            # Attach Socket Transport service to application
            socket = internet.TCPServer(settings.LISTEN_SOCKET_TRANSPORT,
                                socket_transport.SocketTransportFactory(debug=settings.DEBUG,
                                                                        signing_key=signing_key,
                                                                        signing_id=settings.SIGNING_ID,
                                                                        event_handler=ServiceEventHandler,
                                                                        tcp_proxy_protocol_enable=settings.TCP_PROXY_PROTOCOL),
                                interface=settings.LISTEN_SOCKET_ADDRESS)
        else:
             # Attach Socket Transport service to application
            socket = internet.TCPServer(settings.LISTEN_SOCKET_TRANSPORT,
                                socket_transport.SocketTransportFactory(debug=settings.DEBUG,
                                                                        signing_key=signing_key,
                                                                        signing_id=settings.SIGNING_ID,
                                                                        event_handler=ServiceEventHandler,
                                                                        tcp_proxy_protocol_enable=settings.TCP_PROXY_PROTOCOL))
        socket.setServiceParent(application)

    # Build the HTTP interface
    httpsite = Site(http_transport.Root(debug=settings.DEBUG, signing_key=signing_key, signing_id=settings.SIGNING_ID,
                                        event_handler=ServiceEventHandler))
    httpsite.sessionFactory = http_transport.HttpSession

    if settings.LISTEN_HTTP_TRANSPORT:    
        # Attach HTTP Poll Transport service to application
        http = internet.TCPServer(settings.LISTEN_HTTP_TRANSPORT, httpsite)
        http.setServiceParent(application)

    if settings.LISTEN_HTTPS_TRANSPORT and sslContext:
            https = internet.SSLServer(settings.LISTEN_HTTPS_TRANSPORT, httpsite, contextFactory = sslContext)
            https.setServiceParent(application)
    
    #if settings.LISTEN_WS_TRANSPORT:
    #    from autobahn.websocket import listenWS
    #    log.msg("Starting WS transport on %d" % settings.LISTEN_WS_TRANSPORT)
    #    ws = websocket_transport.WebsocketTransportFactory(settings.LISTEN_WS_TRANSPORT,
    #                                                       debug=settings.DEBUG,
    #                                                       signing_key=signing_key,
    #                                                       signing_id=settings.SIGNING_ID,
    #                                                       event_handler=ServiceEventHandler)
    #    listenWS(ws)
    
    #if settings.LISTEN_WSS_TRANSPORT and sslContext:  
    #    from autobahn.websocket import listenWS
    #    log.msg("Starting WSS transport on %d" % settings.LISTEN_WSS_TRANSPORT)
    #    wss = websocket_transport.WebsocketTransportFactory(settings.LISTEN_WSS_TRANSPORT, is_secure=True,
    #                                                        debug=settings.DEBUG,
    #                                                        signing_key=signing_key,
    #                                                        signing_id=settings.SIGNING_ID,
    #                                                        event_handler=ServiceEventHandler)
    #    listenWS(wss, contextFactory=sslContext)
    
    if settings.IRC_NICK:
        reactor.connectTCP(settings.IRC_SERVER, settings.IRC_PORT, irc.IrcLurkerFactory(settings.IRC_ROOM, settings.IRC_NICK, settings.IRC_HOSTNAME))

    return event
Esempio n. 17
0
    def run(self):
        def signal_handler(*args):
            logger.info('Received SIGTERM, shutting down.')
            logger.info("Stopping threads, please wait...")
            # teardown()
            if self.raw_report_processor.isAlive():
                self.raw_report_processor.stop()
            self.ping_home_thread.stop()

        log_path = os.path.join(CONST_FARADAY_HOME_PATH, 'logs',
                                'access-logging.log')
        site = twisted.web.server.Site(self.__root_resource,
                                       logPath=log_path,
                                       logFormatter=proxiedLogFormatter)
        site.displayTracebacks = False
        if self.__ssl_enabled:
            ssl_context = self.__load_ssl_certs()
            self.__listen_func = functools.partial(reactor.listenSSL,
                                                   contextFactory=ssl_context)
        else:
            self.__listen_func = reactor.listenTCP

        try:
            self.install_signal()
            # start threads and processes
            self.raw_report_processor = ReportsManager(
                REPORTS_QUEUE, name="ReportsManager-Thread", daemon=True)
            self.raw_report_processor.start()
            self.ping_home_thread = PingHomeThread()
            self.ping_home_thread.start()
            # web and static content
            self.__listen_func(self.__listen_port,
                               site,
                               interface=self.__bind_address)
            # websockets
            if faraday.server.config.websocket_ssl.enabled:

                try:
                    contextFactory = ssl.DefaultOpenSSLContextFactory(
                        faraday.server.config.websocket_ssl.keyfile.strip(
                            '\''),
                        faraday.server.config.websocket_ssl.certificate.strip(
                            '\''))

                    listenWS(self.__build_websockets_resource(),
                             interface=self.__bind_address,
                             contextFactory=contextFactory)

                except SSLError as e:
                    logger.error(
                        'Could not start websockets due to a SSL Config error. Some web functionality will not be available'
                    )
                except error.CannotListenError:
                    logger.warn(
                        'Could not start websockets, address already open. This is ok is you wan to run multiple instances.'
                    )
                except Exception as ex:
                    logger.warn(
                        'Could not start websocket, error: {}'.format(ex))
            else:
                try:
                    listenWS(self.__build_websockets_resource(),
                             interface=self.__bind_address)
                except error.CannotListenError:
                    logger.warn(
                        'Could not start websockets, address already open. This is ok is you wan to run multiple instances.'
                    )
                except Exception as ex:
                    logger.warn(
                        'Could not start websocket, error: {}'.format(ex))
            logger.info('Faraday Server is ready')
            reactor.addSystemEventTrigger('before', 'shutdown', signal_handler)
            reactor.run()

        except error.CannotListenError as e:
            logger.error(e)
            sys.exit(1)

        except Exception as e:
            logger.exception(
                'Something went wrong when trying to setup the Web UI')
            sys.exit(1)
Esempio n. 18
0
 def startService(self):
     self._stop = False
     self._transport = reactor.listenSSL(self._port, self._limiter, ssl.DefaultOpenSSLContextFactory(str(Config.https.tls_key), str(Config.https.tls_cert)), interface=self._address)
Esempio n. 19
0
            if bin:
                if client not in cl.sent_header:
                    head = header.header
                    head = head\
                        .replace("$title", cl.id3_headers['title'])\
                        .replace("$length", str(cl.id3_headers['length']))\
                        .replace("$listen", str(len(cl.clients)))\
                        .replace("$bitrate", str(cl.id3_headers['bitrate']))\
                        .replace("$max", str(config.PyCasterMaxListeners))
                    client.transport.write("HTTP/1.1 200 OK\r\n" + bytes(head))
                    cl.sent_header.append(client)
            client.transport.write(msg)
            if config.PyCasterSendLogging:
                print("SENT %i bytes TO %s" % (len(msg), client.id))


if __name__ == "__main__":
    import sys
    key = config.PyCasterSSLKey
    cert = config.PyCasterSSLCert
    factory = protocol.Factory()
    log.startLogging(config.PyCasterLogFile)
    factory.protocol = RadioServer
    if config.PyCasterSSL:
        reactor.listenSSL(config.PyCasterPort, factory,
                          ssl.DefaultOpenSSLContextFactory(key, cert))
        reactor.run()
    else:
        reactor.listenTCP(config.PyCasterPort, factory)
        reactor.run()
Esempio n. 20
0
        usage(1)

    use_encryption = CRYPTO_AVAILABLE
    port = cereconf.SAPINTEGRATION_SERVICE_PORT
    logfile = cereconf.SAPINTEGRATION_SERVICE_LOGFILE

    for opt, val in opts:
        if opt in ('-l', '--logfile'):
            logfile = val
        elif opt in ('-p', '--port'):
            port = int(val)
        elif opt in ('--unencrypted', ):
            use_encryption = False

    ## TBD: Use Cerebrum logger instead?
    # Init twisted logger
    log_observer = startLogging(file(logfile, 'w'))
    # Run service
    service = Application([SAPIntegrationServer], 'tns')
    resource = WSGIResource(reactor, reactor.getThreadPool(), service)
    root = Resource()
    root.putChild('SOAP', resource)
    if use_encryption:
        # TODO: we need to set up SSL properly
        sslcontext = ssl.DefaultOpenSSLContextFactory(
            cereconf.SSL_PRIVATE_KEY_FILE, cereconf.SSL_CERTIFICATE_FILE)
        reactor.listenSSL(int(port), Site(root), contextFactory=sslcontext)
    else:
        reactor.listenTCP(int(port), Site(root))
    reactor.run()
Esempio n. 21
0
 def setUp(self):
     # pyOpenSSL Context objects aren't introspectable enough.  Pass in
     # an alternate context factory so we can inspect what is done to it.
     self.contextFactory = ssl.DefaultOpenSSLContextFactory(
         certPath, certPath, _contextFactory=FakeContext)
     self.context = self.contextFactory.getContext()
Esempio n. 22
0
from twisted.internet import ssl, reactor
from twisted.internet.protocol import Factory, Protocol


class SendOK(Protocol):
    def dataReceived(self, data):
        """As soon as any data is received, write it back."""
        print data
        #self.transport.write("200 OK\r\n")
        #self.transport.write("got data: %s" % data)
        self.transport.write("HTTP/1.1 200 OK\r\n\r\n")
        self.transport.write("******** TEST RESPONSE *********")
        self.transport.loseConnection()


if __name__ == '__main__':
    factory = Factory()
    factory.protocol = SendOK
    reactor.listenSSL(
        443, factory,
        ssl.DefaultOpenSSLContextFactory('server.key', 'server.crt'))
    reactor.run()
Esempio n. 23
0
            'oks': '2',
            'oku': u'3',
            'okb': True,
            'okf': 5.123,
            'okd': Decimal('3') / Decimal('4'),
            'okt': datetime.now(amp.utc),
            'okl1': [4, 5, 6],
            'okl2': [['str01', 'str02'], ['str03', 'str04', 'str05']],
            'okla': [{
                'a': 7,
                'b': u'hello'
            }, {
                'a': 9,
                'b': u'goodbye'
            }]
        }

    def connectionLost(self, reason):
        print 'Client closed connection!'


if __name__ == '__main__':
    startLogging(stdout)
    factory = Factory()
    factory.protocol = Counter

    reactor.listenSSL(
        7113, factory,
        ssl.DefaultOpenSSLContextFactory('localhost.key', 'localhost.crt'))
    reactor.run()
Esempio n. 24
0
    def cmd_kill(self):
        """kill server"""
        for sname, service in self.services.items():
            service.cleanup()
        reactor.stop()


def verify_callback(connection, x509, errnum, errdepth, ok):
    if not ok:
        print('Invalid cert: ', x509.get_subject())
        return False
    else:
        print("Certs are fine")
    return True


if __name__ == '__main__':
    factory = SMFactory()
    if enable_ssl == 1:
        myContextFactory = ssl.DefaultOpenSSLContextFactory(
            server_key, server_cert)
        ctx = myContextFactory.getContext()

        ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
                       verify_callback)
        ctx.load_verify_locations(KEYS_LOCATION + '/ca.pem')
        reactor.listenSSL(DEFAULT_PORT, factory, myContextFactory)
    else:
        reactor.listenTCP(10000, SMFactory())
    reactor.run()
Esempio n. 25
0
    WebSocketServerProtocol

from autobahn.twisted.resource import WebSocketResource


class EchoServerProtocol(WebSocketServerProtocol):

    def onMessage(self, payload, isBinary):
        self.sendMessage(payload, isBinary)


if __name__ == '__main__':

    log.startLogging(sys.stdout)

    contextFactory = ssl.DefaultOpenSSLContextFactory('keys/server.key',
                                                      'keys/server.crt')

    factory = WebSocketServerFactory(u"wss://127.0.0.1:8080")
    factory.protocol = EchoServerProtocol

    resource = WebSocketResource(factory)

    # we server static files under "/" ..
    root = File(".")

    # and our WebSocket server under "/ws"
    root.putChild(u"ws", resource)

    # both under one Twisted Web Site
    site = Site(root)
Esempio n. 26
0
                "Sorry you dont have partner yet, check back in a minute")
        else:
            for partner in partners:
                if client.peer != partner:
                    partners[partner].sendMessage(msg)


if __name__ == "__main__":
    log.startLogging(sys.stdout)

    log.startLogging(sys.stdout)

    # SSL server context: load server key and certificate
    # We use this for both WS and Web!
    contextFactory = ssl.DefaultOpenSSLContextFactory(
        '/etc/letsencrypt/live/sachinsingh.co.in/privkey.pem',
        '/etc/letsencrypt/live/sachinsingh.co.in/fullchain.pem')

    factory = ChatRouletteFactory(u"wss://sachinsingh.co.in:81")
    # by default, allowedOrigins is "*" and will work fine out of the
    # box, but we can do better and be more-explicit about what we
    # allow. We are serving the Web content on 8080, but our WebSocket
    # listener is on 9000 so the Origin sent by the browser will be
    # from port 8080...

    factory.setProtocolOptions(
        maxFramePayloadSize=1048576,
        maxMessagePayloadSize=1048576,
        autoFragmentSize=65536,
        failByDrop=False,
        openHandshakeTimeout=20.5,
Esempio n. 27
0
def ssl_factory():
    pem = cert_path()
    return ssl.DefaultOpenSSLContextFactory(pem, pem)
Esempio n. 28
0
    def __init__(self,
                 manager,
                 port,
                 secure=False,
                 key_path=None,
                 crt_path=None,
                 unix_socket_path=None):
        self.manager = manager
        from twisted.internet import reactor, ssl

        from autobahn.twisted.websocket import WebSocketServerFactory, WebSocketServerProtocol

        class MyServerProtocol(WebSocketServerProtocol):
            def onConnect(self, request):
                log.info("Client connecting: {0}".format(
                    request.origin if request.origin else "self"))
                pass

            def onOpen(self):
                log.info("WebSocket connection open")
                WebSocketServer.clients.append(self)

            def onMessage(self, payload, isBinary):
                if isBinary:
                    log.info("Binary message received: {0} bytes".format(
                        len(payload)))
                else:
                    log.info("Text message received: {0}".format(
                        payload.decode("utf8")))
                    if not self.websocket_origin:
                        parsedPayload = json.loads(payload)
                        if parsedPayload["event"] == "open_bets":
                            HandlerManager.trigger("on_open_bets")
                        elif parsedPayload["event"] == "lock_bets":
                            HandlerManager.trigger("on_lock_bets")
                        elif parsedPayload["event"] == "end_bets":
                            HandlerManager.trigger(
                                "on_end_bets",
                                winning_team=parsedPayload["data"]
                                ["winning_team"],
                                player_team=parsedPayload["data"]
                                ["player_team"],
                            )
                        else:
                            for client in WebSocketServer.clients:
                                client.sendMessage(payload, False)

            def onClose(self, wasClean, code, reason):
                log.info("WebSocket connection closed: {0}".format(reason))
                try:
                    WebSocketServer.clients.remove(self)
                except:
                    pass

        factory = WebSocketServerFactory()
        factory.setProtocolOptions(autoPingInterval=15, autoPingTimeout=5)
        factory.protocol = MyServerProtocol

        def reactor_run(reactor,
                        factory,
                        port,
                        context_factory=None,
                        unix_socket_path=None):
            if unix_socket_path:
                sock_file = Path(unix_socket_path)
                if sock_file.exists():
                    sock_file.unlink()
                reactor.listenUNIX(unix_socket_path, factory)
            else:
                if context_factory:
                    log.info("wss secure")
                    reactor.listenSSL(port, factory, context_factory)
                else:
                    log.info("ws unsecure")
                    reactor.listenTCP(port, factory)
            reactor.run(installSignalHandlers=0)

        if secure:
            context_factory = ssl.DefaultOpenSSLContextFactory(
                key_path, crt_path)
        else:
            context_factory = None

        reactor_thread = threading.Thread(target=reactor_run,
                                          args=(reactor, factory, port,
                                                context_factory,
                                                unix_socket_path),
                                          name="WebSocketThread")
        reactor_thread.daemon = True
        reactor_thread.start()
Esempio n. 29
0
def main():

    parser = OptionParser()
    parser.add_option(
        '-l',
        '--loglevel',
        default='info',
        dest='logLevel',
        help=
        'This sets the logging level you have these options: debug, info, warning, error, critical \t\tThe standard value is info'
    )
    parser.add_option(
        '-p',
        '--port',
        default=4443,
        type='int',
        dest='port',
        help=
        'This options lets you use a custom port instead of 443 (use a port > 1024 to run as non root user)'
    )
    parser.add_option('--logfile',
                      default=None,
                      dest='logfile',
                      help='Log to a file instead of stdout.')
    parser.add_option(
        '-m',
        '--maxConnections',
        default=None,
        type='int',
        dest='maxConnections',
        help=
        'You can limit the number of maximum simultaneous connections with that switch'
    )
    parser.add_option('-n',
                      '--noSSL',
                      action="store_true",
                      default=False,
                      dest='sslDisabled',
                      help='You can switch off SSL with this switch.')
    (options, _) = parser.parse_args()

    x = logging.getLogger()
    x.setLevel(log_levels[options.logLevel])

    if options.logfile != None:
        h = logging.FileHandler(options.logfile)
    else:
        h = logging.StreamHandler()

    f = logging.Formatter(u"%(levelname)s %(message)s")
    h.setFormatter(f)
    x.addHandler(h)

    if not options.sslDisabled:
        create_self_signed_cert()

    try:
        from twisted.internet import epollreactor
        epollreactor.install()
    except ImportError:
        x.debug("System does not support epoll")
        x.debug("-> Will use simple poll")
        try:
            from twisted.internet import pollreactor
            pollreactor.install()
        except ImportError:
            x.debug("System does not support poll")
            x.debug("-> Will use default select interface")
    from twisted.internet import reactor

    x.info("Starting server on port {0}".format(options.port))
    if options.sslDisabled:
        x.warning(
            "Starting, as requested, without SSL, connections are not secured and can be altered and eavesdropped on from client to server"
        )
        reactor.listenTCP(options.port, SiriFactory(options.maxConnections))
    else:
        reactor.listenSSL(
            options.port, SiriFactory(options.maxConnections),
            ssl.DefaultOpenSSLContextFactory(SERVER_KEY_FILE,
                                             SERVER_CERT_FILE))
    reactor.run()
    x.info("Server shutdown complete")
Esempio n. 30
0
            # connect to kafka
            p = Producer({'bootstrap.servers': kafka_client})
            # stage data from clent to kafka topic
            p.produce(topic, data)
            # send all data to kafka topic
            p.flush()
            print('sent message to kafka!')

if __name__ == '__main__':
    # factory produces the echo protocol, which handles input on the incoming
    # server connection
    factory = Factory()
    factory.protocol = Echo

    # initialise listening on given port with given credentials
    # keys[0] - domain.key, keys[1] - domain.crt
    reactor.listenSSL(port,
                      factory,
                      ssl.DefaultOpenSSLContextFactory(keys[0],
                                                       keys[1],
                                                       sslmethod=TLSv1_2_METHOD),
                    )
                        # # the interface argument of listenSSL takes an IP
                        # # address, however, I am not able to get my program
                        # # to run with an IP address other than localhost or
                        # # the host computer's IP

                        # interface='192.168.1.109')
    # starts the event loop that Twisted utilises, and provides threading
    reactor.run()