You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2014/07/25 09:55:24 UTC

[21/28] git commit: [#7451] ticket:605 Use custom middleware to handle cookie expiration

[#7451] ticket:605 Use custom middleware to handle cookie expiration


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/a40f29a0
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/a40f29a0
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/a40f29a0

Branch: refs/heads/je/42cc_7451
Commit: a40f29a0d5e77df79a7fb92d00e11d0f7c5545d9
Parents: dedd58c
Author: Aleksey 'LXj' Alekseyev <go...@gmail.com>
Authored: Wed Jul 16 18:10:02 2014 +0300
Committer: Aleksey 'LXj' Alekseyev <go...@gmail.com>
Committed: Thu Jul 24 22:14:46 2014 +0300

----------------------------------------------------------------------
 Allura/allura/config/middleware.py     |  4 +--
 Allura/allura/lib/custom_middleware.py | 39 +++++++++++++++++++++++++++++
 Allura/development.ini                 |  1 +
 3 files changed, 42 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/a40f29a0/Allura/allura/config/middleware.py
----------------------------------------------------------------------
diff --git a/Allura/allura/config/middleware.py b/Allura/allura/config/middleware.py
index be0ef26..2fe2b88 100644
--- a/Allura/allura/config/middleware.py
+++ b/Allura/allura/config/middleware.py
@@ -27,7 +27,6 @@ import pkg_resources
 from tg import config
 from paste.deploy.converters import asbool
 from paste.registry import RegistryManager
-from beaker.middleware import SessionMiddleware
 from routes.middleware import RoutesMiddleware
 from pylons.middleware import StatusCodeRedirect
 
@@ -45,6 +44,7 @@ from allura.lib.custom_middleware import SSLMiddleware
 from allura.lib.custom_middleware import StaticFilesMiddleware
 from allura.lib.custom_middleware import CSRFMiddleware
 from allura.lib.custom_middleware import LoginRedirectMiddleware
+from allura.lib.custom_middleware import RememberLoginSessionMiddleware
 from allura.lib import patches
 from allura.lib import helpers as h
 
@@ -131,7 +131,7 @@ def _make_core_app(root, global_conf, full_stack=True, **app_conf):
     # Required for pylons
     app = RoutesMiddleware(app, config['routes.map'])
     # Required for sessions
-    app = SessionMiddleware(app, config)
+    app = RememberLoginSessionMiddleware(app, config)
     # Redirect 401 to the login page
     app = LoginRedirectMiddleware(app)
     # Add instrumentation

http://git-wip-us.apache.org/repos/asf/allura/blob/a40f29a0/Allura/allura/lib/custom_middleware.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py
index 511c5c3..73cfef3 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -28,6 +28,8 @@ from pylons.util import call_wsgi_application
 from timermiddleware import Timer, TimerMiddleware
 from webob import exc, Request
 import pysolr
+from beaker.middleware import SessionMiddleware
+from beaker.session import SessionObject
 
 from allura.lib import helpers as h
 import allura.model.repository
@@ -281,3 +283,40 @@ class AlluraTimerMiddleware(TimerMiddleware):
             func = ep.load()
             timers += aslist(func())
         return timers
+
+
+class RememberLoginSessionMiddleware(SessionMiddleware):
+    
+    def __call__(self, environ, start_response):
+        session = SessionObject(environ, **self.options)
+        if environ.get('paste.registry'):
+            if environ['paste.registry'].reglist:
+                environ['paste.registry'].register(self.session, session)
+        environ[self.environ_key] = session
+        environ['beaker.get_session'] = self._get_session
+
+        if 'paste.testing_variables' in environ and 'webtest_varname' in self.options:
+            environ['paste.testing_variables'][self.options['webtest_varname']] = session
+
+        def session_start_response(status, headers, exc_info=None):
+            if session.accessed():
+                session.persist()
+                cookie_out = None
+                login_expires = session.get('login_expires')
+                if login_expires is not None:
+                    session.cookie_expires = login_expires
+                    if login_expires == True:
+                        session.cookie[session.key]['expires'] = ''
+                    else:
+                        session._set_cookie_expires(None)
+                    cookie_out = session.cookie[session.key].output(header='')
+
+                if session.__dict__['_headers']['set_cookie']:
+                    if cookie_out:
+                        cookie = cookie_out
+                    else:
+                        cookie = session.__dict__['_headers']['cookie_out']
+                    if cookie:
+                        headers.append(('Set-cookie', cookie))
+            return start_response(status, headers, exc_info)
+        return self.wrap_app(environ, session_start_response)

http://git-wip-us.apache.org/repos/asf/allura/blob/a40f29a0/Allura/development.ini
----------------------------------------------------------------------
diff --git a/Allura/development.ini b/Allura/development.ini
index b7c52e0..71855c7 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -60,6 +60,7 @@ cache_dir = %(here)s/data
 beaker.session.key = allura
 beaker.session.type = cookie
 beaker.session.httponly = true
+beaker.session.cookie_expires = false
 ; CHANGE THIS VALUE FOR YOUR SITE
 beaker.session.validate_key = 714bfe3612c42390726f