From: Matías Aguirre Date: Wed, 4 Jul 2012 22:01:27 +0000 (-0300) Subject: Backward compatibility get_random_string definition. Refs #386 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=762b79206ac74883e9e321d9ccb5b6414e48b4ea;p=django-social-auth.git Backward compatibility get_random_string definition. Refs #386 --- diff --git a/social_auth/backends/__init__.py b/social_auth/backends/__init__.py index 2ff137e..492b63c 100644 --- a/social_auth/backends/__init__.py +++ b/social_auth/backends/__init__.py @@ -23,11 +23,12 @@ from django.contrib.auth import authenticate from django.contrib.auth.backends import ModelBackend from django.utils import simplejson from django.utils.importlib import import_module -from django.utils.crypto import constant_time_compare, get_random_string +from django.utils.crypto import constant_time_compare from django.middleware.csrf import CSRF_KEY_LENGTH from social_auth.utils import setting, log, model_to_ctype, ctype_to_model, \ - clean_partial_pipeline, url_add_parameters + clean_partial_pipeline, url_add_parameters, \ + get_random_string from social_auth.store import DjangoOpenIDStore from social_auth.backends.exceptions import StopPipeline, AuthException, \ AuthFailed, AuthCanceled, \ diff --git a/social_auth/utils.py b/social_auth/utils.py index 9c4b37d..afc8177 100644 --- a/social_auth/utils.py +++ b/social_auth/utils.py @@ -1,6 +1,10 @@ +import time +import random +import hashlib import urlparse import urllib import logging + from collections import defaultdict from datetime import timedelta, tzinfo @@ -8,6 +12,32 @@ from django.conf import settings from django.db.models import Model from django.contrib.contenttypes.models import ContentType + +try: + random = random.SystemRandom() + using_sysrandom = True +except NotImplementedError: + using_sysrandom = False + + +try: + from django.utils.crypto import get_random_string as random_string +except ImportError: # django < 1.4 + # Implementation borrowed from django 1.4 + def random_string(length=12, + allowed_chars='abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'): + if not using_sysrandom: + random.seed(hashlib.sha256('%s%s%s' % (random.getstate(), + time.time(), + settings.SECRET_KEY)) + .digest()) + return ''.join([random.choice(allowed_chars) for i in range(length)]) + + +get_random_string = random_string + + try: from django.utils.timezone import utc as django_utc except ImportError: # django < 1.4