def __init__(self, app_token: str, timestamp: float, data=None):
""" Initialize a request given an app token, a request-sent timestamp, and additional data
provided from the caller. App token and timestamp validation will be performed.
Parameters
----------
app_token : str
Allows ability to validate that request is from a valid caller.
timestamp : float
When the the original request was sent, used for ensuring requests are recent.
data : dict, optional
Additional information supplied by the caller.
"""
if not data:
data = {}
# App Token provided with the request.
if not app_token:
raise InvalidRequestError('No app token.')
if not validate_app_token(app_token):
raise InvalidRequestError('Invalid app token.')
self.app_token = app_token
# Set request timestamp.
timestamp = floor_unix_epoch(timestamp)
time_limit = floor_unix_epoch(time.time() - EXPIRATION_SECONDS)
if time_limit > timestamp:
raise InvalidRequestError('Request expired.')
self.timestamp = timestamp
# Authentication details.
user_token = data.get("user_token")
email = data.get("email")
if user_token:
try:
if validate_user_token(user_token):
self.user_token = user_token
except (NoResultFound, MultipleResultsFound) as e:
raise InvalidRequestError('Invalid user token: {}'.\
format(str(e)))
try:
self.user = user_from_attribute('token', user_token)
except (NoResultFound, MultipleResultsFound):
self.user = None
elif email:
if "@" not in email:
raise InvalidRequestError('Invalid e-mail address.')
self.email = email
try:
self.user = user_from_attribute('email', email)
except (NoResultFound, MultipleResultsFound):
self.user = None
else:
raise InvalidRequestError('No authentication provided.')
# Extra data provided with the request.
self.data = data
评论列表
文章目录