def userinfo()

in source/openid-waitingroom/chalice/app.py [0:0]


def userinfo():
    """
    This is the userInfo endpoint
    """
    app.log.info('/userInfo')
    request = app.current_request.to_dict()
    app.log.info(request)
    try:
        _, dirty_access_token = request.get('headers',
                                            {}).get('authorization',
                                                    '').split(" ")
        dirty_claims = claim_dict(dirty_access_token)
        app.log.info(dirty_claims)
        event_id = deep_clean(dirty_claims.get("aud"))
        request_id = deep_clean(dirty_claims.get("sub"))
        private_api = f'{PRIVATE_API_ENDPOINT}/generate_token'
        # context comes from API Gateway and not the supplied headers
        issuer = (f'https://{app.current_request.context["domainName"]}' +
                  f'/{app.current_request.context["stage"]}')
        body = {
            "event_id": event_id,
            "request_id": request_id,
            "issuer": issuer
        }
        parsed = urlparse(PRIVATE_API_ENDPOINT)
        # create an authentication signer for AWS
        auth = BotoAWSRequestsAuth(aws_host=parsed.netloc,
                                   aws_region=API_REGION,
                                   aws_service='execute-api')
        response = requests.post(private_api, json=body, auth=auth)
        if response.status_code == 200:
            clean_tokens = json.loads(response.text)
            clean_access_token = clean_tokens.get("access_token")
            if clean_access_token == dirty_access_token:
                app.log.info('tokens match')
                clean_claims = claim_dict(clean_access_token)
                app.log.info(clean_claims)
                return clean_claims
            app.log.info("tokens don't match")
    except (KeyError, IndexError, TypeError):
        app.log.error('validation failed')
    return Response(status_code=400,
                    body='Bad Request',
                    headers={'Content-Type': 'text/plain'})