def check_digest_header(content, headers):
    digest_value = headers.get("digest")
    if not digest_value:
        return

    digest_value = digest_value.replace("sha-256=", "")
    assert digest(content).decode("ascii") == digest_value, digest(content)
 def test_echo_after_request(self):
     response = self.client.open("/datetime/v1/echo", method="GET")
     self.assert200(response,
                    "Response body is : " + response.data.decode("utf-8"))
     d = response.headers.get("Digest")
     assert d, response.headers
     assert response.headers["Digest"][8:].encode("ascii") == digest(
         response.data)
 def test_post_data(self):
     request_body = json.dumps({"a": "ciao"})
     response = self.client.open(
         "/datetime/v1/data",
         method="POST",
         data=request_body,
         headers={"Content-Type": "application/json"},
     )
     self.assert_status(
         response,
         200,
         "Response body is : " + response.data.decode("utf-8"),
     )
     assert "Digest" in response.headers
     assert response.headers["Digest"][8:].encode("ascii") == digest(
         response.data)
 def test_post_data_gzip(self):
     request_body = json.dumps({"a": "ciao"})
     response = self.client.open(
         "/datetime/v1/data",
         method="POST",
         data=request_body,
         headers={
             "Content-Type": "application/json",
             "Accept-Encoding": "gzip",
         },
     )
     self.assert_status(response, 200,
                        "Response body is : " + repr(response.data))
     assert "Digest" in response.headers
     assert response.headers["Digest"][8:].encode("ascii") == digest(
         response.data)
     assert "ret" in json.loads(gzip.decompress(response.data))
def send_request(
    url,
    method,
    headers=None,
    signed_headers=None,
    payload_body=None,
    expires_window=2,
):
    from openapi.callbacks import digest

    request = Request(
        method,
        url,
        headers=CaseInsensitiveDict(headers or {}),
        data=payload_body,
    )

    if method not in ("GET", "HEAD", "DELETE"):
        request.headers["Digest"] = b"sha-256=" + digest(
            request.data if request.data else b"")
        assert "Digest" in request.headers

    if signed_headers:
        created = time()
        signature = Signature(
            keyId=MOCK_KID,
            algorithm="bar",
            headers=signed_headers,
            created=int(created),
            expires=created + expires_window,
        )
        request.headers["Signature"] = signature.sign_http_message(request)
        request.headers["Signature-String"] = signature.signature_string(
            method,
            urlparse(url).path, request.headers).replace("\n", "%")
    prepared_request = request.prepare()
    response = s.send(prepared_request, verify=0)

    return response