def handle(self): input = self.request.input input.security_id = input.security_id if input.security_id != ZATO_NONE else None input.soap_action = input.soap_action if input.soap_action else '' if not input.url_path.startswith('/'): msg = 'URL path:[{}] must start with a slash /'.format( input.url_path) self.logger.error(msg) raise Exception(msg) with closing(self.odb.session()) as session: existing_one = session.query(HTTPSOAP.id).\ filter(HTTPSOAP.cluster_id==input.cluster_id).\ filter(HTTPSOAP.name==input.name).\ filter(HTTPSOAP.connection==input.connection).\ filter(HTTPSOAP.transport==input.transport).\ first() if existing_one: raise Exception( 'An object of that name [{0}] already exists on this cluster' .format(input.name)) # Is the service's name correct? service = session.query(Service).\ filter(Cluster.id==input.cluster_id).\ filter(Service.name==input.service).first() if input.connection == 'channel' and not service: msg = 'Service [{0}] does not exist on this cluster'.format( input.service) self.logger.error(msg) raise Exception(msg) # Will raise exception if the security type doesn't match connection # type and transport sec_info = self._handle_security_info(session, input.security_id, input.connection, input.transport) try: item = HTTPSOAP() item.connection = input.connection item.transport = input.transport item.cluster_id = input.cluster_id item.is_internal = input.is_internal item.name = input.name item.is_active = input.is_active item.host = input.host item.url_path = input.url_path item.security_id = input.security_id or None # So SQLite doesn't reject '' item.method = input.method item.soap_action = input.soap_action item.soap_version = input.soap_version item.data_format = input.data_format item.service = service item.ping_method = input.get( 'ping_method') or DEFAULT_HTTP_PING_METHOD item.pool_size = input.get( 'pool_size') or DEFAULT_HTTP_POOL_SIZE item.merge_url_params_req = input.get( 'merge_url_params_req') or True item.url_params_pri = input.get( 'url_params_pri') or URL_PARAMS_PRIORITY.DEFAULT item.params_pri = input.get( 'params_pri') or PARAMS_PRIORITY.DEFAULT item.serialization_type = input.get( 'serialization_type' ) or HTTP_SOAP_SERIALIZATION_TYPE.DEFAULT.id item.timeout = input.get( 'timeout') or MISC.DEFAULT_HTTP_TIMEOUT item.has_rbac = input.get('has_rbac') or False item.content_type = input.get('content_type') sec_tls_ca_cert_id = input.get('sec_tls_ca_cert_id') item.sec_tls_ca_cert_id = sec_tls_ca_cert_id if sec_tls_ca_cert_id and sec_tls_ca_cert_id != ZATO_NONE else None session.add(item) session.commit() if input.connection == 'channel': input.impl_name = service.impl_name input.service_id = service.id input.service_name = service.name if item.sec_tls_ca_cert_id and item.sec_tls_ca_cert_id != ZATO_NONE: self.add_tls_ca_cert(input, item.sec_tls_ca_cert_id) input.id = item.id input.update(sec_info) if input.connection == 'channel': action = CHANNEL.HTTP_SOAP_CREATE_EDIT.value else: action = OUTGOING.HTTP_SOAP_CREATE_EDIT.value self.notify_worker_threads(input, action) self.response.payload.id = item.id self.response.payload.name = item.name except Exception, e: msg = 'Could not create the object, e:[{e}]'.format( e=format_exc(e)) self.logger.error(msg) session.rollback() raise
def handle(self): input = self.request.input input.security_id = input.security_id if input.security_id != ZATO_NONE else None input.soap_action = input.soap_action if input.soap_action else '' if not input.url_path.startswith('/'): msg = 'URL path:[{}] must start with a slash /'.format( input.url_path) self.logger.error(msg) raise Exception(msg) with closing(self.odb.session()) as session: existing_one = session.query(HTTPSOAP.id).\ filter(HTTPSOAP.cluster_id==input.cluster_id).\ filter(HTTPSOAP.name==input.name).\ filter(HTTPSOAP.connection==input.connection).\ filter(HTTPSOAP.transport==input.transport).\ first() if existing_one: raise Exception( 'An object of that name [{0}] already exists on this cluster' .format(input.name)) # Is the service's name correct? service = session.query(Service).\ filter(Cluster.id==input.cluster_id).\ filter(Service.name==input.service).first() if input.connection == 'channel' and not service: msg = 'Service [{0}] does not exist on this cluster'.format( input.service) self.logger.error(msg) raise Exception(msg) # Will raise exception if the security type doesn't match connection # type and transport sec_info = self._handle_security_info(session, input.security_id, input.connection, input.transport) try: item = HTTPSOAP() item.connection = input.connection item.transport = input.transport item.cluster_id = input.cluster_id item.is_internal = input.is_internal item.name = input.name item.is_active = input.is_active item.host = input.host item.url_path = input.url_path item.security_id = input.security_id item.method = input.method item.soap_action = input.soap_action item.soap_version = input.soap_version item.data_format = input.data_format item.service = service session.add(item) session.commit() if input.connection == 'channel': input.impl_name = service.impl_name input.service_id = service.id input.service_name = service.name input.id = item.id input.update(sec_info) if input.connection == 'channel': action = CHANNEL.HTTP_SOAP_CREATE_EDIT else: action = OUTGOING.HTTP_SOAP_CREATE_EDIT self.notify_worker_threads(input, action) self.response.payload.id = item.id self.response.payload.name = item.name except Exception, e: msg = 'Could not create the object, e:[{e}]'.format( e=format_exc(e)) self.logger.error(msg) session.rollback() raise
def handle(self): input = self.request.input input.security_id = input.security_id if input.security_id != ZATO_NONE else None input.soap_action = input.soap_action if input.soap_action else '' if not input.url_path.startswith('/'): msg = 'URL path:[{}] must start with a slash /'.format(input.url_path) self.logger.error(msg) raise Exception(msg) with closing(self.odb.session()) as session: existing_one = session.query(HTTPSOAP.id).\ filter(HTTPSOAP.cluster_id==input.cluster_id).\ filter(HTTPSOAP.name==input.name).\ filter(HTTPSOAP.connection==input.connection).\ filter(HTTPSOAP.transport==input.transport).\ first() if existing_one: raise Exception('An object of that name [{0}] already exists on this cluster'.format(input.name)) # Is the service's name correct? service = session.query(Service).\ filter(Cluster.id==input.cluster_id).\ filter(Service.name==input.service).first() if input.connection == 'channel' and not service: msg = 'Service [{0}] does not exist on this cluster'.format(input.service) self.logger.error(msg) raise Exception(msg) # Will raise exception if the security type doesn't match connection # type and transport sec_info = self._handle_security_info(session, input.security_id, input.connection, input.transport) try: item = HTTPSOAP() item.connection = input.connection item.transport = input.transport item.cluster_id = input.cluster_id item.is_internal = input.is_internal item.name = input.name item.is_active = input.is_active item.host = input.host item.url_path = input.url_path item.security_id = input.security_id item.method = input.method item.soap_action = input.soap_action item.soap_version = input.soap_version item.data_format = input.data_format item.service = service session.add(item) session.commit() if input.connection == 'channel': input.impl_name = service.impl_name input.service_id = service.id input.service_name = service.name input.id = item.id input.update(sec_info) if input.connection == 'channel': action = CHANNEL.HTTP_SOAP_CREATE_EDIT else: action = OUTGOING.HTTP_SOAP_CREATE_EDIT self.notify_worker_threads(input, action) self.response.payload.id = item.id except Exception, e: msg = 'Could not create the object, e:[{e}]'.format(e=format_exc(e)) self.logger.error(msg) session.rollback() raise
def handle(self): input = self.request.input input.security_id = input.security_id if input.security_id != ZATO_NONE else None input.soap_action = input.soap_action if input.soap_action else '' if not input.url_path.startswith('/'): msg = 'URL path:[{}] must start with a slash /'.format(input.url_path) self.logger.error(msg) raise Exception(msg) with closing(self.odb.session()) as session: existing_one = session.query(HTTPSOAP.id).\ filter(HTTPSOAP.cluster_id==input.cluster_id).\ filter(HTTPSOAP.name==input.name).\ filter(HTTPSOAP.connection==input.connection).\ filter(HTTPSOAP.transport==input.transport).\ first() if existing_one: raise Exception('An object of that name [{0}] already exists on this cluster'.format(input.name)) # Is the service's name correct? service = session.query(Service).\ filter(Cluster.id==input.cluster_id).\ filter(Service.name==input.service).first() if input.connection == 'channel' and not service: msg = 'Service [{0}] does not exist on this cluster'.format(input.service) self.logger.error(msg) raise Exception(msg) # Will raise exception if the security type doesn't match connection # type and transport sec_info = self._handle_security_info(session, input.security_id, input.connection, input.transport) try: item = HTTPSOAP() item.connection = input.connection item.transport = input.transport item.cluster_id = input.cluster_id item.is_internal = input.is_internal item.name = input.name item.is_active = input.is_active item.host = input.host item.url_path = input.url_path item.security_id = input.security_id item.method = input.method item.soap_action = input.soap_action item.soap_version = input.soap_version item.data_format = input.data_format item.service = service item.ping_method = input.get('ping_method') or DEFAULT_HTTP_PING_METHOD item.pool_size = input.get('pool_size') or DEFAULT_HTTP_POOL_SIZE item.merge_url_params_req = input.get('merge_url_params_req') or True item.url_params_pri = input.get('url_params_pri') or URL_PARAMS_PRIORITY.DEFAULT item.params_pri = input.get('params_pri') or PARAMS_PRIORITY.DEFAULT item.serialization_type = input.get('serialization_type') or HTTP_SOAP_SERIALIZATION_TYPE.DEFAULT.id item.timeout = input.get('timeout') or MISC.DEFAULT_HTTP_TIMEOUT item.has_rbac = input.get('has_rbac', False) session.add(item) session.commit() if input.connection == 'channel': input.impl_name = service.impl_name input.service_id = service.id input.service_name = service.name input.id = item.id input.update(sec_info) if input.connection == 'channel': action = CHANNEL.HTTP_SOAP_CREATE_EDIT.value else: action = OUTGOING.HTTP_SOAP_CREATE_EDIT.value self.notify_worker_threads(input, action) self.response.payload.id = item.id self.response.payload.name = item.name except Exception, e: msg = 'Could not create the object, e:[{e}]'.format(e=format_exc(e)) self.logger.error(msg) session.rollback() raise
def handle(self, *args, **kwargs): with closing(self.server.odb.session()) as session: payload = kwargs.get('payload') core_params = ['connection', 'transport', 'cluster_id', 'name', 'is_active', 'is_internal', 'url_path', 'service', 'sec_def_id'] core_params = _get_params(payload, core_params, 'data.') optional_params = ['method', 'soap_action', 'soap_version'] optional_params = _get_params(payload, optional_params, 'data.', default_value=None) name = core_params['name'] cluster_id = core_params['cluster_id'] service_name = core_params['service'] sec_def_id = core_params['sec_def_id'] existing_one = session.query(HTTPSOAP.id).\ filter(HTTPSOAP.cluster_id==cluster_id).\ filter(HTTPSOAP.name==name).\ first() if existing_one: raise Exception('An object of that name [{0}] already exists on this cluster'.format(name)) # Is the service's name correct? service = session.query(Service).\ filter(Cluster.id==cluster_id).\ filter(Service.name==service_name).first() if not service: msg = 'Service [{0}] does not exist on this cluster'.format(service_name) self.logger.error(msg) raise Exception(msg) # Now onto assigning the security-related attributes. if sec_def_id != ZATO_NONE: sec_def = session.query(SecurityDefinition).\ filter(SecurityDefinition.id==sec_def_id).\ one() #sec_def = SecurityDefinition(None, security_def_type) #session.add(sec_def) created_elem = Element('http_soap') try: core_params['is_active'] = is_boolean(core_params['is_active']) item = HTTPSOAP() item.connection = core_params['connection'] item.transport = core_params['transport'] item.cluster_id = core_params['cluster_id'] item.is_internal = core_params['is_internal'] item.name = core_params['name'] item.is_active = core_params['is_active'] item.url_path = core_params['url_path'] item.method = optional_params.get('method') item.soap_action = optional_params.get('soap_action') item.soap_version = optional_params.get('soap_version') item.service = service if sec_def_id != ZATO_NONE: channel_sec = HTTPSOAPSecurity(item, sec_def) session.add(channel_sec) session.add(item) session.commit() created_elem.id = item.id return ZATO_OK, etree.tostring(created_elem) except Exception, e: msg = 'Could not create the object, e=[{e}]'.format(e=format_exc(e)) self.logger.error(msg) session.rollback() raise