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 842870d..25faa42 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -3,9 +3,11 @@ 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 +25,7 @@ import javax.annotation.security.RolesAllowed; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; @Controller @SessionScope @@ -79,7 +82,7 @@ public class Gruppen2Controller { @RequestParam(value = "title") String title, @RequestParam(value = "beschreibung") String beschreibung, @RequestParam(value = "visibility", required = false) Boolean visibility, - @RequestParam("file") MultipartFile file) throws IOException { + @RequestParam(value = "file") MultipartFile file) throws IOException, EventException { Account account = keyCloakService.createAccountFromPrincipal(token); List userList = CsvService.read(file.getInputStream()); @@ -109,12 +112,13 @@ public class Gruppen2Controller { return "search"; } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/createGroup") 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; @@ -123,16 +127,19 @@ public class Gruppen2Controller { return "redirect:/gruppen2/"; } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) - @GetMapping("/details") - public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException, ResponseStatusException { + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @GetMapping("/details/{id}") + public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @PathVariable (value="id") Long id) throws EventException, ResponseStatusException { + model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(id); Account account = keyCloakService.createAccountFromPrincipal(token); 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"); @@ -142,8 +149,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/"; } @@ -173,12 +183,44 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/leaveGroup") - public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam(value = "group_id") Long id) { + public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam (value="group_id") Long id) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); - controllerService.deleteUser(account, id); + User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); + controllerService.deleteUser(user.getUser_id(), id); return "redirect:/gruppen2/"; } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @GetMapping("/details/members/{id}") + public String editMembers(Model model, KeycloakAuthenticationToken token, @PathVariable (value="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); + model.addAttribute("admin", Role.ADMIN); + return "editMembers"; + } else { + return "redirect:/details/"; + } + } + + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @PostMapping("/details/members/changeRole") + public String changeRole(KeycloakAuthenticationToken token, @RequestParam (value = "group_id") Long group_id, + @RequestParam (value = "user_id") String user_id) throws EventException { + controllerService.updateRole(user_id, group_id); + return "redirect:/gruppen2/details/members/" + group_id; + } + + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @PostMapping("/details/members/deleteUser") + public String deleteUser(KeycloakAuthenticationToken token,@RequestParam (value = "group_id") Long group_id, + @RequestParam (value = "user_id") String user_id) throws EventException { + controllerService.deleteUser(user_id, group_id); + return "redirect:/gruppen2/details/members/" + group_id; + } + @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..7f84660 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,23 +1,27 @@ package mops.gruppen2.service; import mops.gruppen2.domain.*; + +import mops.gruppen2.domain.Exceptions.EventException; 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; + @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, InviteLinkRepositoryService inviteLinkRepositoryService) { this.eventService = eventService; + this.userService = userService; this.inviteLinkRepositoryService = inviteLinkRepositoryService; } @@ -30,7 +34,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 +47,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.getUser_id(), group_id); } private void createInviteLink(Long group_id) { @@ -77,17 +82,39 @@ 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(String user_id, Long group_id) throws EventException { + UpdateRoleEvent updateRoleEvent; + Group group = userService.getGroupById(group_id); + User user = null; + for (User member : group.getMembers()) { + if(member.getUser_id().equals(user_id)) user = member; + } + assert user != null; + 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(String user_id, Long group_id) throws EventException { + Group group = userService.getGroupById(group_id); + User user = null; + for (User member : group.getMembers()) { + if(member.getUser_id().equals(user_id)) user = member; + } + assert user != null; + DeleteUserEvent deleteUserEvent = new DeleteUserEvent(group_id, user.getUser_id()); eventService.saveEvent(deleteUserEvent); } - public void createLecture(Account account, String title, String description, Boolean visibility, List users) { + public void deleteGroupEvent(User user, Long group_id) { + DeleteGroupEvent deleteGroupEvent = new DeleteGroupEvent(group_id, user.getUser_id()); + eventService.saveEvent(deleteGroupEvent); + } + + public void createLecture(Account account, String title, String description, Boolean visibility, List users) throws EventException { Visibility visibility1; Long group_id = eventService.checkGroup(); @@ -103,7 +130,8 @@ public class ControllerService { addUser(account, group_id); updateTitle(account, group_id, title); updateDescription(account, group_id, description); - updateRole(account, group_id); + updateRole(account.getName(), group_id); addUserList(users, group_id); + } } 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..a45d005 100644 --- a/src/main/resources/templates/detailsMember.html +++ b/src/main/resources/templates/detailsMember.html @@ -31,35 +31,45 @@
-
-
-

-

- Private Gruppe +

+

+

+ Private Gruppe Öffentliche Gruppe - Veranstaltung -

-

-
-
-
- -
-
+ Veranstaltung +

+
+
+

+
+
+ -
-
-

Mitglieder

- -

+
+

Mitglieder

+
+
+ +
+
+
+
  • - admin + admin
diff --git a/src/main/resources/templates/detailsNoMember.html b/src/main/resources/templates/detailsNoMember.html index eb8a506..afd346c 100644 --- a/src/main/resources/templates/detailsNoMember.html +++ b/src/main/resources/templates/detailsNoMember.html @@ -32,13 +32,15 @@
-

-

- Private Gruppe +

+

+ Private Gruppe Öffentliche Gruppe - Veranstaltung -

-

+ Veranstaltung +

+
+

+
diff --git a/src/main/resources/templates/editMembers.html b/src/main/resources/templates/editMembers.html new file mode 100644 index 0000000..1fbed6c --- /dev/null +++ b/src/main/resources/templates/editMembers.html @@ -0,0 +1,70 @@ + + + + + Gruppendetails + + + + + +
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + +
MitgliedRolleOptionen
+ Mitglied + Admin + + + + + + +
+ + + +
+
+ +
+
+
+
+
diff --git a/src/main/resources/templates/errorRenameLater.html b/src/main/resources/templates/errorRenameLater.html index 01fbadc..1344e10 100644 --- a/src/main/resources/templates/errorRenameLater.html +++ b/src/main/resources/templates/errorRenameLater.html @@ -16,7 +16,7 @@

diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 6ebad4a..5d51236 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -34,33 +34,27 @@

Meine Gruppen

+

+ Mitglied in + + Gruppe. + Gruppen. +

+
+

- +

-

+
+

+

-
-
-
-

user_id

-

- username - usersurname -

-

usermail

-

- In Gruppen: - -

-
-
-
diff --git a/src/main/resources/templates/search.html b/src/main/resources/templates/search.html index b06443b..3a8918f 100644 --- a/src/main/resources/templates/search.html +++ b/src/main/resources/templates/search.html @@ -48,7 +48,6 @@ Gruppenname Beschreibung - Öffentlich/Privat Mitgliederanzahl @@ -57,8 +56,7 @@ Gruppenname - Beschreibung - Öffentlich + Beschreibung Mitgliederanzahl