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 39 insertions and 24 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
 
@@ -58,7 +58,7 @@ class LoginController(BaseController):
 
            return redirect(url('home'))
 

	
 
        if request.POST:
 
            #import Login Form validator class
 
            # import Login Form validator class
 
            login_form = LoginForm()
 
            try:
 
                c.form_result = login_form.to_python(dict(request.POST))
 
@@ -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
 
@@ -134,7 +134,7 @@ def generate_api_key(str_, salt=None):
 
    :param str_:
 
    :param salt:
 
    """
 
    
 

	
 
    if salt is None:
 
        salt = _RandomNameSequence().next()
 

	
 
@@ -252,7 +252,7 @@ def login_container_auth(username):
 
        return None
 

	
 
    user.update_lastlogin()
 
    log.debug('User %s is now logged in by container authentication', 
 
    log.debug('User %s is now logged in by container authentication',
 
              user.username)
 
    return user
 

	
 
@@ -303,13 +303,13 @@ class  AuthUser(object):
 
        user_model = UserModel()
 
        self.anonymous_user = User.get_by_username('default')
 
        is_user_loaded = False
 
        
 

	
 
        # try go get user by api key
 
        if self._api_key and self._api_key != self.anonymous_user.api_key:
 
            log.debug('Auth User lookup by API KEY %s', self._api_key)
 
            is_user_loaded = user_model.fill_data(self, api_key=self._api_key)
 
        # lookup by userid    
 
        elif (self.user_id is not None and 
 
        elif (self.user_id is not None and
 
              self.user_id != self.anonymous_user.user_id):
 
            log.debug('Auth User lookup by USER ID %s', self.user_id)
 
            is_user_loaded = user_model.fill_data(self, user_id=self.user_id)
 
@@ -326,7 +326,7 @@ class  AuthUser(object):
 
        if not is_user_loaded:
 
            # if we cannot authenticate user try anonymous
 
            if self.anonymous_user.active is True:
 
                user_model.fill_data(self,user_id=self.anonymous_user.user_id)
 
                user_model.fill_data(self, user_id=self.anonymous_user.user_id)
 
                # then we set this user is logged in
 
                self.is_authenticated = True
 
            else:
 
@@ -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,21 +47,22 @@ 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:
 
            log.debug('Request time: %.3fs' % (time.time()-start))
 
            log.debug('Request time: %.3fs' % (time.time() - start))
 
            meta.Session.remove()
 

	
 

	
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)