|
@@ -3,6 +3,8 @@ from hashlib import sha256
|
|
|
from time import time
|
|
|
|
|
|
from django.conf import settings
|
|
|
+from django.utils import six
|
|
|
+from django.utils.encoding import force_bytes
|
|
|
|
|
|
|
|
|
"""
|
|
@@ -18,7 +20,7 @@ def make(user, token_type):
|
|
|
user_hash = _make_hash(user, token_type)
|
|
|
creation_day = _days_since_epoch()
|
|
|
|
|
|
- obfuscated = base64.b64encode('%s%s' % (user_hash, creation_day))
|
|
|
+ obfuscated = base64.b64encode(force_bytes('%s%s' % (user_hash, creation_day))).decode()
|
|
|
obfuscated = obfuscated.rstrip('=')
|
|
|
checksum = _make_checksum(obfuscated)
|
|
|
|
|
@@ -32,7 +34,7 @@ def is_valid(user, token_type, token):
|
|
|
if checksum != _make_checksum(obfuscated):
|
|
|
return False
|
|
|
|
|
|
- unobfuscated = base64.b64decode(obfuscated + '=' * (-len(obfuscated) % 4))
|
|
|
+ unobfuscated = base64.b64decode(obfuscated + '=' * (-len(obfuscated) % 4)).decode()
|
|
|
user_hash = unobfuscated[:8]
|
|
|
|
|
|
if user_hash != _make_hash(user, token_type):
|
|
@@ -52,7 +54,8 @@ def _make_hash(user, token_type):
|
|
|
settings.SECRET_KEY,
|
|
|
)
|
|
|
|
|
|
- return sha256('+'.join([unicode(s) for s in seeds])).hexdigest()[:8]
|
|
|
+ return sha256(force_bytes(
|
|
|
+ '+'.join([six.text_type(s) for s in seeds]))).hexdigest()[:8]
|
|
|
|
|
|
|
|
|
def _days_since_epoch():
|
|
@@ -60,7 +63,8 @@ def _days_since_epoch():
|
|
|
|
|
|
|
|
|
def _make_checksum(obfuscated):
|
|
|
- return sha256('%s:%s' % (settings.SECRET_KEY, obfuscated)).hexdigest()[:8]
|
|
|
+ return sha256(force_bytes(
|
|
|
+ '%s:%s' % (settings.SECRET_KEY, obfuscated))).hexdigest()[:8]
|
|
|
|
|
|
|
|
|
"""
|