Skip to content

Commit d5cab8e

Browse files
committed
added logout tests when LOGOUT_REDIRECT_URL is specified
1 parent bd05221 commit d5cab8e

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

djangosaml2/tests/__init__.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,39 @@ def test_logout_service_global(self):
782782
"Not a valid Response",
783783
)
784784

785+
@override_settings(LOGOUT_REDIRECT_URL="/dashboard/")
786+
def test_post_logout_redirection(self):
787+
settings.SAML_CONFIG = conf.create_conf(
788+
sp_host="sp.example.com",
789+
idp_hosts=["idp.example.com"],
790+
metadata_file="remote_metadata_one_idp.xml",
791+
)
792+
793+
self.do_login()
794+
795+
response = self.client.get(reverse("saml2_logout"))
796+
self.assertEqual(response.status_code, 302)
797+
798+
# now simulate a logout response sent by the idp
799+
expected_request = """<samlp:LogoutRequest xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="XXXXXXXXXXXXXXXXXXXXXX" Version="2.0" Destination="https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php" Reason=""><saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">http://sp.example.com/saml2/metadata/</saml:Issuer><saml:NameID SPNameQualifier="http://sp.example.com/saml2/metadata/" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">1f87035b4c1325b296a53d92097e6b3fa36d7e30ee82e3fcb0680d60243c1f03</saml:NameID><samlp:SessionIndex>a0123456789abcdef0123456789abcdef</samlp:SessionIndex></samlp:LogoutRequest>"""
800+
801+
request_id = re.findall(r' ID="(.*?)" ', expected_request)[0]
802+
instant = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
803+
804+
saml_response = """<?xml version='1.0' encoding='UTF-8'?>
805+
<samlp:LogoutResponse xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://sp.example.com/saml2/ls/" ID="a140848e7ce2bce834d7264ecdde0151" InResponseTo="{}" IssueInstant="{}" Version="2.0"><saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://idp.example.com/simplesaml/saml2/idp/metadata.php</saml:Issuer><samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" /></samlp:Status></samlp:LogoutResponse>""".format(
806+
request_id, instant
807+
)
808+
809+
response = self.client.get(
810+
reverse("saml2_ls"),
811+
{
812+
"SAMLResponse": deflate_and_base64_encode(saml_response),
813+
},
814+
)
815+
self.assertRedirects(response, "/dashboard/")
816+
self.assertListEqual(list(self.client.session.keys()), [])
817+
785818
def test_incomplete_logout(self):
786819
settings.SAML_CONFIG = conf.create_conf(
787820
sp_host="sp.example.com", idp_hosts=["idp.example.com"]

0 commit comments

Comments
 (0)