def __send_to_contract__(self, method, encrypted_session_key, encrypted_request, encoding='raw'): request_identifier = self.request_identifier self.request_identifier += 1 try: url = '{0}/{1}'.format(self.ServiceURL, method) request_headers = { 'x-request-identifier': 'request{0}'.format(request_identifier) } content_headers = {} if encoding == 'base64': encrypted_session_key = base64.b64encode(encrypted_session_key) encrypted_request = base64.b64encode(encrypted_request) content_headers['Content-Transfer-Encoding'] = 'base64' request = dict() request['encrypted_session_key'] = (None, encrypted_session_key, 'application/octet-stream', content_headers) request['encrypted_request'] = (None, encrypted_request, 'application/octet-stream', content_headers) response = self.session.post(url, files=request, headers=request_headers, timeout=self.default_timeout, stream=False) response.raise_for_status() encoding = response.headers.get('Content-Transfer-Encoding', '') content = response.content if encoding == 'base64': return base64.b64decode(content) return content except requests.Timeout as e: logger.warn('[%d] requests timeout (invoke)', request_identifier) raise MessageException(str(e)) from e except requests.ConnectionError as e: logger.warn('[%d] connection error (invoke); %s', request_identifier, e.strerror) raise MessageException(str(e)) from e except requests.HTTPError as e: logger.warn( '[%d] network error connecting to service (invoke); %s', request_identifier, str(e)) raise MessageException(str(e)) from e except Exception as e: logger.warn('[%d] unknown exception (invoke); %s', request_identifier, str(e)) raise EnclaveException(str(e)) from e
def get_enclave_public_info(self): try: url = '{0}/info'.format(self.ServiceURL) while True: response = self.session.get(url, timeout=self.default_timeout) if response.status_code == 429: logger.info('prepare to resubmit the request') sleeptime = min( 1.0, float(response.headers.get('retry-after', 1.0))) time.sleep(sleeptime) continue response.raise_for_status() return response.json() except (requests.HTTPError, requests.ConnectionError, requests.Timeout) as e: logger.warn( 'network error connecting to service (get_enclave_public_info); %s', str(e)) raise MessageException(str(e)) from e except Exception as e: logger.warn('unknown exception (get_enclave_public_info); %s', str(e)) raise EnclaveException(str(e)) from e
def verify_secrets(self, contract_id, owner_id, secret_list): request = dict() request['contract_id'] = contract_id request['creator_id'] = owner_id request['secrets'] = secret_list try: url = '{0}/verify'.format(self.ServiceURL) while True: response = self.session.post(url, json=request, timeout=self.default_timeout, stream=False) if response.status_code == 429: logger.info('prepare to resubmit the request') sleeptime = min( 1.0, float(response.headers.get('retry-after', 1.0))) time.sleep(sleeptime) continue response.raise_for_status() return response.json() except (requests.HTTPError, requests.ConnectionError, requests.Timeout) as e: logger.warn( 'network error connecting to service (verify_secrets); %s', str(e)) raise MessageException(str(e)) from e except Exception as e: logger.warn('unknown exception (verify_secrets); %s', str(e)) raise EnclaveException(str(e)) from e