Skip to content
Commits on Source (3)
...@@ -2,9 +2,11 @@ package it.inaf.ia2.gms.client.call; ...@@ -2,9 +2,11 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class AddMemberCall extends BaseCall<GmsClient> { public class AddMemberCall extends BaseCall<GmsClient> {
...@@ -14,15 +16,18 @@ public class AddMemberCall extends BaseCall<GmsClient> { ...@@ -14,15 +16,18 @@ public class AddMemberCall extends BaseCall<GmsClient> {
public boolean addMember(String completeGroupName, String userId) { public boolean addMember(String completeGroupName, String userId) {
String endpoint = "ws/jwt/membership"; String endpoint = "membership";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName; if (completeGroupName == null) {
completeGroupName = "";
} }
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain") .header("Accept", "text/plain")
.header("Content-Type", "application/x-www-form-urlencoded") .header("Content-Type", "application/x-www-form-urlencoded")
.POST(BodyPublishers.ofString("user_id=" + userId)) .POST(BodyPublishers.ofString(
"group=" + URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId))
.build(); .build();
return client.call(groupsRequest, BodyHandlers.ofInputStream(), 200, res -> true); return client.call(groupsRequest, BodyHandlers.ofInputStream(), 200, res -> true);
......
...@@ -3,10 +3,12 @@ package it.inaf.ia2.gms.client.call; ...@@ -3,10 +3,12 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import it.inaf.ia2.gms.client.model.Permission; import it.inaf.ia2.gms.client.model.Permission;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublisher; import java.net.http.HttpRequest.BodyPublisher;
import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class AddPermissionCall extends BaseCall<GmsClient> { public class AddPermissionCall extends BaseCall<GmsClient> {
...@@ -16,13 +18,15 @@ public class AddPermissionCall extends BaseCall<GmsClient> { ...@@ -16,13 +18,15 @@ public class AddPermissionCall extends BaseCall<GmsClient> {
public String addPermission(String completeGroupName, String userId, Permission permission) { public String addPermission(String completeGroupName, String userId, Permission permission) {
String endpoint = "ws/jwt/permission"; String endpoint = "permission";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName; if (completeGroupName == null) {
completeGroupName = "";
} }
BodyPublisher requestBody = BodyPublishers.ofString( BodyPublisher requestBody = BodyPublishers.ofString(
"user_id=" + userId + "&permission=" + permission); "group=" + URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId + "&permission=" + permission);
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain") .header("Accept", "text/plain")
......
...@@ -2,9 +2,11 @@ package it.inaf.ia2.gms.client.call; ...@@ -2,9 +2,11 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class CreateGroupCall extends BaseCall<GmsClient> { public class CreateGroupCall extends BaseCall<GmsClient> {
...@@ -14,10 +16,12 @@ public class CreateGroupCall extends BaseCall<GmsClient> { ...@@ -14,10 +16,12 @@ public class CreateGroupCall extends BaseCall<GmsClient> {
public boolean createGroup(String completeGroupName, boolean leaf) { public boolean createGroup(String completeGroupName, boolean leaf) {
HttpRequest groupsRequest = client.newRequest("ws/jwt/" + completeGroupName) HttpRequest groupsRequest = client.newRequest("group")
.header("Accept", "text/plain") .header("Accept", "text/plain")
.header("Content-Type", "application/x-www-form-urlencoded") .header("Content-Type", "application/x-www-form-urlencoded")
.POST(BodyPublishers.ofString("leaf=" + leaf)) .POST(BodyPublishers.ofString(
"name=" + URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&leaf=" + leaf))
.build(); .build();
return client.call(groupsRequest, BodyHandlers.ofInputStream(), 201, res -> true); return client.call(groupsRequest, BodyHandlers.ofInputStream(), 201, res -> true);
......
...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call; ...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class DeleteGroupCall extends BaseCall<GmsClient> { public class DeleteGroupCall extends BaseCall<GmsClient> {
...@@ -13,7 +15,8 @@ public class DeleteGroupCall extends BaseCall<GmsClient> { ...@@ -13,7 +15,8 @@ public class DeleteGroupCall extends BaseCall<GmsClient> {
public boolean deleteGroup(String completeGroupName) { public boolean deleteGroup(String completeGroupName) {
HttpRequest groupsRequest = client.newRequest("ws/jwt/" + completeGroupName) HttpRequest groupsRequest = client.newRequest("group?name="
+ URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8))
.header("Accept", "text/plain") .header("Accept", "text/plain")
.DELETE() .DELETE()
.build(); .build();
......
...@@ -4,8 +4,10 @@ import it.inaf.ia2.client.BaseCall; ...@@ -4,8 +4,10 @@ import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import it.inaf.ia2.gms.client.model.GroupPermission; import it.inaf.ia2.gms.client.model.GroupPermission;
import it.inaf.ia2.gms.client.model.Permission; import it.inaf.ia2.gms.client.model.Permission;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Scanner; import java.util.Scanner;
...@@ -16,12 +18,11 @@ public class GetGroupPermissionsCall extends BaseCall<GmsClient> { ...@@ -16,12 +18,11 @@ public class GetGroupPermissionsCall extends BaseCall<GmsClient> {
super(client); super(client);
} }
public List<GroupPermission> getGroupPermissions(String groupId) { public List<GroupPermission> getGroupPermissions(String groupName) {
List<GroupPermission> groupPermissions = new ArrayList<>(); List<GroupPermission> groupPermissions = new ArrayList<>();
String endpoint = "ws/jwt/permission"; String endpoint = "permission?group=" + URLEncoder.encode(groupName, StandardCharsets.UTF_8);
endpoint += "/" + groupId;
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain") .header("Accept", "text/plain")
......
...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call; ...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Scanner; import java.util.Scanner;
...@@ -48,15 +50,17 @@ public class GetUserGroupsCall extends BaseCall<GmsClient> { ...@@ -48,15 +50,17 @@ public class GetUserGroupsCall extends BaseCall<GmsClient> {
}); });
} }
public List<String> getUserGroups(String userId, String prefix) { public List<String> getUserGroups(String userId, String groupName) {
List<String> groups = new ArrayList<>(); List<String> groups = new ArrayList<>();
String endpoint = "ws/jwt/membership"; if (groupName == null) {
if (prefix != null && !prefix.isBlank()) { groupName = "";
endpoint += "/" + prefix;
} }
endpoint += "?user_id=" + userId;
String endpoint = "membership?group="
+ URLEncoder.encode(groupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain") .header("Accept", "text/plain")
......
...@@ -20,8 +20,7 @@ public class GetUserPermissionsCall extends BaseCall<GmsClient> { ...@@ -20,8 +20,7 @@ public class GetUserPermissionsCall extends BaseCall<GmsClient> {
List<UserPermission> userPermissions = new ArrayList<>(); List<UserPermission> userPermissions = new ArrayList<>();
String endpoint = "ws/jwt/permission"; String endpoint = "permission?user_id=" + userId;
endpoint += "?user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain") .header("Accept", "text/plain")
......
...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call; ...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Scanner; import java.util.Scanner;
...@@ -16,18 +18,20 @@ public class ListGroupsCall extends BaseCall<GmsClient> { ...@@ -16,18 +18,20 @@ public class ListGroupsCall extends BaseCall<GmsClient> {
/** /**
* Returns the list of the groups in a given parent group (if the user has * Returns the list of the groups in a given parent group (if the user has
* the privileges to see that information). The prefix is removed by the * the privileges to see that information). The parent group name is removed
* service. * by the service.
*/ */
public List<String> listGroups(String prefix, boolean recursive) { public List<String> listGroups(String parentGroup, boolean recursive) {
List<String> groups = new ArrayList<>(); List<String> groups = new ArrayList<>();
String uri = "list"; if (parentGroup == null) {
if (prefix != null && !prefix.isBlank()) { parentGroup = "";
uri += "/" + prefix;
} }
uri += "?recursive=" + recursive;
String uri = "groups?parent="
+ URLEncoder.encode(parentGroup, StandardCharsets.UTF_8)
+ "&recursive=" + recursive;
HttpRequest groupsRequest = client.newRequest(uri) HttpRequest groupsRequest = client.newRequest(uri)
.header("Accept", "text/plain") .header("Accept", "text/plain")
......
...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call; ...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class RemoveMemberCall extends BaseCall<GmsClient> { public class RemoveMemberCall extends BaseCall<GmsClient> {
...@@ -13,11 +15,13 @@ public class RemoveMemberCall extends BaseCall<GmsClient> { ...@@ -13,11 +15,13 @@ public class RemoveMemberCall extends BaseCall<GmsClient> {
public boolean removeMember(String completeGroupName, String userId) { public boolean removeMember(String completeGroupName, String userId) {
String endpoint = "ws/jwt/membership"; if (completeGroupName == null) {
if (completeGroupName != null && !completeGroupName.isBlank()) { completeGroupName = "";
endpoint += "/" + completeGroupName;
} }
endpoint += "?user_id=" + userId;
String endpoint = "membership?group="
+ URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain") .header("Accept", "text/plain")
......
...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call; ...@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class RemovePermissionCall extends BaseCall<GmsClient> { public class RemovePermissionCall extends BaseCall<GmsClient> {
...@@ -13,11 +15,13 @@ public class RemovePermissionCall extends BaseCall<GmsClient> { ...@@ -13,11 +15,13 @@ public class RemovePermissionCall extends BaseCall<GmsClient> {
public boolean removePermission(String completeGroupName, String userId) { public boolean removePermission(String completeGroupName, String userId) {
String endpoint = "ws/jwt/permission"; if (completeGroupName == null) {
if (completeGroupName != null && !completeGroupName.isBlank()) { completeGroupName = "";
endpoint += "/" + completeGroupName;
} }
endpoint += "?user_id=" + userId;
String endpoint = "permission?group="
+ URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain") .header("Accept", "text/plain")
......
...@@ -3,8 +3,10 @@ package it.inaf.ia2.gms.client.call; ...@@ -3,8 +3,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall; import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient; import it.inaf.ia2.gms.client.GmsClient;
import it.inaf.ia2.gms.client.model.Permission; import it.inaf.ia2.gms.client.model.Permission;
import java.net.URLEncoder;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers; import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class SetPermissionCall extends BaseCall<GmsClient> { public class SetPermissionCall extends BaseCall<GmsClient> {
...@@ -14,15 +16,15 @@ public class SetPermissionCall extends BaseCall<GmsClient> { ...@@ -14,15 +16,15 @@ public class SetPermissionCall extends BaseCall<GmsClient> {
public String setPermission(String completeGroupName, String userId, Permission permission) { public String setPermission(String completeGroupName, String userId, Permission permission) {
String endpoint = "ws/jwt/permission"; if (completeGroupName == null) {
if (completeGroupName != null && !completeGroupName.isBlank()) { completeGroupName = "";
endpoint += "/" + completeGroupName;
} }
HttpRequest.BodyPublisher requestBody = HttpRequest.BodyPublishers.ofString( HttpRequest.BodyPublisher requestBody = HttpRequest.BodyPublishers.ofString(
"user_id=" + userId + "&permission=" + permission); "group=" + URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId + "&permission=" + permission);
HttpRequest groupsRequest = client.newRequest(endpoint) HttpRequest groupsRequest = client.newRequest("permission")
.header("Accept", "text/plain") .header("Accept", "text/plain")
.header("Content-Type", "application/x-www-form-urlencoded") .header("Content-Type", "application/x-www-form-urlencoded")
.PUT(requestBody) .PUT(requestBody)
......
...@@ -28,6 +28,6 @@ public class AddMemberTest extends BaseGmsClientTest { ...@@ -28,6 +28,6 @@ public class AddMemberTest extends BaseGmsClientTest {
when(httpClient.sendAsync(any(), any())).thenReturn(response); when(httpClient.sendAsync(any(), any())).thenReturn(response);
gmsClient.addMember("LBT.INAF", "user"); gmsClient.addMember("LBT.INAF", "user");
verify(httpClient, times(1)).sendAsync(endpointEq("POST", "ws/jwt/membership/LBT.INAF"), any()); verify(httpClient, times(1)).sendAsync(endpointEq("POST", "membership"), any());
} }
} }
...@@ -29,6 +29,6 @@ public class AddPermissionTest extends BaseGmsClientTest { ...@@ -29,6 +29,6 @@ public class AddPermissionTest extends BaseGmsClientTest {
when(httpClient.sendAsync(any(), any())).thenReturn(response); when(httpClient.sendAsync(any(), any())).thenReturn(response);
gmsClient.addPermission("LBT.INAF", "user", Permission.ADMIN); gmsClient.addPermission("LBT.INAF", "user", Permission.ADMIN);
verify(httpClient, times(1)).sendAsync(endpointEq("POST", "ws/jwt/permission/LBT.INAF"), any()); verify(httpClient, times(1)).sendAsync(endpointEq("POST", "permission"), any());
} }
} }
...@@ -28,6 +28,6 @@ public class CreateGroupTest extends BaseGmsClientTest { ...@@ -28,6 +28,6 @@ public class CreateGroupTest extends BaseGmsClientTest {
when(httpClient.sendAsync(any(), any())).thenReturn(response); when(httpClient.sendAsync(any(), any())).thenReturn(response);
gmsClient.createGroup("LBT.INAF", false); gmsClient.createGroup("LBT.INAF", false);
verify(httpClient, times(1)).sendAsync(endpointEq("POST", "ws/jwt/LBT.INAF"), any()); verify(httpClient, times(1)).sendAsync(endpointEq("POST", "group"), any());
} }
} }
...@@ -28,6 +28,6 @@ public class DeleteGroupTest extends BaseGmsClientTest { ...@@ -28,6 +28,6 @@ public class DeleteGroupTest extends BaseGmsClientTest {
when(httpClient.sendAsync(any(), any())).thenReturn(response); when(httpClient.sendAsync(any(), any())).thenReturn(response);
gmsClient.deleteGroup("LBT.INAF"); gmsClient.deleteGroup("LBT.INAF");
verify(httpClient, times(1)).sendAsync(endpointEq("DELETE", "ws/jwt/LBT.INAF"), any()); verify(httpClient, times(1)).sendAsync(endpointEq("DELETE", "group?name=LBT.INAF"), any());
} }
} }
...@@ -50,9 +50,9 @@ public class GetUserGroupsTest extends BaseGmsClientTest { ...@@ -50,9 +50,9 @@ public class GetUserGroupsTest extends BaseGmsClientTest {
CompletableFuture response = CompletableFuture.completedFuture(getMockedStreamResponse(200, body)); CompletableFuture response = CompletableFuture.completedFuture(getMockedStreamResponse(200, body));
when(httpClient.sendAsync(any(), any())).thenReturn(response); when(httpClient.sendAsync(any(), any())).thenReturn(response);
List<String> groups = gmsClient.listGroups("LBT.", false); List<String> groups = gmsClient.listGroups("LBT", false);
verify(httpClient, times(1)).sendAsync(endpointEq("GET", "list/LBT.?recursive=false"), any()); verify(httpClient, times(1)).sendAsync(endpointEq("GET", "groups?parent=LBT&recursive=false"), any());
assertEquals(2, groups.size()); assertEquals(2, groups.size());
assertEquals("INAF", groups.get(0)); assertEquals("INAF", groups.get(0));
......
...@@ -28,6 +28,6 @@ public class RemoveMemberTest extends BaseGmsClientTest { ...@@ -28,6 +28,6 @@ public class RemoveMemberTest extends BaseGmsClientTest {
when(httpClient.sendAsync(any(), any())).thenReturn(response); when(httpClient.sendAsync(any(), any())).thenReturn(response);
gmsClient.removeMember("LBT.INAF", "user"); gmsClient.removeMember("LBT.INAF", "user");
verify(httpClient, times(1)).sendAsync(endpointEq("DELETE", "ws/jwt/membership/LBT.INAF?user_id=user"), any()); verify(httpClient, times(1)).sendAsync(endpointEq("DELETE", "membership?group=LBT.INAF&user_id=user"), any());
} }
} }
...@@ -28,6 +28,6 @@ public class RemovePermissionTest extends BaseGmsClientTest { ...@@ -28,6 +28,6 @@ public class RemovePermissionTest extends BaseGmsClientTest {
when(httpClient.sendAsync(any(), any())).thenReturn(response); when(httpClient.sendAsync(any(), any())).thenReturn(response);
gmsClient.removePermission("LBT.INAF", "user"); gmsClient.removePermission("LBT.INAF", "user");
verify(httpClient, times(1)).sendAsync(endpointEq("DELETE", "ws/jwt/permission/LBT.INAF?user_id=user"), any()); verify(httpClient, times(1)).sendAsync(endpointEq("DELETE", "permission?group=LBT.INAF&user_id=user"), any());
} }
} }
...@@ -14,9 +14,13 @@ import it.inaf.ia2.gms.model.request.RenameGroupRequest; ...@@ -14,9 +14,13 @@ import it.inaf.ia2.gms.model.request.RenameGroupRequest;
import it.inaf.ia2.gms.model.request.SearchFilterRequest; import it.inaf.ia2.gms.model.request.SearchFilterRequest;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.service.GroupNameService; import it.inaf.ia2.gms.service.GroupNameService;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.GroupsTreeBuilder; import it.inaf.ia2.gms.service.GroupsTreeBuilder;
import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.security.Principal;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -46,6 +50,9 @@ public class GroupsController { ...@@ -46,6 +50,9 @@ public class GroupsController {
@Autowired @Autowired
private GroupsManager groupsManager; private GroupsManager groupsManager;
@Autowired
private GroupsService groupsService;
@Autowired @Autowired
private GroupsTreeBuilder groupsTreeBuilder; private GroupsTreeBuilder groupsTreeBuilder;
...@@ -56,7 +63,7 @@ public class GroupsController { ...@@ -56,7 +63,7 @@ public class GroupsController {
private GroupStatusManager groupStatusManager; private GroupStatusManager groupStatusManager;
@Autowired @Autowired
private GroupNameService groupNameService; protected GroupNameService groupNameService;
@GetMapping(value = "/groups", produces = MediaType.APPLICATION_JSON_VALUE) @GetMapping(value = "/groups", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getGroupsTab(@Valid GroupsRequest request) { public ResponseEntity<?> getGroupsTab(@Valid GroupsRequest request) {
...@@ -139,4 +146,55 @@ public class GroupsController { ...@@ -139,4 +146,55 @@ public class GroupsController {
private <T extends PaginatedModelRequest & SearchFilterRequest> PaginatedData<GroupNode> getGroupsPanel(GroupEntity parentGroup, T request) { private <T extends PaginatedModelRequest & SearchFilterRequest> PaginatedData<GroupNode> getGroupsPanel(GroupEntity parentGroup, T request) {
return groupsTreeBuilder.listSubGroups(parentGroup, request, servletRequest.getUserPrincipal().getName()); return groupsTreeBuilder.listSubGroups(parentGroup, request, servletRequest.getUserPrincipal().getName());
} }
@GetMapping(value = "/groups", produces = MediaType.TEXT_PLAIN_VALUE)
public void listChildGroups(@RequestParam("parent") Optional<String> groupNames,
@RequestParam(value = "recursive", defaultValue = "false") boolean recursive,
Principal principal, HttpServletResponse response) throws IOException {
GroupEntity parentGroup = groupNameService.getGroupFromNames(groupNames);
List<GroupEntity> visibleSubgroups = groupsManager.getChildGroups(parentGroup, recursive);
try ( PrintWriter pw = new PrintWriter(response.getOutputStream())) {
for (String groupName : groupNameService.getGroupsNames(visibleSubgroups)) {
pw.println(groupNameService.getShortGroupName(groupName, groupNames));
}
}
}
/**
* Creates a group and its ancestors if they are missing. It doesn't fail if
* the last group already exists. For CLI/API usage.
*/
@PostMapping(value = "/group", produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void createGroup(@RequestParam("name") String groupParam,
@RequestParam(value = "leaf", required = false, defaultValue = "false") boolean leaf,
HttpServletResponse response) throws IOException {
List<String> groupNames = groupNameService.extractGroupNames(groupParam);
GroupEntity group = groupsManager.getRoot();
for (int i = 0; i < groupNames.size(); i++) {
String name = groupNames.get(i);
Optional<GroupEntity> optGroup = groupsService.findGroupByParentAndName(group, name);
if (optGroup.isPresent()) {
group = optGroup.get();
} else {
group = groupsManager.createGroup(group, name, i == groupNames.size() - 1 ? leaf : false);
}
}
response.setStatus(HttpServletResponse.SC_CREATED);
try ( PrintWriter pw = new PrintWriter(response.getOutputStream())) {
pw.println(groupParam);
}
}
@DeleteMapping(value = "/group", produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<?> deleteGroup(@RequestParam("name") String groupParam) {
GroupEntity group = groupNameService.getGroupFromNames(Optional.of(groupParam));
groupsManager.deleteGroup(group.getId());
return ResponseEntity.noContent().build();
}
} }
...@@ -173,6 +173,8 @@ public class JWTWebServiceController { ...@@ -173,6 +173,8 @@ public class JWTWebServiceController {
* Creates a group and its ancestors if they are missing. It doesn't fail if * Creates a group and its ancestors if they are missing. It doesn't fail if
* the last group already exists. * the last group already exists.
*/ */
// Moved to GroupsController with different parameters
@Deprecated
@PostMapping(value = "/ws/jwt/{group:.+}", produces = MediaType.TEXT_PLAIN_VALUE) @PostMapping(value = "/ws/jwt/{group:.+}", produces = MediaType.TEXT_PLAIN_VALUE)
public void createGroup(@PathVariable("group") String groupParam, HttpServletRequest request, HttpServletResponse response) throws IOException { public void createGroup(@PathVariable("group") String groupParam, HttpServletRequest request, HttpServletResponse response) throws IOException {
...@@ -198,13 +200,15 @@ public class JWTWebServiceController { ...@@ -198,13 +200,15 @@ public class JWTWebServiceController {
} }
} }
@Deprecated
@DeleteMapping(value = "/ws/jwt/{group:.+}", produces = MediaType.TEXT_PLAIN_VALUE) @DeleteMapping(value = "/ws/jwt/{group:.+}", produces = MediaType.TEXT_PLAIN_VALUE)
public void deleteGroup(@PathVariable("group") String groupParam, HttpServletResponse response) { public void deleteGroup(@PathVariable("group") String groupParam, HttpServletResponse response) {
GroupEntity group = groupNameService.getGroupFromNames(Optional.of(groupParam)); GroupEntity group = groupNameService.getGroupFromNames(Optional.of(groupParam));
groupsDAO.deleteGroup(group); groupsManager.deleteGroup(group.getId());
response.setStatus(HttpServletResponse.SC_NO_CONTENT); response.setStatus(HttpServletResponse.SC_NO_CONTENT);
} }
@Deprecated
@GetMapping(value = {"/ws/jwt/membership/{group:.+}", "/ws/jwt/membership"}, produces = MediaType.TEXT_PLAIN_VALUE) @GetMapping(value = {"/ws/jwt/membership/{group:.+}", "/ws/jwt/membership"}, produces = MediaType.TEXT_PLAIN_VALUE)
public void getMembership(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String userId, HttpServletResponse response) throws IOException { public void getMembership(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String userId, HttpServletResponse response) throws IOException {
...@@ -219,6 +223,7 @@ public class JWTWebServiceController { ...@@ -219,6 +223,7 @@ public class JWTWebServiceController {
} }
} }
@Deprecated
@PostMapping(value = {"/ws/jwt/membership/{group:.+}", "/ws/jwt/membership"}, produces = MediaType.TEXT_PLAIN_VALUE) @PostMapping(value = {"/ws/jwt/membership/{group:.+}", "/ws/jwt/membership"}, produces = MediaType.TEXT_PLAIN_VALUE)
public void addMember(@PathVariable("group") Optional<String> groupNames, HttpServletRequest request, HttpServletResponse response) throws IOException { public void addMember(@PathVariable("group") Optional<String> groupNames, HttpServletRequest request, HttpServletResponse response) throws IOException {
...@@ -233,6 +238,7 @@ public class JWTWebServiceController { ...@@ -233,6 +238,7 @@ public class JWTWebServiceController {
membershipManager.addMember(groupEntity, targetUserId); membershipManager.addMember(groupEntity, targetUserId);
} }
@Deprecated
@DeleteMapping(value = {"/ws/jwt/membership/{group:.+}", "/ws/jwt/membership"}, produces = MediaType.TEXT_PLAIN_VALUE) @DeleteMapping(value = {"/ws/jwt/membership/{group:.+}", "/ws/jwt/membership"}, produces = MediaType.TEXT_PLAIN_VALUE)
public void removeMember(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String userId, public void removeMember(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String userId,
HttpServletRequest request, HttpServletResponse response) throws IOException { HttpServletRequest request, HttpServletResponse response) throws IOException {
...@@ -243,6 +249,7 @@ public class JWTWebServiceController { ...@@ -243,6 +249,7 @@ public class JWTWebServiceController {
response.setStatus(HttpServletResponse.SC_NO_CONTENT); response.setStatus(HttpServletResponse.SC_NO_CONTENT);
} }
@Deprecated
@GetMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission"}, produces = MediaType.TEXT_PLAIN_VALUE) @GetMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission"}, produces = MediaType.TEXT_PLAIN_VALUE)
public void getUserPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") Optional<String> userId, HttpServletRequest request, HttpServletResponse response) throws IOException { public void getUserPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") Optional<String> userId, HttpServletRequest request, HttpServletResponse response) throws IOException {
...@@ -263,18 +270,21 @@ public class JWTWebServiceController { ...@@ -263,18 +270,21 @@ public class JWTWebServiceController {
} }
} }
@Deprecated
@PostMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @PostMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void addPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException { public void addPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames); GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
permissionsManager.addPermission(groupEntity, targetUserId, permission); permissionsManager.addPermission(groupEntity, targetUserId, permission);
} }
@Deprecated
@PutMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @PutMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void setPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException { public void setPermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames); GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
permissionsManager.createOrUpdatePermission(groupEntity, targetUserId, permission); permissionsManager.createOrUpdatePermission(groupEntity, targetUserId, permission);
} }
@Deprecated
@DeleteMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE) @DeleteMapping(value = {"/ws/jwt/permission/{group:.+}", "/ws/jwt/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE)
public void removePermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String userId, public void removePermission(@PathVariable("group") Optional<String> groupNames, @RequestParam("user_id") String userId,
HttpServletRequest request, HttpServletResponse response) throws IOException { HttpServletRequest request, HttpServletResponse response) throws IOException {
......