in api/runtime/app.py [0:0]
def retrieve_metadata_for_token(body):
"""
Checks Dynamo for token and then if it's been used or expired
:param body:
Body from request which includes the registration token
:return:
Dynamo item response, 200
Invalid token, 400
Token already used or expired, 401
"""
key = {
'regToken': body['regToken']
}
dynamo_response = dynamodb_table.get_item(
Key=key
)
app.log.debug("Dynamo returned:")
app.log.debug(dynamo_response)
oldest_valid_time = int(time.time()) - 300 # Token expires after 5 minutes
if 'Item' in dynamo_response.keys():
item = dynamo_response['Item']
times_used = int(item['timesUsed'])
if times_used == 0 and item['timestamp'] >= oldest_valid_time: # Token expires after 5 minutes
dynamodb_table.update_item(
Key=key,
UpdateExpression="SET timesUsed = timesUsed + :u",
ExpressionAttributeValues={
':u': 1,
}
)
del item['regToken']
del item['timesUsed']
del item['timestamp']
item['certificate'] = "test"
response = item, 200
elif times_used != 0:
response = 'Token already used', 401
elif item['timestamp'] < oldest_valid_time:
response = 'Token expired', 401
else:
raise Exception
else:
response = 'Missing or invalid registration token', 400
return response