Пример #1
0
    def setUp(self) -> None:
        super().setUp()

        test_utils.setup()
        self.requires_explicit_ioloop_factory = os_utils.is_win(
        ) and env_utils.is_min_version('3.8')
        self.windows = os_utils.is_win()
Пример #2
0
    def setUp(self) -> None:
        super().setUp()

        test_utils.setup()
        self.requires_explicit_ioloop_factory = os_utils.is_win(
        ) and env_utils.is_min_version('3.8')
        self.windows = os_utils.is_win()

        self.conf_folder = test_utils.create_dir(os.path.join('conf'))
        self.runners_folder = os.path.join(self.conf_folder, 'runners')
Пример #3
0
def init(server_config: ServerConfig,
         authenticator,
         authorizer,
         execution_service: ExecutionService,
         schedule_service: ScheduleService,
         execution_logging_service: ExecutionLoggingService,
         config_service: ConfigService,
         alerts_service: AlertsService,
         file_upload_feature: FileUploadFeature,
         file_download_feature: FileDownloadFeature,
         secret,
         server_version,
         conf_folder,
         *,
         start_server=True):
    ssl_context = None
    if server_config.is_ssl():
        ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
        ssl_context.load_cert_chain(server_config.get_ssl_cert_path(),
                                    server_config.get_ssl_key_path())

    auth = TornadoAuth(authenticator)
    if auth.is_enabled():
        identification = AuthBasedIdentification(auth)
    else:
        identification = IpBasedIdentification(server_config.ip_validator,
                                               server_config.user_header_name)

    downloads_folder = file_download_feature.get_result_files_folder()

    handlers = [
        (r'/conf', GetServerConf), (r'/scripts', GetScripts),
        (r'/scripts/([^/]*)', ScriptConfigSocket),
        (r'/scripts/([^/]*)/([^/]*)/list-files', ScriptParameterListFiles),
        (r'/executions/start', ScriptExecute),
        (r'/executions/stop/(.*)', ScriptStop),
        (r'/executions/kill/(.*)', ScriptKill),
        (r'/executions/io/(.*)', ScriptStreamSocket),
        (r'/executions/active', GetActiveExecutionIds),
        (r'/executions/config/(.*)', GetExecutingScriptConfig),
        (r'/executions/cleanup/(.*)', CleanupExecutingScript),
        (r'/executions/status/(.*)', GetExecutionStatus),
        (r'/history/execution_log/short', GetShortHistoryEntriesHandler),
        (r'/history/execution_log/long/(.*)', GetLongHistoryEntryHandler),
        (r'/schedule', AddSchedule), (r'/auth/info', AuthInfoHandler),
        (r'/result_files/(.*)', DownloadResultFile, {
            'path': downloads_folder
        }), (r'/admin/scripts', AdminUpdateScriptEndpoint),
        (r'/admin/scripts/(.*)', AdminGetScriptEndpoint),
        (r"/", ProxiedRedirectHandler, {
            "url": "/index.html"
        })
    ]

    if auth.is_enabled():
        handlers.append((r'/login', LoginHandler))
        handlers.append((r'/auth/config', AuthConfigHandler))
        handlers.append((r'/logout', LogoutHandler))

    handlers.append((r'/theme/(.*)', ThemeStaticFileHandler, {
        'path': os.path.join(conf_folder, 'theme')
    }))
    handlers.append((r"/(.*)", AuthorizedStaticFileHandler, {"path": "web"}))

    settings = {
        "cookie_secret": secret,
        "login_url": "/login.html",
        'websocket_ping_interval': 30,
        'websocket_ping_timeout': 300,
        'compress_response': True
    }

    application = tornado.web.Application(handlers, **settings)

    application.auth = auth

    application.server_config = server_config
    application.server_version = server_version
    application.authorizer = authorizer
    application.downloads_folder = downloads_folder
    application.file_download_feature = file_download_feature
    application.file_upload_feature = file_upload_feature
    application.execution_service = execution_service
    application.schedule_service = schedule_service
    application.execution_logging_service = execution_logging_service
    application.config_service = config_service
    application.alerts_service = alerts_service
    application.identification = identification
    application.max_request_size_mb = server_config.max_request_size_mb

    if os_utils.is_win() and env_utils.is_min_version('3.8'):
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    io_loop = tornado.ioloop.IOLoop.current()

    global _http_server
    _http_server = httpserver.HTTPServer(application,
                                         ssl_options=ssl_context,
                                         max_buffer_size=10 * BYTES_IN_MB)
    _http_server.listen(server_config.port, address=server_config.address)

    intercept_stop_when_running_scripts(io_loop, execution_service)

    http_protocol = 'https' if server_config.ssl else 'http'
    print('Server is running on: %s://%s:%s' %
          (http_protocol, server_config.address, server_config.port))

    if start_server:
        io_loop.start()
Пример #4
0
 def test_2_7_suitable_for_2_1_float(self):
     self.assertTrue(env_utils.is_min_version(2.1, [2, 7]))
Пример #5
0
 def test_invalid_minor_version(self):
     self.assertFalse(env_utils.is_min_version('3.5b', [3, 5]))
Пример #6
0
 def test_2_7_suitable_for_2_1_str(self):
     self.assertTrue(env_utils.is_min_version('2.1', [2, 7]))
Пример #7
0
 def test_3_5_not_suitable_for_2_7_float(self):
     self.assertFalse(env_utils.is_min_version(2.7, [3, 5]))
Пример #8
0
 def test_3_5_not_suitable_for_2_7_str(self):
     self.assertFalse(env_utils.is_min_version('2.7', [3, 5]))
Пример #9
0
 def test_2_7_not_suitable_for_3_5_float(self):
     self.assertFalse(env_utils.is_min_version(3.5, [2, 7]))
Пример #10
0
 def test_2_7_not_suitable_for_3_5_str(self):
     self.assertFalse(env_utils.is_min_version('3.5', [2, 7]))
Пример #11
0
 def test_3_5_suitable_for_3_5_float(self):
     self.assertTrue(env_utils.is_min_version(3.5, [3, 5]))
Пример #12
0
 def test_3_5_suitable_for_3_5_str(self):
     self.assertTrue(env_utils.is_min_version('3.5', [3, 5]))