def retrieve_metadata_for_token()

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