Skip to content

Commit 6c7f760

Browse files
author
Giuseppe De Marco
authored
Merge pull request #374 from uktrade/master
Split authenticate into separate overridable function
2 parents f1aa8e0 + 2434322 commit 6c7f760

File tree

2 files changed

+36
-13
lines changed

2 files changed

+36
-13
lines changed

djangosaml2/views.py

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,40 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
550550
if callable(create_unknown_user):
551551
create_unknown_user = create_unknown_user()
552552

553+
try:
554+
user = self.authenticate_user(
555+
request,
556+
session_info,
557+
attribute_mapping,
558+
create_unknown_user,
559+
assertion_info
560+
)
561+
except PermissionDenied as e:
562+
return self.handle_acs_failure(
563+
request,
564+
exception=e,
565+
session_info=session_info,
566+
)
567+
568+
relay_state = self.build_relay_state()
569+
custom_redirect_url = self.custom_redirect(user, relay_state, session_info)
570+
if custom_redirect_url:
571+
return HttpResponseRedirect(custom_redirect_url)
572+
relay_state = validate_referral_url(request, relay_state)
573+
logger.debug("Redirecting to the RelayState: %s", relay_state)
574+
return HttpResponseRedirect(relay_state)
575+
576+
def authenticate_user(
577+
self,
578+
request,
579+
session_info,
580+
attribute_mapping,
581+
create_unknown_user,
582+
assertion_info
583+
):
584+
"""Calls Django's authenticate method after the SAML response is verified"""
553585
logger.debug("Trying to authenticate the user. Session info: %s", session_info)
586+
554587
user = auth.authenticate(
555588
request=request,
556589
session_info=session_info,
@@ -563,11 +596,7 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
563596
"Could not authenticate user received in SAML Assertion. Session info: %s",
564597
session_info,
565598
)
566-
return self.handle_acs_failure(
567-
request,
568-
exception=PermissionDenied("No user could be authenticated."),
569-
session_info=session_info,
570-
)
599+
raise PermissionDenied("No user could be authenticated.")
571600

572601
auth.login(self.request, user)
573602
_set_subject_id(request.saml_session, session_info["name_id"])
@@ -576,13 +605,7 @@ def post(self, request, attribute_mapping=None, create_unknown_user=None):
576605
self.post_login_hook(request, user, session_info)
577606
self.customize_session(user, session_info)
578607

579-
relay_state = self.build_relay_state()
580-
custom_redirect_url = self.custom_redirect(user, relay_state, session_info)
581-
if custom_redirect_url:
582-
return HttpResponseRedirect(custom_redirect_url)
583-
relay_state = validate_referral_url(request, relay_state)
584-
logger.debug("Redirecting to the RelayState: %s", relay_state)
585-
return HttpResponseRedirect(relay_state)
608+
return user
586609

587610
def post_login_hook(
588611
self, request: HttpRequest, user: settings.AUTH_USER_MODEL, session_info: dict

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def read(*rnames):
2727

2828
setup(
2929
name="djangosaml2",
30-
version="1.5.6",
30+
version="1.5.7",
3131
description="pysaml2 integration for Django",
3232
long_description=read("README.md"),
3333
long_description_content_type="text/markdown",

0 commit comments

Comments
 (0)