Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
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()
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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()
Ejemplo n.º 9
0
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()
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
 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)