From a6c6c7510b38831be506d6e30d80a77c7e701f6c Mon Sep 17 00:00:00 2001 From: grimsi <9295182+grimsi@users.noreply.github.com> Date: Sun, 29 Sep 2024 17:38:42 +0200 Subject: [PATCH] Implement account status management Add generic messages for account status change Add message for account removal Improve UX of role assignment Fix a few bugs --- .../components/general/AssignRolesModal.tsx | 22 +++-- .../components/general/UserManagementCard.tsx | 90 ++++++++++--------- .../views/InvitationRegistrationView.tsx | 14 +-- .../de/grimsi/gameyfin/core/events/Events.kt | 8 +- .../core/security/SsoEnabledCondition.kt | 3 +- .../gameyfin/messages/MessageService.kt | 81 +++++++++++------ .../messages/templates/MessageTemplates.kt | 22 ++++- .../de/grimsi/gameyfin/users/UserEndpoint.kt | 10 +++ .../de/grimsi/gameyfin/users/UserService.kt | 48 ++++++---- .../users/enums/RoleAssignmentResult.kt | 1 + .../enums/UserInvitationAcceptanceResult.kt | 8 ++ .../users/registration/InvitationService.kt | 24 ++--- .../registration/RegistrationEndpoint.kt | 9 +- .../templates/messages/account-deleted.mjml | 30 +++++++ .../templates/messages/account-disabled.mjml | 28 ++++++ .../{welcome.mjml => account-enabled.mjml} | 2 +- 16 files changed, 275 insertions(+), 125 deletions(-) create mode 100644 src/main/kotlin/de/grimsi/gameyfin/users/enums/UserInvitationAcceptanceResult.kt create mode 100644 src/main/resources/templates/messages/account-deleted.mjml create mode 100644 src/main/resources/templates/messages/account-disabled.mjml rename src/main/resources/templates/messages/{welcome.mjml => account-enabled.mjml} (93%) diff --git a/src/main/frontend/components/general/AssignRolesModal.tsx b/src/main/frontend/components/general/AssignRolesModal.tsx index 70ff422..04dd619 100644 --- a/src/main/frontend/components/general/AssignRolesModal.tsx +++ b/src/main/frontend/components/general/AssignRolesModal.tsx @@ -32,12 +32,12 @@ export default function AssignRolesModal({ user }: AssignRolesModalProps) { const [availableRoles, setAvailableRoles] = useState([]); - const [selectedRoles, setSelectedRoles] = useState(); + const [selectedRole, setSelectedRole] = useState(); const [error, setError] = useState(); useEffect(() => { - setSelectedRoles(rolesToSelection(user.roles!)); - UserEndpoint.getAvailableRoles().then((availableRoles) => { + setSelectedRole(rolesToSelection(user.roles!)); + UserEndpoint.getRolesBelow().then((availableRoles) => { setAvailableRoles(availableRoles!.map((role) => ({id: role!.toString()}))); }); }, []); @@ -47,15 +47,18 @@ export default function AssignRolesModal({ } async function assignRoles() { - if (!selectedRoles) return; + if (!selectedRole) return; - let selectedRolesArray = Array.from(selectedRoles).map((role) => role.toString()); + let selectedRolesArray = Array.from(selectedRole).map((role) => role.toString()); let result = await UserEndpoint.assignRoles(user.username, selectedRolesArray); if (!result) return; switch (result) { case RoleAssignmentResult.SUCCESS: window.location.reload(); break; + case RoleAssignmentResult.NO_ROLES_PROVIDED: + setError("Select at least one role"); + break; case RoleAssignmentResult.TARGET_POWER_LEVEL_TOO_HIGH: setError("Power level of user too high"); break; @@ -78,9 +81,10 @@ export default function AssignRolesModal({