Changeset - f78bee8eec78
[Not reviewed]
beta
0 6 0
Marcin Kuzminski - 14 years ago 2011-11-25 18:25:10
marcin@python-works.com
reduce cookie size for better support of client side sessions
6 files changed with 32 insertions and 17 deletions:
0 comments (0 inline, 0 general)
rhodecode/controllers/admin/settings.py
Show inline comments
 
@@ -47,8 +47,7 @@ from rhodecode.model.forms import UserFo
 
from rhodecode.model.scm import ScmModel
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.db import User
 
from rhodecode.model.notification import NotificationModel, \
 
    EmailNotificationModel
 
from rhodecode.model.notification import EmailNotificationModel
 

	
 
log = logging.getLogger(__name__)
 

	
rhodecode/controllers/login.py
Show inline comments
 
@@ -67,11 +67,12 @@ class LoginController(BaseController):
 
                user = User.get_by_username(username, case_insensitive=True)
 
                auth_user = AuthUser(user.user_id)
 
                auth_user.set_authenticated()
 
                session['rhodecode_user'] = auth_user
 
                cs = auth_user.get_cookie_store()
 
                session['rhodecode_user'] = cs
 
                session.save()
 

	
 
                log.info('user %s is now authenticated and stored in session',
 
                         username)
 
                log.info('user %s is now authenticated and stored in '
 
                         'session, session attrs %s' % (username, cs))
 
                user.update_lastlogin()
 

	
 
                if c.came_from:
rhodecode/lib/auth.py
Show inline comments
 
@@ -356,6 +356,17 @@ class  AuthUser(object):
 
        if self.user_id != self.anonymous_user.user_id:
 
            self.is_authenticated = authenticated
 

	
 
    def get_cookie_store(self):
 
        return {'username':self.username,
 
                'user_id': self.user_id,
 
                'is_authenticated':self.is_authenticated}
 

	
 
    @classmethod
 
    def from_cookie_store(cls, cookie_store):
 
        user_id = cookie_store.get('user_id')
 
        username = cookie_store.get('username')
 
        api_key = cookie_store.get('api_key')
 
        return AuthUser(user_id, api_key, username)
 

	
 
def set_available_permissions(config):
 
    """
 
@@ -576,7 +587,8 @@ class PermsFunction(object):
 
        self.repo_name = None
 

	
 
    def __call__(self, check_Location=''):
 
        user = session.get('rhodecode_user', False)
 
        cookie_store = session.get('rhodecode_user')
 
        user = AuthUser.from_cookie_store(cookie_store)
 
        if not user:
 
            return False
 
        self.user_perms = user.permissions
rhodecode/lib/base.py
Show inline comments
 
@@ -9,15 +9,16 @@ from pylons.controllers import WSGIContr
 
from pylons.controllers.util import redirect
 
from pylons.templating import render_mako as render
 

	
 
from rhodecode import __version__
 
from rhodecode import __version__, BACKENDS
 

	
 
from rhodecode.lib import str2bool
 
from rhodecode.lib.auth import AuthUser, get_container_username
 
from rhodecode.lib.utils import get_repo_slug
 
from rhodecode.model import meta
 
from rhodecode.model.scm import ScmModel
 
from rhodecode import BACKENDS
 

	
 
from rhodecode.model.db import Repository
 
from rhodecode.model.notification import NotificationModel
 
from rhodecode.model.scm import ScmModel
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -46,17 +47,18 @@ class BaseController(WSGIController):
 
        try:
 
            # make sure that we update permissions each time we call controller
 
            api_key = request.GET.get('api_key')
 
            user_id = getattr(session.get('rhodecode_user'), 'user_id', None)
 
            cookie_store = session.get('rhodecode_user') or {}
 
            user_id = cookie_store.get('user_id', None)
 
            username = get_container_username(environ, config)
 

	
 
            auth_user = AuthUser(user_id, api_key, username)
 
            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(
 
                                        getattr(session.get('rhodecode_user'),
 
                                       'is_authenticated', False))
 
            session['rhodecode_user'] = self.rhodecode_user
 
                self.rhodecode_user\
 
                    .set_authenticated(cookie_store.get('is_authenticated'))
 

	
 
            session['rhodecode_user'] = self.rhodecode_user.get_cookie_store()
 
            session.save()
 
            return WSGIController.__call__(self, environ, start_response)
 
        finally:
rhodecode/tests/__init__.py
Show inline comments
 
@@ -79,7 +79,8 @@ class TestController(TestCase):
 
            self.fail('could not login using %s %s' % (username, password))
 

	
 
        self.assertEqual(response.status, '302 Found')
 
        self.assertEqual(response.session['rhodecode_user'].username, username)
 
        self.assertEqual(response.session['rhodecode_user'].get('username'),
 
                         username)
 
        return response.follow()
 

	
 
    def _get_logged_user(self):
rhodecode/tests/functional/test_login.py
Show inline comments
 
@@ -17,7 +17,7 @@ class TestLoginController(TestController
 
                                 {'username':'test_admin',
 
                                  'password':'test12'})
 
        self.assertEqual(response.status, '302 Found')
 
        self.assertEqual(response.session['rhodecode_user'].username ,
 
        self.assertEqual(response.session['rhodecode_user'].get('username') ,
 
                         'test_admin')
 
        response = response.follow()
 
        self.assertTrue('%s repository' % HG_REPO in response.body)
 
@@ -28,7 +28,7 @@ class TestLoginController(TestController
 
                                  'password':'test12'})
 

	
 
        self.assertEqual(response.status, '302 Found')
 
        self.assertEqual(response.session['rhodecode_user'].username ,
 
        self.assertEqual(response.session['rhodecode_user'].get('username') ,
 
                         'test_regular')
 
        response = response.follow()
 
        self.assertTrue('%s repository' % HG_REPO in response.body)
0 comments (0 inline, 0 general)