Fix handling of byte strings and large ints

This commit is contained in:
Joseph Schorr 2015-03-26 17:45:43 -04:00
parent 02bafb1613
commit a7b6cb5c23

View file

@ -148,19 +148,24 @@ class UserAuthentication(object):
""" Returns the secret key to use for encrypting and decrypting. """
from app import app
app_secret_key = app.config['SECRET_KEY']
secret_key = None
# First try parsing the key as an int.
try:
big_int = int(app_secret_key)
secret_key = bytearray.fromhex('{:02x}'.format(big_int))
secret_key = str(bytearray.fromhex('{:02x}'.format(big_int)))
except ValueError:
secret_key = app_secret_key
pass
# Next try parsing it as an UUID.
try:
secret_key = uuid.UUID(app_secret_key).bytes
except ValueError:
secret_key = app_secret_key
if secret_key is None:
try:
secret_key = uuid.UUID(app_secret_key).bytes
except ValueError:
pass
if secret_key is None:
secret_key = str(bytearray(map(ord, app_secret_key)))
# Otherwise, use the bytes directly.
return ''.join(itertools.islice(itertools.cycle(secret_key), 32))