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'})