Example #1
0
    def run(self):
        print self.WEB_UI_LOCAL_PATH

        def signal_handler(*args):
            logger.info('Received SIGTERM, shutting down.')
            logger.info("Stopping threads, please wait...")
            # teardown()
            self.raw_report_processor.stop()

        site = twisted.web.server.Site(self.__root_resource)
        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 = RawReportProcessor()
            self.raw_report_processor.start()
            # web and static content
            self.__listen_func(self.__listen_port,
                               site,
                               interface=self.__bind_address)
            # websockets
            try:
                listenWS(self.__build_websockets_resource(),
                         interface=self.__bind_address)
            except:
                logger.warn(
                    'Could not start websockets, address already open. This is ok is you wan to run multiple instances.'
                )
            logger.info('Faraday Server is ready')
            reactor.addSystemEventTrigger('before', 'shutdown', signal_handler)
            reactor.run()

        except error.CannotListenError as e:
            logger.error(str(e))
            sys.exit(1)
        except Exception as e:
            logger.error(
                'Something went wrong when trying to setup the Web UI')
            logger.exception(e)
            sys.exit(1)
Example #2
0
 def onMessage(self, payload, is_binary):
     from faraday.server.web import app
     """
         We only support JOIN and LEAVE workspace messages.
         When authentication is implemented we need to verify
         that the user can join the selected workspace.
         When authentication is implemented we need to reply
         the client if the join failed.
     """
     if not is_binary:
         message = json.loads(payload)
         if message['action'] == 'JOIN_WORKSPACE':
             if 'workspace' not in message or 'token' not in message:
                 logger.warning('Invalid join workspace message: '
                                '{}'.format(message))
                 self.sendClose()
                 return
             signer = itsdangerous.TimestampSigner(app.config['SECRET_KEY'],
                                                   salt="websocket")
             try:
                 workspace_id = signer.unsign(message['token'], max_age=60)
             except itsdangerous.BadData as e:
                 self.sendClose()
                 logger.warning('Invalid websocket token for workspace '
                                '{}'.format(message['workspace']))
                 logger.exception(e)
             else:
                 with app.app_context():
                     workspace = Workspace.query.get(int(workspace_id))
                 if workspace.name != message['workspace']:
                     logger.warning(
                         'Trying to join workspace {} with token of '
                         'workspace {}. Rejecting.'.format(
                             message['workspace'], workspace.name))
                     self.sendClose()
                 else:
                     self.factory.join_workspace(self, message['workspace'])
         if message['action'] == 'LEAVE_WORKSPACE':
             self.factory.leave_workspace(self, message['workspace'])
Example #3
0
    def run(self):
        def signal_handler(*args):
            logger.info('Received SIGTERM, shutting down.')
            logger.info("Stopping threads, please wait...")
            self.__stop_all_threads()

        log_path = 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(f'Could not start websocket, error: {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(f'Could not start websocket, error: {ex}')
            logger.info('Faraday Server is ready')
            reactor.addSystemEventTrigger('before', 'shutdown', signal_handler)
            reactor.run()

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

        except Exception as e:
            logger.exception(
                'Something went wrong when trying to setup the Web UI')
            logger.exception(e)
            self.__stop_all_threads()
            sys.exit(1)
Example #4
0
    def run(self):
        def signal_handler(*args):
            logger.info('Received SIGTERM, shutting down.')
            logger.info("Stopping threads, please wait...")
            # teardown()
            self.raw_report_processor.stop()
            self.timer.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 = RawReportProcessor()
            self.raw_report_processor.start()
            self.timer = TimerClass()
            self.timer.start()
            # web and static content
            self.__listen_func(self.__listen_port,
                               site,
                               interface=self.__bind_address)
            # websockets
            if faraday.server.config.websocket_ssl.enabled:
                contextFactory = ssl.DefaultOpenSSLContextFactory(
                    faraday.server.config.websocket_ssl.keyfile.strip('\''),
                    faraday.server.config.websocket_ssl.certificate.strip(
                        '\''))
                try:
                    listenWS(self.__build_websockets_resource(),
                             interface=self.__bind_address,
                             contextFactory=contextFactory)
                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(str(e))
            sys.exit(1)
        except Exception as e:
            logger.error(
                'Something went wrong when trying to setup the Web UI')
            logger.exception(e)
            sys.exit(1)