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