def _do_post(self, data, uri=None, hmac=None): uri = uri or self.uri params = six.moves.urllib.parse.urlencode(data) # have to format url with params directly to ensure ordering remains unchanged full_url = '{}?{}'.format(uri, params) hmac_header_value = hmac or get_hmac_digest(b'123abc', full_url) return self.client.get(full_url, HTTP_X_MAC_DIGEST=hmac_header_value)
def validate_form(form_xml): try: response = requests.post( get_formplayer_url() + const.ENDPOINT_VALIDATE_FORM, data=form_xml, headers={ 'Content-Type': 'application/xml', 'X-MAC-DIGEST': get_hmac_digest(settings.FORMPLAYER_INTERNAL_AUTH_KEY, form_xml), }) except RequestException as e: notify_exception(None, "Error calling Formplayer form validation endpoint") raise FormplayerAPIException(e) try: response.raise_for_status() except HTTPError: notify_exception(None, "Error calling Formplayer form validation endpoint", details={'status_code': response.status_code}) raise FormplayerRequestException(response.status_code) api_result = ValidationAPIResult(response.json()) result = FormValidationResult( problems=[problem.to_json() for problem in api_result.problems], success=api_result.validated, fatal_error=api_result.fatal_error, ) return result
def test_with_hmac_signing(self): assert not settings.DEBUG data = json.dumps({'sessionId': self.session_key, 'domain': 'domain'}) header_value = get_hmac_digest(b'123abc', data) response = Client().post(self.url, data, content_type="application/json", HTTP_X_MAC_DIGEST=header_value) self.assertEqual(200, response.status_code) self.assertJSONEqual(response.content, self.expected_response)
def formplayer_post_data_helper(d, content_type, url): data = json.dumps(d).encode('utf-8') up = urlparse(url) headers = {} headers["Content-Type"] = content_type headers["content-length"] = len(data) headers["X-MAC-DIGEST"] = get_hmac_digest( settings.FORMPLAYER_INTERNAL_AUTH_KEY, data) response = requests.post(url, data=data, headers=headers) response_json = response.json() return response.text
def test_with_hmac_signing(self): assert not settings.DEBUG data = json.dumps({'sessionId': self.session_key, 'domain': 'domain'}) header_value = get_hmac_digest(b'123abc', data) response = Client().post( self.url, data, content_type="application/json", HTTP_X_MAC_DIGEST=header_value ) self.assertEqual(200, response.status_code) self.assertJSONEqual(response.content, self.expected_response)
def formplayer_post_data_helper(d, content_type, url): data = json.dumps(d).encode('utf-8') headers = {} headers["Content-Type"] = content_type headers["content-length"] = str(len(data)) headers["X-MAC-DIGEST"] = get_hmac_digest( settings.FORMPLAYER_INTERNAL_AUTH_KEY, data) response = requests.post(url, data=data, headers=headers) if 500 <= response.status_code < 600: http_error_msg = '%s Server Error: %s for url: %s' % ( response.status_code, response.reason, response.url) raise HTTPError(http_error_msg, response=response) return response.json()
def formplayer_post_data_helper(d, auth, content_type, url): data = json.dumps(d).encode('utf-8') up = urlparse(url) headers = {} headers["Content-Type"] = content_type headers["content-length"] = len(data) headers["X-MAC-DIGEST"] = get_hmac_digest(settings.FORMPLAYER_INTERNAL_AUTH_KEY, data) response = requests.post( url, data=data, headers=headers ) response_json = response.json() return response.text
def formplayer_post_data_helper(d, content_type, url): data = json.dumps(d).encode('utf-8') headers = {} headers["Content-Type"] = content_type headers["content-length"] = str(len(data)) headers["X-MAC-DIGEST"] = get_hmac_digest(settings.FORMPLAYER_INTERNAL_AUTH_KEY, data) response = requests.post( url, data=data, headers=headers ) if response.status_code == 404: raise Http404(response.reason) if 500 <= response.status_code < 600: http_error_msg = '%s Server Error: %s for url: %s' % (response.status_code, response.reason, response.url) raise HTTPError(http_error_msg, response=response) return response.json()
def _post_data(data, user_id): if not data.get("domain"): raise ValueError("Expected domain") if not user_id: notify_exception( None, "Making smsforms request w/o user_id. Will result in non-sticky session.", details={ 'session-id': data.get('session-id'), }) data = _get_formplayer_session_data(data) data_bytes = json.dumps(data).encode('utf-8') response = requests.post( url="{}/{}".format(get_formplayer_url(), data["action"]), data=data_bytes, headers={ "Content-Type": "application/json", "content-length": str(len(data_bytes)), "X-MAC-DIGEST": get_hmac_digest(settings.FORMPLAYER_INTERNAL_AUTH_KEY, data_bytes), "X-FORMPLAYER-SESSION": user_id, }, ) if response.status_code == 404: raise Http404(response.reason) if 500 <= response.status_code < 600: http_error_msg = '{} Server Error: {} for url: {}'.format( response.status_code, response.reason, response.url) notify_error(http_error_msg, details={ 'response': response, 'body': response.text }) raise HTTPError(http_error_msg, response=response) return response.json()
def _post_with_hmac(url, data, client=None, **kwargs): header_value = get_hmac_digest(settings.FORMPLAYER_INTERNAL_AUTH_KEY, data) client = client or Client() return client.post(url, data, HTTP_X_MAC_DIGEST=header_value, **kwargs)
def _generate_restore(self, case_id, user): self.client.login(username=user.username, password=user.password) url = reverse("case_restore", args=[self.domain, case_id]) hmac_header_value = get_hmac_digest(settings.FORMPLAYER_INTERNAL_AUTH_KEY, url) return self.client.get(url, HTTP_X_MAC_DIGEST=hmac_header_value)