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 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): 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