Bump version to 0.14.3
[snf-cloudcms] / cloudcms / middleware.py
1 import urlparse
2 import urllib
3
4 from django.contrib import messages
5 from django.http import HttpResponseRedirect
6
7 class RequestMessagesMiddleware:
8     """
9     A middleware that checks for specific get parameters in url, appends
10     associated messages and redirects to the same url (removing the parameter
11     to avoid circular redirects).
12     """
13
14     PARAMS_MAP = {
15         'logged_in': ((messages.SUCCESS, 'You have successfully logged in'),),
16         'logged_out': ((messages.SUCCESS, 'You have successfully logged out'),),
17     }
18
19     def process_request(self, request):
20         qs = request.META.get('QUERY_STRING', '')
21         if not qs:
22             return
23
24         qs = urlparse.parse_qs(qs)
25
26         # parse query string, add messages and keep params used to remove
27         # them later from the redirect url
28         params_to_remove = []
29         for param, messages_tuples in self.PARAMS_MAP.iteritems():
30             if param in qs:
31                 params_to_remove.append(param)
32                 for message in messages_tuples:
33                     msg_type = message[0]
34                     msg = message[1]
35                     messages.add_message(request, msg_type, msg)
36
37         if not params_to_remove:
38             return
39
40         for p in params_to_remove:
41             del qs[p]
42
43         # create the redirect url
44         redirect_qs = urllib.urlencode(qs)
45
46         return HttpResponseRedirect("/?" + redirect_qs)
47