Mercurial > public > sg101
diff wiki/receivers.py @ 923:bd043677d527
Wiki app refactor for Django 1.7.7 upgrade.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Tue, 07 Apr 2015 20:30:25 -0500 |
parents | wiki/signals.py@63603e931503 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wiki/receivers.py Tue Apr 07 20:30:25 2015 -0500 @@ -0,0 +1,46 @@ +"""Signal handlers for wiki integration. + +We are interested in hearing about users logging in and out, so we can create +and destroy an external cookie to allow access to the wiki. + +""" +import logging + +from django.contrib.auth.signals import user_logged_in, user_logged_out + +from wiki.constants import SESSION_SET_MEMBER + +logger = logging.getLogger(__name__) + + +def login_callback(sender, request, user, **kwargs): + """Signal callback function for a user logging in. + + Sets a flag for the middleware to create an external cookie. + + """ + logger.info('User login: %s', user.username) + + request.wiki_set_cookie = True + + +def logout_callback(sender, request, user, **kwargs): + """Signal callback function for a user logging in. + + Sets a flag for the middleware to delete the external cookie. + + Since the user is about to logout, her session will be wiped out after + this function returns. This forces us to set an attribute on the request + object so that the response middleware can delete the wiki's cookie. + + """ + if user: + logger.info('User logout: %s', user.username) + + # Remember what Redis set member to delete by adding an attribute to the + # request object: + request.wiki_delete_cookie = request.session.get(SESSION_SET_MEMBER) + + +user_logged_in.connect(login_callback, dispatch_uid='wiki.receivers.login') +user_logged_out.connect(logout_callback, dispatch_uid='wiki.receivers.logout')