add a middleware to get current partner from requests
This commit is contained in:
parent
ec7bee3971
commit
70832a3617
|
@ -80,3 +80,6 @@ class Plugin(object):
|
|||
|
||||
def get_auth_frontends(self):
|
||||
return []
|
||||
|
||||
def get_after_middleware(self):
|
||||
return ['authentic2_cut.middlewares.CUTMiddleware']
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
from django.conf import settings
|
||||
import urlparse
|
||||
|
||||
|
||||
class CUTMiddleware(object):
|
||||
'''Extract requesting domain from URL and set value on request and in session.
|
||||
|
||||
Domains extracted from ?next=<url> of ?redirect_uri=<url> parameters are matched against the
|
||||
domains list of domain patterns.
|
||||
|
||||
Configuration:
|
||||
|
||||
A2_CUT_PARTNERS = [
|
||||
{
|
||||
'domains': ['.lyon.fr'],
|
||||
'logo_url': 'https://www.lyon.fr/static/logo_cut.png',
|
||||
'color': '#452334',
|
||||
'name': u'Ville de Lyon',
|
||||
}
|
||||
}
|
||||
|
||||
Use in templates:
|
||||
|
||||
{% if request.partner %}{{ request.partner.name }}{% endif %}
|
||||
'''
|
||||
MATCHES = {}
|
||||
|
||||
def process_request(self, request):
|
||||
domain = None
|
||||
if 'next' in request.GET or 'redirect_uri' in request.GET:
|
||||
url = request.GET.get('next') or request.GET.get('redirect_uri')
|
||||
netloc = urlparse.urlparse(url).netloc
|
||||
if netloc:
|
||||
domain = netloc.split(':')[-1]
|
||||
if domain:
|
||||
if domain not in self.MATCHES:
|
||||
for partner_def in getattr(settings, 'A2_CUT_PARTNERS', []):
|
||||
patterns = partner_def.get('domains', [])
|
||||
for pattern in patterns:
|
||||
if pattern.startswith('.'):
|
||||
if domain.endswith(pattern) or domain == pattern[1:]:
|
||||
break
|
||||
elif pattern == domain:
|
||||
break
|
||||
else:
|
||||
continue
|
||||
self.MATCHES[domain] = partner_def
|
||||
request.session['cut_domain'] = domain
|
||||
break
|
||||
else:
|
||||
# when adding a domain, you must reload, must thing of emptying the cache
|
||||
# sometimes
|
||||
self.MATCHES[domain] = None
|
||||
request.session['cut_domain'] = None
|
||||
else:
|
||||
domain = request.session.get('cut_domain')
|
||||
|
||||
if domain and domain in self.MATCHES:
|
||||
request.partner = self.MATCHES[domain]
|
||||
else:
|
||||
request.partner = None
|
||||
return None
|
Loading…
Reference in New Issue