You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by ad...@apache.org on 2014/07/06 23:25:30 UTC

svn commit: r1608294 - in /labs/panopticon/pan-site: requirements.txt src/asf/panopticon/__init__.py tests/data/panopticon-flask.properties

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-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org