Skip to content

Commit ad9e082

Browse files
Merge pull request #324 from d120/sso_impl
adding Keycloack
2 parents e06fae1 + b824dea commit ad9e082

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+940
-88
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ django-debug-toolbar==4.4.6
44
docutils==0.21.2
55
freezegun==1.5.1
66
django-formtools==2.5.1
7+
django-allauth==65.3.1

src/feedback/auth_adapter.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
2+
from django.contrib.auth.models import User
3+
from django.conf import settings
4+
5+
class FeedbackSocialAccountAdapter(DefaultSocialAccountAdapter):
6+
def pre_social_login(self, request, sociallogin):
7+
super().pre_social_login(request, sociallogin)
8+
user = sociallogin.user
9+
10+
if not user.id:
11+
try :
12+
existing_user = User.objects.get(username=user.username)
13+
sociallogin.connect(request, existing_user)
14+
user = existing_user
15+
except User.DoesNotExist :
16+
user.save()
17+
18+
user.is_superuser = True
19+
user.is_staff = True
20+
user.save()

src/feedback/templatetags/translate_url.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,22 @@ def translate_url(context, language):
99
'''
1010
used to translate urls for switching languages
1111
'''
12-
try:
13-
view = resolve(context['request'].path_info)
14-
except Resolver404:
15-
return ""
16-
17-
request_language = translation.get_language()
18-
translation.activate(language)
12+
if 'request' in context : # during some errors this prevents server error
13+
try:
14+
view = resolve(context['request'].path_info)
15+
except Resolver404:
16+
return ""
1917

20-
namespace = view.namespace
21-
view_name = f"{namespace}:{view.url_name}" if namespace else view.url_name
22-
23-
url = reverse(view_name, args=view.args, kwargs=view.kwargs)
24-
25-
translation.activate(request_language)
26-
return url
18+
request_language = translation.get_language()
19+
translation.activate(language)
2720

21+
namespace = view.namespace
22+
view_name = f"{namespace}:{view.url_name}" if namespace else view.url_name
23+
24+
url = reverse(view_name, args=view.args, kwargs=view.kwargs)
25+
26+
translation.activate(request_language)
27+
return url
28+
else :
29+
return ""
30+

src/feedback/tests/test_views_intern_auth.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@ def test_login_debug_auth(self):
3737
self.assertEqual(response.status_code, 302)
3838
self.assertEqual(response['Location'], tests.INDEX_URL)
3939

40+
@override_settings(DEBUG=False)
41+
def test_login_auth(self) :
42+
account_login_url = reverse('account_login')
43+
44+
response = self.client.get(tests.LOGIN_URL)
45+
46+
self.assertEqual(response.status_code, 302)
47+
self.assertTrue(response['Location'].endswith(account_login_url))
48+
49+
response = self.client.get(account_login_url)
50+
51+
self.assertEqual(response.status_code, 200)
52+
self.assertTemplateUsed(response, 'socialaccount/snippets/login.html')
53+
4054
def test_auth_user(self) :
4155
response = self.client.get(tests.AUTH_URL)
4256
self.assertEqual(response.status_code, 200)

src/feedback/views/intern/auth.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
from feedback.models import Veranstaltung
1313

14-
1514
@user_passes_test(lambda u: u.is_superuser)
1615
@require_http_methods(('HEAD', 'GET', 'POST'))
1716
def rechte_uebernehmen(request):
@@ -55,6 +54,7 @@ def rechte_zuruecknehmen(request):
5554

5655

5756
def auth_user(request) :
57+
## this view was used before sso as login view
5858
if request.method == "POST" :
5959
username = request.POST.get("username")
6060
password = request.POST.get("password")
@@ -83,7 +83,7 @@ def login(request):
8383
return response
8484

8585
if not settings.DEBUG and not request.user.is_authenticated :
86-
return HttpResponseRedirect(reverse('feedback:auth-user'))
86+
return HttpResponseRedirect(reverse("account_login"))
8787

8888
# Apache fordert User zum Login mit FS-Account auf, von daher muss hier nur noch weitergeleitet
8989
# werden.
3.39 KB
Binary file not shown.

0 commit comments

Comments
 (0)