--- 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