clean module
[auf_django_saml.git] / auf / django / saml / monkey.py
1 # -*- coding: utf-8 -*-
2
3 """
4 Setup automatique de LOGIN_URL et LOGOUT_URL
5 si SAML_AUTO_AUTH_URLS est positionné à True
6 """
7
8 import logging
9
10 import django
11 from django.utils.functional import update_wrapper
12 from django.conf import settings
13 from django.http import HttpResponseForbidden
14 from django.utils.translation import ugettext as _
15
16 import settings as saml_settings
17
18
19 logger = logging.getLogger('SAML')
20
21
22 if saml_settings.SAML_AUTO_AUTH_URLS:
23 info = u"Patch Auth settings"
24 if saml_settings.SAML_AUTH:
25 LOGIN_URL = '/mellon/login'
26 LOGOUT_URL = '/logout'
27 else:
28 LOGIN_URL = '/sandbox/login'
29 LOGOUT_URL = '/sandbox/logout'
30 info += u"\n* LOGIN_URL: %s" % LOGIN_URL
31 info += u"\n* LOGOUT_URL: %s" % LOGOUT_URL
32 info += u"\n* REDIRECT_FIELD_NAME: %s" % \
33 saml_settings.SAML_REDIRECT_FIELD_NAME
34
35 django.contrib.auth.REDIRECT_FIELD_NAME = \
36 saml_settings.SAML_REDIRECT_FIELD_NAME
37 settings.LOGIN_URL = LOGIN_URL
38 settings.LOGOUT_URL = LOGOUT_URL
39 logger.info(info)
40
41 from django.contrib.admin import site
42 original_admin_view = site.__class__.admin_view
43
44
45 def custom_admin_view(self, view, cacheable=False):
46 """
47 Sur la page d'index, si on on ne dispose pas des accès, ne pas
48 demander de se logger car dans le cas de id.auf, on crée un loop
49 car on peut être déjà loggé sur id.auf mais on ne dispose pas des
50 droits d'accès à l'admin.
51 Sinon, on conserve le comportement normal.
52 """
53
54 def inner(request, *args, **kwargs):
55 """
56 """
57 if not request.user.is_authenticated():
58 return self.login(request)
59 if not self.has_permission(request):
60 return HttpResponseForbidden(
61 _(u"Votre compte ne permet pas d'accéder à cette page"))
62 return view(request, *args, **kwargs)
63
64 if view.__name__ == 'index':
65 return update_wrapper(inner, view)
66 else:
67 return original_admin_view(self, view, cacheable=False)
68
69 logger.info(u"Patch de la admin.site pour \
70 gérer le login forcé de la page d'index")
71 site.__class__.admin_view = custom_admin_view