correct pb on cache key + version nb V01.39
authorymh <ymh.work@gmail.com>
Wed, 05 Dec 2012 13:22:33 +0100
changeset 1017 0897d4ffdbc9
parent 1016 7bdf9bc8d9bf
child 1018 881fdf413942
correct pb on cache key + version nb
src/ldt/ldt/__init__.py
src/ldt/ldt/security/cache.py
--- a/src/ldt/ldt/__init__.py	Wed Dec 05 00:12:15 2012 +0100
+++ b/src/ldt/ldt/__init__.py	Wed Dec 05 13:22:33 2012 +0100
@@ -1,4 +1,4 @@
-VERSION = (1, 38, 0, "final", 0)
+VERSION = (1, 39, 0, "final", 0)
 
 
 def get_version():
--- a/src/ldt/ldt/security/cache.py	Wed Dec 05 00:12:15 2012 +0100
+++ b/src/ldt/ldt/security/cache.py	Wed Dec 05 13:22:33 2012 +0100
@@ -4,9 +4,12 @@
 from django.contrib.auth.models import User
 from django.db.models import Q
 from guardian.shortcuts import assign
+from django.utils.encoding import smart_str
+import re
+import hashlib
 
 def get_cached_checker(user):
-    key_name = 'checker_%s' % user.username
+    key_name = get_key(user.username)
     
     checker = cache.get(key_name)
     if checker:
@@ -17,15 +20,15 @@
     return checker
 
 
-def cached_assign(perm, user_or_group, object):
-    assign(perm, user_or_group, object)
+def cached_assign(perm, user_or_group, object_inst):
+    assign(perm, user_or_group, object_inst)
     
     if hasattr(user_or_group, 'username'):
-        key = 'checker_%s' % user_or_group.username
+        key = get_key(user_or_group.username)
     else:
-        key = 'checker_%s' % user_or_group.name
+        key = get_key(user_or_group.name)
         
-    cache.delete('checker_%s' % key)
+    cache.delete(key)
     
     
 def get_cached_userlist():
@@ -36,4 +39,16 @@
     query = Q(id=settings.ANONYMOUS_USER_ID) | Q(is_superuser=True)
     userlist = User.objects.exclude(query)
     cache.set('userlist', userlist)
-    return userlist
\ No newline at end of file
+    return userlist
+
+def get_key(name):
+    
+    name = smart_str(name, encoding="ascii", errors="replace") 
+    name = re.sub(r"[^\w\s_\-]", '', name)
+    name = re.sub(r"\s+", '_', name)
+    
+    key = "checker_%s" % name
+    if len(key) > 250:
+        key = hashlib.sha512(key).hexdigest()
+    
+    return key