diff --git a/requirements/base.in b/requirements/base.in index d98099f6a3..07c46a7424 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -26,7 +26,6 @@ maykin-django-two-factor-auth phonenumbers django-localflavor django-privates -django-digid-eherkenning django-cors-headers django-autoslug django-elasticsearch-dsl @@ -60,6 +59,8 @@ elastic-apm # Elastic APM integration beautifulsoup4 # DigidLocal +# UNSAFE! Should be replaced with pinned version +git+https://github.com/maykinmedia/django-digid-eherkenning.git@feature/digid-logout-callback git+https://github.com/maykinmedia/python3-saml.git@f587f77b78be79d51139f29a957b406072e2b537#egg=python3_saml pyopenssl diff --git a/requirements/base.txt b/requirements/base.txt index 6da6323545..ad931a6016 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -108,7 +108,7 @@ django-csp==3.7 # via -r requirements/base.in django-csp-reports==1.8.1 # via -r requirements/base.in -django-digid-eherkenning==0.4.0 +django-digid-eherkenning @ git+https://github.com/maykinmedia/django-digid-eherkenning.git@feature/digid-logout-callback # via -r requirements/base.in django-elasticsearch-dsl==7.2.1 # via -r requirements/base.in diff --git a/requirements/ci.txt b/requirements/ci.txt index 8d2dc0cd6d..5c64a74f8c 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -175,7 +175,7 @@ django-csp-reports==1.8.1 # via # -c requirements/base.txt # -r requirements/base.txt -django-digid-eherkenning==0.4.0 +django-digid-eherkenning @ git+https://github.com/maykinmedia/django-digid-eherkenning.git@feature/digid-logout-callback # via # -c requirements/base.txt # -r requirements/base.txt diff --git a/requirements/dev.txt b/requirements/dev.txt index 852b79a740..649d1eebff 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -202,7 +202,7 @@ django-csp-reports==1.8.1 # -r requirements/ci.txt django-debug-toolbar==3.2.2 # via -r requirements/dev.in -django-digid-eherkenning==0.4.0 +django-digid-eherkenning @ git+https://github.com/maykinmedia/django-digid-eherkenning.git@feature/digid-logout-callback # via # -c requirements/ci.txt # -r requirements/ci.txt diff --git a/src/open_inwoner/accounts/models.py b/src/open_inwoner/accounts/models.py index 8696b1f042..3b5dc8a55d 100644 --- a/src/open_inwoner/accounts/models.py +++ b/src/open_inwoner/accounts/models.py @@ -179,6 +179,13 @@ def require_necessary_fields(self) -> bool: and not self.last_name ) + def get_logout_url(self) -> str: + return ( + reverse("digid:logout") + if self.login_type == LoginTypeChoices.digid + else reverse("logout") + ) + class Contact(models.Model): uuid = models.UUIDField( diff --git a/src/open_inwoner/accounts/tests/test_profile_views.py b/src/open_inwoner/accounts/tests/test_profile_views.py index 1b43686b9d..53ee74479b 100644 --- a/src/open_inwoner/accounts/tests/test_profile_views.py +++ b/src/open_inwoner/accounts/tests/test_profile_views.py @@ -4,9 +4,9 @@ from django_webtest import WebTest from open_inwoner.accounts.choices import StatusChoices -from open_inwoner.accounts.models import Action from open_inwoner.pdc.tests.factories import CategoryFactory +from ..choices import LoginTypeChoices from .factories import ActionFactory, ContactFactory, UserFactory @@ -76,6 +76,21 @@ def test_deactivate_account_staff(self): self.assertTrue(self.user.is_active) self.assertIsNone(self.user.deactivated_on) + def test_deactivate_account_digid(self): + """ + check that user is redirected to digid:logout + """ + user = UserFactory.create(login_type=LoginTypeChoices.digid) + + get_response = self.app.get(self.url, user=user) + self.assertEquals(get_response.status_code, 200) + form = get_response.forms["deactivate-form"] + + response = form.submit() + + self.assertEquals(response.status_code, 302) + self.assertEquals(response.url, reverse("digid:logout")) + class EditProfileTests(WebTest): def setUp(self): diff --git a/src/open_inwoner/accounts/views/profile.py b/src/open_inwoner/accounts/views/profile.py index 8835a0ce83..c0b6f5629a 100644 --- a/src/open_inwoner/accounts/views/profile.py +++ b/src/open_inwoner/accounts/views/profile.py @@ -78,7 +78,7 @@ def post(self, request, *args, **kwargs): self.request.user.deactivate() self.log_user_action(instance, _("user was deactivated via frontend")) - return redirect("logout") + return redirect(instance.get_logout_url()) else: messages.warning(request, _("Uw account kon niet worden gedeactiveerd")) return redirect("accounts:my_profile") diff --git a/src/open_inwoner/components/templates/components/Header/Header.html b/src/open_inwoner/components/templates/components/Header/Header.html index 54c6482415..07fbe06cb8 100644 --- a/src/open_inwoner/components/templates/components/Header/Header.html +++ b/src/open_inwoner/components/templates/components/Header/Header.html @@ -22,9 +22,8 @@ {% if request.user.is_authenticated %} {% else %} @@ -59,9 +58,8 @@ {% if request.user.is_authenticated %} {% else %}