0001-misc-provide-origin-service-in-template-context-2069.patch
src/authentic2/context_processors.py | ||
---|---|---|
18 | 18 |
from django.conf import settings |
19 | 19 | |
20 | 20 |
from . import utils, app_settings, constants |
21 |
from .models import Service |
|
21 | 22 | |
22 | 23 | |
23 | 24 |
class UserFederations(object): |
... | ... | |
59 | 60 |
if hasattr(request, 'session'): |
60 | 61 |
variables['LAST_LOGIN'] = request.session.get(constants.LAST_LOGIN_SESSION_KEY) |
61 | 62 |
variables['USER_SWITCHED'] = constants.SWITCH_USER_SESSION_KEY in request.session |
63 |
if 'service_pk' in request.session: |
|
64 |
try: |
|
65 |
variables['service'] = Service.objects.get(pk=request.session['service_pk']) |
|
66 |
except Service.DoesNotExist: |
|
67 |
pass |
|
62 | 68 |
return variables |
src/authentic2/middleware.py | ||
---|---|---|
32 | 32 |
from django.shortcuts import render |
33 | 33 | |
34 | 34 |
from . import app_settings, utils, plugins |
35 |
from .utils.service import get_service_from_request |
|
35 | 36 | |
36 | 37 | |
37 | 38 |
class CollectIPMiddleware(MiddlewareMixin): |
... | ... | |
205 | 206 |
# set test cookie for 1 year |
206 | 207 |
response.set_cookie(self.COOKIE_NAME, '1', max_age=365 * 24 * 3600) |
207 | 208 |
return response |
209 | ||
210 | ||
211 |
class SaveServiceInSessionMiddleware: |
|
212 |
def __init__(self, get_response): |
|
213 |
self.get_response = get_response |
|
214 | ||
215 |
def __call__(self, request): |
|
216 |
service = None |
|
217 | ||
218 |
service = get_service_from_request(request) |
|
219 |
if service: |
|
220 |
request.session['service_pk'] = service.pk |
|
221 | ||
222 |
return self.get_response(request) |
src/authentic2/settings.py | ||
---|---|---|
95 | 95 |
'django.middleware.common.CommonMiddleware', |
96 | 96 |
'django.middleware.http.ConditionalGetMiddleware', |
97 | 97 |
'django.contrib.sessions.middleware.SessionMiddleware', |
98 |
'authentic2.middleware.SaveServiceInSessionMiddleware', |
|
98 | 99 |
'django.middleware.csrf.CsrfViewMiddleware', |
99 | 100 |
'django.middleware.locale.LocaleMiddleware', |
100 | 101 |
'django.contrib.auth.middleware.AuthenticationMiddleware', |
src/authentic2/templates/authentic2/base.html | ||
---|---|---|
11 | 11 |
{{ form.media.css }} |
12 | 12 |
{% endblock %} |
13 | 13 | |
14 |
{% block bodyargs %} |
|
15 |
data-service-slug="{{ service.slug }}" data-service-name="{{ service.name }}" |
|
16 |
{% endblock %} |
|
17 | ||
14 | 18 |
{% block extrascripts %} |
15 | 19 |
{{ block.super }} |
16 | 20 |
{{ form.media.js }} |
tests/test_template.py | ||
---|---|---|
16 | 16 | |
17 | 17 |
import pytest |
18 | 18 | |
19 |
from authentic2.a2_rbac.utils import get_default_ou |
|
20 |
from authentic2.models import Service |
|
19 | 21 |
from authentic2.utils.template import Template, TemplateError |
20 | 22 | |
21 | 23 |
pytestmark = pytest.mark.django_db |
... | ... | |
111 | 113 |
with pytest.raises(TemplateError) as raised: |
112 | 114 |
template.render(context=context) |
113 | 115 |
assert 'missing template variable' in raised |
116 | ||
117 | ||
118 |
def test_service_in_template(app, simple_user, service): |
|
119 |
resp = app.get(reverse('auth_login') + '?service=%s' % service.slug) |
|
120 | ||
121 |
assert resp.pyquery('body').attr('data-service-slug') == service.slug |
|
122 |
assert resp.pyquery('body').attr('data-service-name') == service.name |
|
123 | ||
124 |
resp.form.set('username', simple_user.username) |
|
125 |
resp.form.set('password', simple_user.username) |
|
126 |
response = resp.form.submit(name='login-password-submit') |
|
127 | ||
128 |
resp = app.get(reverse('account_management')) |
|
129 |
assert resp.pyquery('body').attr('data-service-slug') == service.slug |
|
130 |
assert resp.pyquery('body').attr('data-service-name') == service.name |
|
131 | ||
132 |
# if user comes back from a different service, the information is updated |
|
133 |
new_service = Service.objects.create(ou=get_default_ou(), slug='service2', |
|
134 |
name='Service2') |
|
135 |
resp = app.get(reverse('account_management') + '?service=%s' % new_service.slug) |
|
136 |
assert resp.pyquery('body').attr('data-service-slug') == new_service.slug |
|
137 |
assert resp.pyquery('body').attr('data-service-name') == new_service.name |
|
114 |
- |