class StreamUploadRequestHandler(BaseRequestHandler): def __init__(self, application, request, **kwargs): super().__init__(application, request, **kwargs) self.form_reader = None @check_authorization def prepare(self): if self.request.method != 'POST': respond_error(self, 405, 'Method not allowed') return audit_name = get_audit_name_from_request(self) file_upload_feature = self.application.file_upload_feature upload_folder = file_upload_feature.prepare_new_folder(audit_name) self.request.connection.set_max_body_size(self.application.max_request_size_mb * BYTES_IN_MB) self.form_reader = StreamingFormReader(self.request.headers, upload_folder) def data_received(self, chunk): self.form_reader.read(chunk)
class ScriptExecute(BaseRequestHandler): def __init__(self, application, request, **kwargs): super().__init__(application, request, **kwargs) self.form_reader = None @check_authorization def prepare(self): if self.request.method != 'POST': respond_error(self, 405, 'Method not allowed') return audit_name = get_audit_name_from_request(self) file_upload_feature = self.application.file_upload_feature upload_folder = file_upload_feature.prepare_new_folder(audit_name) self.request.connection.set_max_body_size( self.application.max_request_size_mb * BYTES_IN_MB) self.form_reader = StreamingFormReader(self.request.headers, upload_folder) def data_received(self, chunk): self.form_reader.read(chunk) @inject_user def post(self, user): script_name = None audit_name = user.get_audit_name() try: arguments = self.form_reader.values execution_info = external_model.to_execution_info(arguments) script_name = execution_info.script config_model = self.application.config_service.create_config_model( script_name, user) if not config_model: message = 'Script with name "' + str( script_name) + '" not found' LOGGER.error(message) respond_error(self, 400, message) return parameter_values = execution_info.param_values if self.form_reader.files: for key, value in self.form_reader.files.items(): parameter_values[key] = value.path try: config_model.set_all_param_values(parameter_values) normalized_values = dict(config_model.parameter_values) except InvalidValueException as e: message = 'Invalid parameter %s value: %s' % (e.param_name, str(e)) LOGGER.error(message) respond_error(self, 400, message) return all_audit_names = user.audit_names LOGGER.info('Calling script %s. User %s', script_name, all_audit_names) execution_id = self.application.execution_service.start_script( config_model, normalized_values, user.user_id, all_audit_names) self.write(str(execution_id)) except ConfigNotAllowedException: LOGGER.warning('Access to the script "' + script_name + '" is denied for ' + audit_name) respond_error(self, 403, 'Access to the script is denied') return except Exception as e: LOGGER.exception("Error while calling the script") if hasattr(e, "strerror") and e.strerror: error_output = e.strerror else: error_output = "Unknown error occurred, contact the administrator" result = " --- ERRORS --- \n" result += error_output if script_name: script = str(script_name) else: script = "Some script" audit_name = audit_name self.application.alerts_service.send_alert( script + ' NOT STARTED', "Couldn't start the script " + script + ' by ' + audit_name + '.\n\n' + result) respond_error(self, 500, result)
class ScriptExecute(BaseRequestHandler): def __init__(self, application, request, **kwargs): super().__init__(application, request, **kwargs) self.form_reader = None @check_authorization def prepare(self): if self.request.method != 'POST': respond_error(self, 405, 'Method not allowed') return audit_name = get_audit_name_from_request(self) file_upload_feature = self.application.file_upload_feature upload_folder = file_upload_feature.prepare_new_folder(audit_name) self.request.connection.set_max_body_size(self.application.max_request_size_mb * BYTES_IN_MB) self.form_reader = StreamingFormReader(self.request.headers, upload_folder) def data_received(self, chunk): self.form_reader.read(chunk) @inject_user def post(self, user): script_name = None audit_name = user.get_audit_name() try: arguments = self.form_reader.values execution_info = external_model.to_execution_info(arguments) script_name = execution_info.script config_model = self.application.config_service.create_config_model(script_name, user) if not config_model: message = 'Script with name "' + str(script_name) + '" not found' LOGGER.error(message) respond_error(self, 400, message) return parameter_values = execution_info.param_values if self.form_reader.files: for key, value in self.form_reader.files.items(): parameter_values[key] = value.path try: config_model.set_all_param_values(parameter_values) normalized_values = dict(config_model.parameter_values) except InvalidValueException as e: message = 'Invalid parameter %s value: %s' % (e.param_name, str(e)) LOGGER.error(message) respond_error(self, 400, message) return all_audit_names = user.audit_names LOGGER.info('Calling script %s. User %s', script_name, all_audit_names) execution_id = self.application.execution_service.start_script( config_model, normalized_values, user.user_id, all_audit_names) self.write(str(execution_id)) except ConfigNotAllowedException: LOGGER.warning('Access to the script "' + script_name + '" is denied for ' + audit_name) respond_error(self, 403, 'Access to the script is denied') return except Exception as e: LOGGER.exception("Error while calling the script") if hasattr(e, "strerror") and e.strerror: error_output = e.strerror else: error_output = "Unknown error occurred, contact the administrator" result = " --- ERRORS --- \n" result += error_output if script_name: script = str(script_name) else: script = "Some script" audit_name = audit_name self.application.alerts_service.send_alert( script + ' NOT STARTED', "Couldn't start the script " + script + ' by ' + audit_name + '.\n\n' + result) respond_error(self, 500, result)