changeset 2030:61f9aeb2129e beta

Added session wrapper, for rc 1.2.X compatibility. Adds backwards compatability for older RhodeCode sessions, created before 1.3 series.
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 26 Feb 2012 01:25:38 +0200
parents 14d8cfb96c17
children 82a88013a3fd 950110f3f99f
files rhodecode/lib/auth.py rhodecode/lib/base.py
diffstat 2 files changed, 26 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/auth.py	Sat Feb 25 17:10:06 2012 +0200
+++ b/rhodecode/lib/auth.py	Sun Feb 26 01:25:38 2012 +0200
@@ -289,6 +289,21 @@
     return username
 
 
+class CookieStoreWrapper(object):
+
+    def __init__(self, cookie_store):
+        self.cookie_store = cookie_store
+
+    def __repr__(self):
+        return 'CookieStore<%s>' % (self.cookie_store)
+
+    def get(self, key, other=None):
+        if isinstance(self.cookie_store, dict):
+            return self.cookie_store.get(key, other)
+        elif isinstance(self.cookie_store, AuthUser):
+            return self.cookie_store.__dict__.get(key, other)
+
+
 class  AuthUser(object):
     """
     A simple object that handles all attributes of user in RhodeCode
@@ -377,6 +392,12 @@
 
     @classmethod
     def from_cookie_store(cls, cookie_store):
+        """
+        Creates AuthUser from a cookie store
+
+        :param cls:
+        :param cookie_store:
+        """
         user_id = cookie_store.get('user_id')
         username = cookie_store.get('username')
         api_key = cookie_store.get('api_key')
--- a/rhodecode/lib/base.py	Sat Feb 25 17:10:06 2012 +0200
+++ b/rhodecode/lib/base.py	Sun Feb 26 01:25:38 2012 +0200
@@ -17,7 +17,7 @@
 
 from rhodecode.lib import str2bool, safe_unicode
 from rhodecode.lib.auth import AuthUser, get_container_username, authfunc,\
-    HasPermissionAnyMiddleware
+    HasPermissionAnyMiddleware, CookieStoreWrapper
 from rhodecode.lib.utils import get_repo_slug, invalidate_cache
 from rhodecode.model import meta
 
@@ -133,7 +133,7 @@
         try:
             # make sure that we update permissions each time we call controller
             api_key = request.GET.get('api_key')
-            cookie_store = session.get('rhodecode_user') or {}
+            cookie_store = CookieStoreWrapper(session.get('rhodecode_user'))
             user_id = cookie_store.get('user_id', None)
             username = get_container_username(environ, config)
 
@@ -142,11 +142,9 @@
             self.rhodecode_user = c.rhodecode_user = auth_user
             if not self.rhodecode_user.is_authenticated and \
                        self.rhodecode_user.user_id is not None:
-                self.rhodecode_user\
-                    .set_authenticated(cookie_store.get('is_authenticated'))
-
-            session['rhodecode_user'] = self.rhodecode_user.get_cookie_store()
-            session.save()
+                self.rhodecode_user.set_authenticated(
+                    cookie_store.get('is_authenticated')
+                )
             log.info('User: %s accessed %s' % (
                 auth_user, safe_unicode(environ.get('PATH_INFO')))
             )