def sign_request()

in rabbitmq/management/commands/resync_cached_commissions.py [0:0]


    def sign_request(original_headers:dict, method:str, path:str, content_type:str, content_body:str, shared_secret:str) -> dict:
        """
        returns a dictionary including a suitable authorization header
        :param original_headers: original content headers
        :param content_body: data that is being sent
        :return: new headers dictionary
        """
        new_headers = copy.deepcopy(original_headers)

        content_hasher = hashlib.sha384()
        content_hasher.update(content_body.encode("UTF-8"))

        nowdate = formatdate(usegmt=True)
        checksumstring = content_hasher.hexdigest()
        new_headers['Digest'] = "SHA-384=" + checksumstring
        new_headers['Content-Length'] = str(len(content_body))
        new_headers['Content-Type'] = content_type
        new_headers['Date'] = nowdate

        string_to_sign = """{path}\n{date}\n{content_type}\n{checksum}\n{method}""".format(
            date=nowdate,content_type=content_type,checksum=checksumstring,
            method=method,path=path
        )

        print("debug: string to sign: {0}".format(string_to_sign))

        hmaccer = hmac.new(shared_secret.encode("UTF-8"), string_to_sign.encode("UTF-8"), hashlib.sha384)
        result = hmaccer.hexdigest()
        print("debug: final digest is {0}".format(result))
        new_headers['Authorization'] = "HMAC {0}".format(result)
        return new_headers