diff --git a/.gitignore b/.gitignore index 5d7b69f..3ed356b 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ out/ ### VS Code ### .vscode/ +.floo +.flooignore diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 9ae3d51..d7ec39d 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -3,9 +3,12 @@ package mops.gruppen2.controller; import mops.gruppen2.config.Gruppen2Config; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; + +import mops.gruppen2.domain.Role; import mops.gruppen2.domain.User; import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.UpdateRoleEvent; import mops.gruppen2.security.Account; import mops.gruppen2.service.*; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; @@ -23,6 +26,7 @@ import javax.annotation.security.RolesAllowed; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; @Controller @SessionScope @@ -116,7 +120,7 @@ public class Gruppen2Controller { public String pCreateGroup(KeycloakAuthenticationToken token, @RequestParam(value = "title") String title, @RequestParam(value = "beschreibung") String beschreibung, - @RequestParam(value = "visibility", required = false) Boolean visibility) { + @RequestParam(value = "visibility", required = false) Boolean visibility) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); visibility = visibility == null; @@ -134,7 +138,9 @@ public class Gruppen2Controller { User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); if (group != null) { model.addAttribute("group", group); - model.addAttribute("role", group.getRoles().get(user.getUser_id())); + model.addAttribute("roles", group.getRoles()); + model.addAttribute("user", user); + model.addAttribute("admin", Role.ADMIN); return "detailsMember"; } throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); @@ -144,8 +150,11 @@ public class Gruppen2Controller { @PostMapping("/detailsBeitreten") public String joinGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); - Account account = keyCloakService.createAccountFromPrincipal(token); - controllerService.addUser(account, id); + Account account = keyCloakService.createAccountFromPrincipal (token); + User user = new User(account.getName(),account.getGivenname(),account.getFamilyname(),account.getEmail()); + Group group = userService.getGroupById(id); + if(group.getMembers().contains(user)) return "errorRenameLater"; //hier soll eigentlich auf die bereits beigetretene Gruppe weitergeleitet werden + controllerService.addUser(account,id); return "redirect:/gruppen2/"; } @@ -177,10 +186,34 @@ public class Gruppen2Controller { @PostMapping("/leaveGroup") public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam(value = "group_id") Long id) { Account account = keyCloakService.createAccountFromPrincipal(token); - controllerService.deleteUser(account, id); + User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); + controllerService.deleteUser(user, id); return "redirect:/gruppen2/"; } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @GetMapping("/details/members") + public String editMembers(Model model, KeycloakAuthenticationToken token, @RequestParam (value="group_id") Long id) throws EventException { + Account account = keyCloakService.createAccountFromPrincipal(token); + Group group = userService.getGroupById(id); + if(group.getRoles().get(account.getName()) == Role.ADMIN) { + model.addAttribute("members", group.getMembers()); + model.addAttribute("group", group); + return "editMembers"; + } else { + return "redirect:/details/"; + } + } + + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @PostMapping("/changeRole") + public String changeRole(KeycloakAuthenticationToken token, @RequestParam (value = "group_id") Long id, + @RequestParam (value = "user") User user) throws EventException { + controllerService.updateRole(user, id); + return "redirect:/details/members/"; + } + + @GetMapping("*") public String defaultLink() { return "errorRenameLater"; diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index b4ce5dc..f1fe45a 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -4,20 +4,18 @@ import mops.gruppen2.domain.*; import mops.gruppen2.domain.event.*; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; +import java.util.*; @Service public class ControllerService { private final EventService eventService; + private final UserService userService; private final InviteLinkRepositoryService inviteLinkRepositoryService; - public ControllerService(EventService eventService, InviteLinkRepositoryService inviteLinkRepositoryService) { + public ControllerService(EventService eventService, UserService userService) { this.eventService = eventService; + this.userService = userService; this.inviteLinkRepositoryService = inviteLinkRepositoryService; } @@ -30,7 +28,7 @@ public class ControllerService { * @param title Gruppentitel * @param description Gruppenbeschreibung */ - public void createGroup(Account account, String title, String description, Boolean visibility) { + public void createGroup(Account account, String title, String description, Boolean visibility) throws EventException { Visibility visibility1; Long group_id = eventService.checkGroup(); @@ -43,11 +41,12 @@ public class ControllerService { CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null , GroupType.SIMPLE, visibility1); eventService.saveEvent(createGroupEvent); + User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); addUser(account, group_id); updateTitle(account, group_id, title); updateDescription(account, group_id, description); - updateRole(account, group_id); + updateRole(user, group_id); } private void createInviteLink(Long group_id) { @@ -77,13 +76,19 @@ public class ControllerService { eventService.saveEvent(updateGroupDescriptionEvent); } - public void updateRole(Account account,Long group_id){ - UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(group_id,account.getName(),Role.ADMIN); + public void updateRole(User user, Long group_id) throws EventException { + UpdateRoleEvent updateRoleEvent; + Group group = userService.getGroupById(group_id); + if(group.getRoles().get(user.getUser_id()) == Role.ADMIN) { + updateRoleEvent = new UpdateRoleEvent(group_id, user.getUser_id(), Role.MEMBER); + } else { + updateRoleEvent = new UpdateRoleEvent(group_id, user.getUser_id(), Role.ADMIN); + } eventService.saveEvent(updateRoleEvent); } - public void deleteUser(Account account, Long group_id){ - DeleteUserEvent deleteUserEvent = new DeleteUserEvent(group_id,account.getName()); + public void deleteUser(User user, Long group_id){ + DeleteUserEvent deleteUserEvent = new DeleteUserEvent(group_id, user.getUser_id()); eventService.saveEvent(deleteUserEvent); } @@ -106,4 +111,9 @@ public class ControllerService { updateRole(account, group_id); addUserList(users, group_id); } + + public void deleteGroupEvent(User user, Long group_id) { + DeleteGroupEvent deleteGroupEvent = new DeleteGroupEvent(group_id, user.getUser_id()); + eventService.saveEvent(deleteGroupEvent); + } } diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 5ad3f09..dc80759 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -7,7 +7,7 @@ CREATE TABLE event event_id INT PRIMARY KEY AUTO_INCREMENT, group_id INT NOT NULL, user_id VARCHAR(50), - event_payload VARCHAR(255), + event_payload VARCHAR(2500), visibility BOOLEAN ); diff --git a/src/main/resources/templates/detailsMember.html b/src/main/resources/templates/detailsMember.html index 935d4d1..b12a6d1 100644 --- a/src/main/resources/templates/detailsMember.html +++ b/src/main/resources/templates/detailsMember.html @@ -35,11 +35,11 @@
- Private Gruppe + Private Gruppe Öffentliche Gruppe - Veranstaltung + Veranstaltung
- +