Author: adc Date: Sun Jul 6 21:25:30 2014 New Revision: 1608294 URL: http://svn.apache.org/r1608294 Log: Save session information in memcached
Modified: labs/panopticon/pan-site/requirements.txt labs/panopticon/pan-site/src/asf/panopticon/__init__.py labs/panopticon/pan-site/tests/data/panopticon-flask.properties Modified: labs/panopticon/pan-site/requirements.txt URL: http://svn.apache.org/viewvc/labs/panopticon/pan-site/requirements.txt?rev=1608294&r1=1608293&r2=1608294&view=diff ============================================================================== --- labs/panopticon/pan-site/requirements.txt (original) +++ labs/panopticon/pan-site/requirements.txt Sun Jul 6 21:25:30 2014 @@ -1,3 +1,4 @@ Flask==0.10.1 Flask-Principal==0.4.0 +flask-memcache-session==2.0 python-memcached==1.53 Modified: labs/panopticon/pan-site/src/asf/panopticon/__init__.py URL: http://svn.apache.org/viewvc/labs/panopticon/pan-site/src/asf/panopticon/__init__.py?rev=1608294&r1=1608293&r2=1608294&view=diff ============================================================================== --- labs/panopticon/pan-site/src/asf/panopticon/__init__.py (original) +++ labs/panopticon/pan-site/src/asf/panopticon/__init__.py Sun Jul 6 21:25:30 2014 @@ -16,10 +16,12 @@ # specific language governing permissions and limitations # under the License. # -from logging import getLogger +import logging import flask from flask.ext import principal +from werkzeug.contrib import cache +from flask.ext.memcache_session import Session from asf.data import ldap from asf.person import Person, PersonError @@ -28,7 +30,13 @@ from asf.person import Person, PersonErr app = flask.Flask(__name__) app.config.from_envvar('PANOPTICON_FLASK_CONFIG') -log = getLogger(__name__) +app.cache = cache.MemcachedCache([app.config['SESSION_MEMCACHE_HOST']]) +app.session_interface = Session() + + +log = logging.getLogger(__name__) + +logging.basicConfig(level=logging.DEBUG) @app.route('/') @@ -65,7 +73,7 @@ def login(): username = flask.request.form.get('username') password = flask.request.form.get('password') if ldap.check_user_password(username, password): - principal.identity_changed.send(app, identity=principal.Identity(username)) + principal.identity_changed.send(app, identity=principal.Identity(username, auth_type='ldap')) flask.flash(u'Signed in as ' + username, 'success') else: flask.flash(u'Invalid username or password', 'danger') @@ -74,7 +82,7 @@ def login(): @app.route('/logout') def logout(): - principal.identity_changed.send(app, identity=None) + principal.identity_changed.send(app, identity=principal.AnonymousIdentity()) flask.flash(u'You have been signed out', 'success') return flask.redirect(flask.request.referrer) @@ -82,18 +90,25 @@ def logout(): is_authenticated = principal.Permission(principal.RoleNeed('authenticated')) login_required = is_authenticated.require(401) -# workaround some bugs with the default session identities +principals = principal.Principal(app, skip_static=True) +@principals.identity_loader def session_identity_loader(): if 'identity.id' in flask.session and 'identity.auth_type' in flask.session: - identity = principal.Identity(flask.session['identity.id'], - flask.session['identity.auth_type']) + identity_id = flask.session['identity.id'] + identity_auth_type = flask.session['identity.auth_type'] + + if identity_id: + identity = principal.Identity(identity_id, identity_auth_type) + else: + identity = principal.AnonymousIdentity() return identity else: return principal.AnonymousIdentity() +@principals.identity_saver def session_identity_saver(identity): if identity is None or not identity.is_authenticated: flask.session.pop('identity.id', None) @@ -104,9 +119,18 @@ def session_identity_saver(identity): flask.session.modified = True -principals = principal.Principal(app, use_sessions=False) -principals.identity_loader(session_identity_loader) -principals.identity_saver(session_identity_saver) +@principal.identity_changed.connect +def on_identity_changed(sender, identity): + if identity is None: + return + + identity.is_authenticated = not isinstance(identity, principal.AnonymousIdentity) + if identity.is_authenticated: + person = Person(identity.id, fault_in_via_ldap=True) + identity.person = person + identity.provides.add(principal.RoleNeed('authenticated')) + else: + identity.person = None @principal.identity_loaded.connect @@ -116,7 +140,7 @@ def on_identity_loaded(sender, identity) identity.is_authenticated = not isinstance(identity, principal.AnonymousIdentity) if identity.is_authenticated: - person = Person(identity.id) + person = Person(identity.id, fault_in_via_ldap=False) identity.person = person identity.provides.add(principal.RoleNeed('authenticated')) else: Modified: labs/panopticon/pan-site/tests/data/panopticon-flask.properties URL: http://svn.apache.org/viewvc/labs/panopticon/pan-site/tests/data/panopticon-flask.properties?rev=1608294&r1=1608293&r2=1608294&view=diff ============================================================================== --- labs/panopticon/pan-site/tests/data/panopticon-flask.properties (original) +++ labs/panopticon/pan-site/tests/data/panopticon-flask.properties Sun Jul 6 21:25:30 2014 @@ -1,3 +1,4 @@ DEBUG=True SECRET_KEY='\xd0\xe8\x13\x08\xfd\xa3\x97*\x161FY\x9d\xdd\xbb\xff\xacWF\xd4}\t\x03\xf2' -SESSION_COOKIE_NAME='_ps' \ No newline at end of file +SESSION_COOKIE_NAME='_ps' +SESSION_MEMCACHE_HOST='127.0.0.1:11211' --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@labs.apache.org For additional commands, e-mail: commits-h...@labs.apache.org