Loading gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java +7 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,13 @@ public class GroupsController { @DeleteMapping(value = "/group/{groupId}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<?> deleteGroup(@PathVariable("groupId") String groupId, PaginatedModelRequest request) { GroupEntity parent = groupsService.deleteGroup(groupId, session.getUserId()); GroupEntity group = groupsService.getGroupById(groupId); if (permissionsService.getGroupPermission(group, session.getUserId()) != Permission.ADMIN) { throw new UnauthorizedException("Missing admin privileges"); } GroupEntity parent = groupsService.deleteGroup(group); PaginatedData<GroupNode> groupsPanel = getGroupsPanel(parent.getId(), request); Loading gms/src/main/java/it/inaf/ia2/gms/controller/WebServiceController.java +64 −8 Original line number Diff line number Diff line package it.inaf.ia2.gms.controller; import it.inaf.ia2.gms.exception.BadRequestException; import it.inaf.ia2.gms.model.AddPermissionWsRequest; import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.model.PrepareToJoinRequest; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.MembershipEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.service.GroupsService; import it.inaf.ia2.gms.service.MembersService; import it.inaf.ia2.gms.service.PermissionsService; import java.util.Arrays; import java.util.List; import java.util.Optional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController Loading @@ -19,11 +32,17 @@ public class WebServiceController { @Autowired private GroupsService groupsService; @Autowired private MembersService membersService; @Autowired private PermissionsService permissionsService; /** * Creates a group and its ancestors if they are missing. It doesn't fail if * the last group already exists. */ @PostMapping("/group") @PostMapping(value = "/group", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<GroupEntity> createGroup(@RequestBody List<String> names) { GroupEntity group = groupsService.getRoot(); Loading @@ -40,27 +59,64 @@ public class WebServiceController { return new ResponseEntity<>(group, HttpStatus.CREATED); } public void deleteGroup() { @DeleteMapping("/group") public ResponseEntity<?> deleteGroupByPath(@RequestParam("names") String[] names) { } GroupEntity groupToDelete = getGroupByNames(Arrays.asList(names)); groupsService.deleteGroup(groupToDelete); public void addMember() { return ResponseEntity.noContent().build(); } @PostMapping(value = "/member", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<MembershipEntity> addMember(@RequestBody MembershipEntity request) { MembershipEntity membership = membersService.addMember(request.getGroupId(), request.getUserId()); return new ResponseEntity<>(membership, HttpStatus.CREATED); } public void removeMember() { @DeleteMapping("/member") public ResponseEntity<?> removeMember(@RequestParam("names") String[] names, @RequestParam("userId") String userId) { GroupEntity group = getGroupByNames(Arrays.asList(names)); membersService.removeMember(group.getId(), userId); return ResponseEntity.noContent().build(); } public void addPrivilege() { @PostMapping(value = "/permission", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<PermissionEntity> addPermission(@Valid @RequestBody AddPermissionWsRequest request) { GroupEntity group = getGroupByNames(request.getNames()); PermissionEntity newPermission = permissionsService.addPermission(group, request.getUserId(), request.getPermission()); return new ResponseEntity<>(newPermission, HttpStatus.CREATED); } public void deletePrivilege() { @DeleteMapping("/permission") public ResponseEntity<?> deletePermission(@RequestParam("names") String[] names, @RequestParam("userId") String userId, @RequestParam("permission") Permission permission) { GroupEntity group = getGroupByNames(Arrays.asList(names)); permissionsService.deletePermission(group, userId, permission); return ResponseEntity.noContent().build(); } public void prepareToJoin() { @PostMapping(value = "/prepare-join", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<?> prepareToJoin(@Valid @RequestBody PrepareToJoinRequest request) { permissionsService.movePermissions(request.getFromUserId(), request.getToUserId()); membersService.moveMemberships(request.getFromUserId(), request.getToUserId()); return ResponseEntity.ok().build(); } private GroupEntity getGroupByNames(List<String> names) { return groupsService.findGroupByNames(names) .orElseThrow(() -> new BadRequestException("Unable to find requested group")); } } gms/src/main/java/it/inaf/ia2/gms/model/AddMemberRequest.java 0 → 100644 +27 −0 Original line number Diff line number Diff line package it.inaf.ia2.gms.model; import javax.validation.constraints.NotEmpty; public class AddMemberRequest extends PaginatedModelRequest { @NotEmpty private String groupId; @NotEmpty private String userId; public String getGroupId() { return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } } gms/src/main/java/it/inaf/ia2/gms/model/AddPermissionWsRequest.java 0 → 100644 +39 −0 Original line number Diff line number Diff line package it.inaf.ia2.gms.model; import java.util.List; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; public class AddPermissionWsRequest { @NotNull private List<String> names; @NotEmpty private String userId; @NotNull private Permission permission; public List<String> getNames() { return names; } public void setNames(List<String> names) { this.names = names; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public Permission getPermission() { return permission; } public void setPermission(Permission permission) { this.permission = permission; } } gms/src/main/java/it/inaf/ia2/gms/model/CreateGroupRequest.java +4 −0 Original line number Diff line number Diff line package it.inaf.ia2.gms.model; import javax.validation.constraints.NotEmpty; public class CreateGroupRequest extends PaginatedModelRequest { @NotEmpty private String parentGroupId; @NotEmpty private String newGroupName; public String getNewGroupName() { Loading Loading
gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java +7 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,13 @@ public class GroupsController { @DeleteMapping(value = "/group/{groupId}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<?> deleteGroup(@PathVariable("groupId") String groupId, PaginatedModelRequest request) { GroupEntity parent = groupsService.deleteGroup(groupId, session.getUserId()); GroupEntity group = groupsService.getGroupById(groupId); if (permissionsService.getGroupPermission(group, session.getUserId()) != Permission.ADMIN) { throw new UnauthorizedException("Missing admin privileges"); } GroupEntity parent = groupsService.deleteGroup(group); PaginatedData<GroupNode> groupsPanel = getGroupsPanel(parent.getId(), request); Loading
gms/src/main/java/it/inaf/ia2/gms/controller/WebServiceController.java +64 −8 Original line number Diff line number Diff line package it.inaf.ia2.gms.controller; import it.inaf.ia2.gms.exception.BadRequestException; import it.inaf.ia2.gms.model.AddPermissionWsRequest; import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.model.PrepareToJoinRequest; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.MembershipEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.service.GroupsService; import it.inaf.ia2.gms.service.MembersService; import it.inaf.ia2.gms.service.PermissionsService; import java.util.Arrays; import java.util.List; import java.util.Optional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController Loading @@ -19,11 +32,17 @@ public class WebServiceController { @Autowired private GroupsService groupsService; @Autowired private MembersService membersService; @Autowired private PermissionsService permissionsService; /** * Creates a group and its ancestors if they are missing. It doesn't fail if * the last group already exists. */ @PostMapping("/group") @PostMapping(value = "/group", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<GroupEntity> createGroup(@RequestBody List<String> names) { GroupEntity group = groupsService.getRoot(); Loading @@ -40,27 +59,64 @@ public class WebServiceController { return new ResponseEntity<>(group, HttpStatus.CREATED); } public void deleteGroup() { @DeleteMapping("/group") public ResponseEntity<?> deleteGroupByPath(@RequestParam("names") String[] names) { } GroupEntity groupToDelete = getGroupByNames(Arrays.asList(names)); groupsService.deleteGroup(groupToDelete); public void addMember() { return ResponseEntity.noContent().build(); } @PostMapping(value = "/member", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<MembershipEntity> addMember(@RequestBody MembershipEntity request) { MembershipEntity membership = membersService.addMember(request.getGroupId(), request.getUserId()); return new ResponseEntity<>(membership, HttpStatus.CREATED); } public void removeMember() { @DeleteMapping("/member") public ResponseEntity<?> removeMember(@RequestParam("names") String[] names, @RequestParam("userId") String userId) { GroupEntity group = getGroupByNames(Arrays.asList(names)); membersService.removeMember(group.getId(), userId); return ResponseEntity.noContent().build(); } public void addPrivilege() { @PostMapping(value = "/permission", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<PermissionEntity> addPermission(@Valid @RequestBody AddPermissionWsRequest request) { GroupEntity group = getGroupByNames(request.getNames()); PermissionEntity newPermission = permissionsService.addPermission(group, request.getUserId(), request.getPermission()); return new ResponseEntity<>(newPermission, HttpStatus.CREATED); } public void deletePrivilege() { @DeleteMapping("/permission") public ResponseEntity<?> deletePermission(@RequestParam("names") String[] names, @RequestParam("userId") String userId, @RequestParam("permission") Permission permission) { GroupEntity group = getGroupByNames(Arrays.asList(names)); permissionsService.deletePermission(group, userId, permission); return ResponseEntity.noContent().build(); } public void prepareToJoin() { @PostMapping(value = "/prepare-join", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<?> prepareToJoin(@Valid @RequestBody PrepareToJoinRequest request) { permissionsService.movePermissions(request.getFromUserId(), request.getToUserId()); membersService.moveMemberships(request.getFromUserId(), request.getToUserId()); return ResponseEntity.ok().build(); } private GroupEntity getGroupByNames(List<String> names) { return groupsService.findGroupByNames(names) .orElseThrow(() -> new BadRequestException("Unable to find requested group")); } }
gms/src/main/java/it/inaf/ia2/gms/model/AddMemberRequest.java 0 → 100644 +27 −0 Original line number Diff line number Diff line package it.inaf.ia2.gms.model; import javax.validation.constraints.NotEmpty; public class AddMemberRequest extends PaginatedModelRequest { @NotEmpty private String groupId; @NotEmpty private String userId; public String getGroupId() { return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } }
gms/src/main/java/it/inaf/ia2/gms/model/AddPermissionWsRequest.java 0 → 100644 +39 −0 Original line number Diff line number Diff line package it.inaf.ia2.gms.model; import java.util.List; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; public class AddPermissionWsRequest { @NotNull private List<String> names; @NotEmpty private String userId; @NotNull private Permission permission; public List<String> getNames() { return names; } public void setNames(List<String> names) { this.names = names; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public Permission getPermission() { return permission; } public void setPermission(Permission permission) { this.permission = permission; } }
gms/src/main/java/it/inaf/ia2/gms/model/CreateGroupRequest.java +4 −0 Original line number Diff line number Diff line package it.inaf.ia2.gms.model; import javax.validation.constraints.NotEmpty; public class CreateGroupRequest extends PaginatedModelRequest { @NotEmpty private String parentGroupId; @NotEmpty private String newGroupName; public String getNewGroupName() { Loading