def authenticated_request()

in gnm_deliverables/management/commands/validate_archive.py [0:0]


def authenticated_request(uri:str, secret:str, verify=True, override_time:datetime=None) -> dict:
    if override_time is not None:
        timestamp = override_time
    else:
        timestamp = datetime.now()

    authtoken, httpdate = get_token(uri, secret, timestamp)

    headers = {
        'X-Gu-Tools-HMAC-Date': httpdate,
        'X-Gu-Tools-HMAC-Token': authtoken,
    }

    response = requests.get(uri, headers=headers, verify=verify)

    if response.status_code==200:
        return response.json()
    elif response.status_code==404:
        raise NotFoundResponse
    elif response.status_code==403 or response.status_code==401:
        logger.error("Server returned forbidden. Server said: {}".format(response.text))
        raise ForbiddenResponse
    elif response.status_code==500:
        logger.error("Server error looking up. Server said: {}".format(response.text))
        raise ServerErrorResponse
    elif response.status_code==503 or response.status_code==504:
        logger.warning("Server not available, retrying in 3s")
        sleep(3)
        return authenticated_request(uri, secret, verify=verify, override_time=override_time)
    else:
        raise Exception("Unexpected server response: {} {}".format(response.status_code, response.text))