def authenticate()

in gnm_deliverables/hmac_auth_backend.py [0:0]


    def authenticate(self, request: HttpRequest):
        if "HTTP_AUTHORIZATION" not in request.META:
            logger.warning("Incoming request had no Authorization header")
            raise AuthenticationFailed
        else:
            presented_signature = self.extract_signature(request.META.get("HTTP_AUTHORIZATION"))

        if "HTTP_DIGEST" not in request.META:
            logger.warning("Incoming request had no Digest header")
            raise AuthenticationFailed
        else:
            checksum = self.extract_checksum(request.META.get("HTTP_DIGEST"))

        content = request.body

        if request.META.get("HTTP_DATE") is None:
            logger.warning("Incoming request had no Date header")
            raise AuthenticationFailed

        hasher = hashlib.sha384()
        hasher.update(content)
        actual_checksum = hasher.hexdigest()

        if actual_checksum != checksum:
            logger.warning("Content checksum mismatched. Presented {0} but we calculated {1}".format(checksum, actual_checksum))
            raise AuthenticationFailed

        full_base_url = settings.__getattr__("DEPLOYMENT_ROOT")
        base_url_parts = urllib.parse.urlparse(full_base_url)

        if len(base_url_parts.path) > 0:
            basepath = base_url_parts.path.rstrip("/")
            if len(base_url_parts.query)>0:
                querypart = "?" + base_url_parts.query
            else:
                querypart = ""
            signing_path = basepath + request.path + querypart
        else:
            signing_path = request.path

        string_to_sign = "{path}\n{http_date}\n{content_type}\n{checksum_string}\n{method}".format(
            path=signing_path,
            http_date=request.META.get("HTTP_DATE"),
            content_type=request.content_type,
            checksum_string=checksum,
            method=request.method
        )
        logger.debug("string_to_sign is {0}".format(string_to_sign))

        signature_bytes = hmac.digest(settings.LAUNCH_DETECTOR_SHARED_KEY.encode("UTF-8"), string_to_sign.encode("utf-8"), "sha384")
        signature = signature_bytes.hex()
        logger.debug("calculated signature {0}".format(signature))

        if signature != presented_signature:
            logger.warning("Signature mismatched. Presented {0} but we calculated {1}".format(presented_signature, signature))
            logger.warning("string_to_sign was {0}".format(string_to_sign))
            raise AuthenticationFailed

        return User(
            username="hmac-authenticated",
            first_name="",
            last_name="",
            email="",
            is_staff=False,
            is_active=True,
            is_superuser=False
        ), "hmac"