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