From 51780c17f7f1eb7b856a95470681d151cb67b8b5 Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Tue, 2 May 2023 23:24:33 +0200 Subject: [PATCH] Delete account #456 --- messages.pot | 14 +++++++++---- project/models/admin_unit.py | 1 - project/services/user.py | 11 ++++++++++ .../translations/de/LC_MESSAGES/messages.mo | Bin 39448 -> 39680 bytes .../translations/de/LC_MESSAGES/messages.po | 14 +++++++++---- .../translations/en/LC_MESSAGES/messages.mo | Bin 4079 -> 4079 bytes .../translations/en/LC_MESSAGES/messages.po | 14 +++++++++---- project/views/user.py | 10 ++++++++- tests/views/test_user.py | 19 ++++++++++++++---- 9 files changed, 65 insertions(+), 18 deletions(-) diff --git a/messages.pot b/messages.pot index 2929e3c..83c3c68 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-05-01 18:11+0200\n" +"POT-Creation-Date: 2023-05-02 23:21+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2271,7 +2271,7 @@ msgid "Organization successfully deleted" msgstr "" #: project/views/admin.py:113 project/views/manage.py:432 -#: project/views/user.py:40 +#: project/views/user.py:41 msgid "Settings successfully updated" msgstr "" @@ -2502,11 +2502,17 @@ msgid "" "verified automatically." msgstr "" -#: project/views/user.py:84 project/views/user.py:111 +#: project/views/user.py:85 +msgid "" +"You are administrator of at least one organization. Cancel your " +"membership to delete your account." +msgstr "" + +#: project/views/user.py:92 project/views/user.py:119 msgid "Entered email does not match your email" msgstr "" -#: project/views/user.py:130 +#: project/views/user.py:138 msgid "User deletion requested" msgstr "" diff --git a/project/models/admin_unit.py b/project/models/admin_unit.py index b3ab7c9..518caa1 100644 --- a/project/models/admin_unit.py +++ b/project/models/admin_unit.py @@ -46,7 +46,6 @@ class AdminUnitMember(db.Model): __tablename__ = "adminunitmember" id = Column(Integer(), primary_key=True) admin_unit_id = db.Column(db.Integer, db.ForeignKey("adminunit.id"), nullable=False) - user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) user = db.relationship("User", backref=db.backref("adminunitmembers", lazy=True)) user_id = db.Column( db.Integer, db.ForeignKey("user.id", ondelete="CASCADE"), nullable=False diff --git a/project/services/user.py b/project/services/user.py index 9d6e5ca..d13611d 100644 --- a/project/services/user.py +++ b/project/services/user.py @@ -4,6 +4,7 @@ from flask_security import hash_password from project import db, user_datastore from project.models import Event, Role, User, UserFavoriteEvents +from project.models.admin_unit import AdminUnitMember, AdminUnitMemberRole def create_user(email, password): @@ -111,3 +112,13 @@ def get_users_with_due_delete_request(): def delete_user(user): user_datastore.delete_user(user) db.session.commit() + + +def is_user_admin_member(user: User) -> bool: + return ( + AdminUnitMember.query.filter( + AdminUnitMember.user_id == user.id, + AdminUnitMember.roles.any(AdminUnitMemberRole.name == "admin"), + ).first() + is not None + ) diff --git a/project/translations/de/LC_MESSAGES/messages.mo b/project/translations/de/LC_MESSAGES/messages.mo index a047f11764aad8d7e3213b217f6fcbfda4e7fbd4..aff23f37379e439e495d7185951701dfb78d0b1e 100644 GIT binary patch delta 8907 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 ZR#f=%?Wn#*^L=F>y+{4tA2+0j{Vy}AZ?^yd delta 8686 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 C>M!;H diff --git a/project/translations/de/LC_MESSAGES/messages.po b/project/translations/de/LC_MESSAGES/messages.po index 403f51a..37ed8de 100644 --- a/project/translations/de/LC_MESSAGES/messages.po +++ b/project/translations/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-05-01 18:11+0200\n" +"POT-Creation-Date: 2023-05-02 23:21+0200\n" "PO-Revision-Date: 2020-06-07 18:51+0200\n" "Last-Translator: FULL NAME \n" "Language: de\n" @@ -2343,7 +2343,7 @@ msgid "Organization successfully deleted" msgstr "Organisation erfolgreich gelöscht" #: project/views/admin.py:113 project/views/manage.py:432 -#: project/views/user.py:40 +#: project/views/user.py:41 msgid "Settings successfully updated" msgstr "Einstellungen erfolgreich aktualisiert" @@ -2581,11 +2581,17 @@ msgstr "" "Ob alle zukünftigen Empfehlungsanfragen von %(admin_unit_name)s " "automatisch verifiziert werden sollen." -#: project/views/user.py:84 project/views/user.py:111 +#: project/views/user.py:85 +msgid "" +"You are administrator of at least one organization. Cancel your " +"membership to delete your account." +msgstr "Du bist Administrator von mindestens einer Organisation. Beende deine Mitgliedschaft, um deinen Account zu löschen." + +#: project/views/user.py:92 project/views/user.py:119 msgid "Entered email does not match your email" msgstr "Die eingegebene Email entspricht nicht deiner Email" -#: project/views/user.py:130 +#: project/views/user.py:138 msgid "User deletion requested" msgstr "Löschung des Nutzers beantragt" diff --git a/project/translations/en/LC_MESSAGES/messages.mo b/project/translations/en/LC_MESSAGES/messages.mo index f4b829059f10d549a6ab3d2afd52ae6794afddeb..11a700d95c2788f18db26b6d17cfa548c7325c38 100644 GIT binary patch delta 19 bcmaDa|6YE>Yfd&J1tViCqs<>V|FHr9P?ZOo delta 19 bcmaDa|6YE>Yfd&p1w#uf!_6N#|FHr9P@@N& diff --git a/project/translations/en/LC_MESSAGES/messages.po b/project/translations/en/LC_MESSAGES/messages.po index a077201..cf72353 100644 --- a/project/translations/en/LC_MESSAGES/messages.po +++ b/project/translations/en/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-05-01 18:11+0200\n" +"POT-Creation-Date: 2023-05-02 23:21+0200\n" "PO-Revision-Date: 2021-04-30 15:04+0200\n" "Last-Translator: FULL NAME \n" "Language: en\n" @@ -2279,7 +2279,7 @@ msgid "Organization successfully deleted" msgstr "" #: project/views/admin.py:113 project/views/manage.py:432 -#: project/views/user.py:40 +#: project/views/user.py:41 msgid "Settings successfully updated" msgstr "" @@ -2510,11 +2510,17 @@ msgid "" "verified automatically." msgstr "" -#: project/views/user.py:84 project/views/user.py:111 +#: project/views/user.py:85 +msgid "" +"You are administrator of at least one organization. Cancel your " +"membership to delete your account." +msgstr "" + +#: project/views/user.py:92 project/views/user.py:119 msgid "Entered email does not match your email" msgstr "" -#: project/views/user.py:130 +#: project/views/user.py:138 msgid "User deletion requested" msgstr "" diff --git a/project/views/user.py b/project/views/user.py index d85aae7..bd82a2a 100644 --- a/project/views/user.py +++ b/project/views/user.py @@ -12,6 +12,7 @@ from project.forms.user import ( RequestUserDeletionForm, ) from project.models import AdminUnitInvitation, User +from project.services.user import is_user_admin_member from project.views.utils import ( flash_errors, get_invitation_access_result, @@ -79,7 +80,14 @@ def user_request_deletion(): form = None form = RequestUserDeletionForm() - if form.validate_on_submit(): + if is_user_admin_member(current_user): + flash( + gettext( + "You are administrator of at least one organization. Cancel your membership to delete your account." + ), + "danger", + ) + elif form.validate_on_submit(): if non_match_for_deletion(form.email.data, current_user.email): flash(gettext("Entered email does not match your email"), "danger") else: diff --git a/tests/views/test_user.py b/tests/views/test_user.py index 73c0b9a..a5930b4 100644 --- a/tests/views/test_user.py +++ b/tests/views/test_user.py @@ -119,9 +119,9 @@ def test_login_flash(client, seeder, utils): def test_user_request_deletion( client, seeder: Seeder, utils, app, db, mocker, db_error, non_match ): - user_id, admin_unit_id = seeder.setup_base() + owner_id, admin_unit_id, member_id = seeder.setup_base_event_verifier() - url = utils.get_url("user_request_deletion", id=user_id) + url = utils.get_url("user_request_deletion") response = utils.get_ok(url) if db_error: @@ -155,10 +155,21 @@ def test_user_request_deletion( with app.app_context(): from project.models import User - user = db.session.get(User, user_id) + user = db.session.get(User, member_id) assert user.deletion_requested_at is not None +def test_user_request_deletion_admin_member(client, seeder: Seeder, utils, app, db): + seeder.setup_base() + + url = utils.get_url("user_request_deletion") + response = utils.get_ok(url) + utils.assert_response_error_message( + response, + "Du bist Administrator von mindestens einer Organisation. Beende deine Mitgliedschaft, um deinen Account zu löschen.", + ) + + @pytest.mark.parametrize("db_error", [True, False]) @pytest.mark.parametrize("non_match", [True, False]) def test_user_cancel_deletion( @@ -175,7 +186,7 @@ def test_user_cancel_deletion( user.deletion_requested_at = datetime.datetime.utcnow() db.session.commit() - url = utils.get_url("user_cancel_deletion", id=user_id) + url = utils.get_url("user_cancel_deletion") response = utils.get_ok(url) if db_error: