]> git.parisson.com Git - django-social-auth.git/commitdiff
Backward compatibility get_random_string definition. Refs #386
authorMatías Aguirre <matiasaguirre@gmail.com>
Wed, 4 Jul 2012 22:01:27 +0000 (19:01 -0300)
committerMatías Aguirre <matiasaguirre@gmail.com>
Wed, 4 Jul 2012 22:01:27 +0000 (19:01 -0300)
social_auth/backends/__init__.py
social_auth/utils.py

index 2ff137e7e8edb2c5320a3f38c41f78bfe72ed23b..492b63ce21426057357d0cfa184ca8758242165b 100644 (file)
@@ -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, \
index 9c4b37d7244199ef276c7510737ec3f930aebed8..afc8177db58741cca8cec4adf22e61b4f39999f0 100644 (file)
@@ -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