Commit f3024b5b authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Improved getUserPermission endpoint

parent 9fb9c38f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -6,11 +6,13 @@ import it.inaf.ia2.gms.client.call.AddMemberCall;
import it.inaf.ia2.gms.client.call.AddPermissionCall;
import it.inaf.ia2.gms.client.call.CreateGroupCall;
import it.inaf.ia2.gms.client.call.DeleteGroupCall;
import it.inaf.ia2.gms.client.call.GetGroupPermissionsCall;
import it.inaf.ia2.gms.client.call.GetUserGroupsCall;
import it.inaf.ia2.gms.client.call.GetUserPermissionsCall;
import it.inaf.ia2.gms.client.call.ListGroupsCall;
import it.inaf.ia2.gms.client.call.RemoveMemberCall;
import it.inaf.ia2.gms.client.call.RemovePermissionCall;
import it.inaf.ia2.gms.client.model.GroupPermission;
import it.inaf.ia2.gms.client.model.Permission;
import it.inaf.ia2.gms.client.model.UserPermission;
import java.util.List;
@@ -74,6 +76,10 @@ public class GmsClient {
        return new GetUserPermissionsCall(httpClientWrapper).getUserPermissions(userId);
    }

    public List<GroupPermission> getGroupPermissions(String groupId) {
        return new GetGroupPermissionsCall(httpClientWrapper).getGroupPermissions(groupId);
    }

    public void addInvitedRegistration(String token, String email, Map<String, Permission> groupsPermissions) {
        new AddInvitedRegistrationCall(httpClientWrapper).addInvitedRegistration(token, email, groupsPermissions);
    }
+53 −0
Original line number Diff line number Diff line
package it.inaf.ia2.gms.client.call;

import it.inaf.ia2.gms.client.model.GroupPermission;
import it.inaf.ia2.gms.client.model.Permission;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class GetGroupPermissionsCall extends BaseGmsCall {

    public GetGroupPermissionsCall(HttpClientWrapper clientWrapper) {
        super(clientWrapper);
    }

    public List<GroupPermission> getGroupPermissions(String groupId) {

        List<GroupPermission> groupPermissions = new ArrayList<>();

        String endpoint = "permission";
        endpoint += "/" + groupId;

        HttpRequest groupsRequest = newHttpRequest(endpoint)
                .header("Accept", "text/plain")
                .GET()
                .build();

        return getClient().sendAsync(groupsRequest, HttpResponse.BodyHandlers.ofInputStream())
                .thenApply(response -> {
                    if (response.statusCode() == 200) {
                        return response.body();
                    }
                    logServerErrorInputStream(groupsRequest, response);
                    throw new IllegalStateException("Unable to retrieve groups");
                })
                .thenApply(inputStream -> {
                    try (Scanner scan = new Scanner(inputStream)) {
                        while (scan.hasNextLine()) {
                            String line = scan.nextLine();
                            if (!line.isEmpty()) {
                                String[] split = line.split(" ");
                                GroupPermission groupPermission = new GroupPermission();
                                groupPermission.setUserId(split[0]);
                                groupPermission.setPermission(Permission.valueOf(split[1]));
                                groupPermissions.add(groupPermission);
                            }
                        }
                    }
                    return groupPermissions;
                }).join();
    }
}
+23 −0
Original line number Diff line number Diff line
package it.inaf.ia2.gms.client.model;

public class GroupPermission {

    private String userId;
    private Permission permission;

    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;
    }
}
+23 −0
Original line number Diff line number Diff line
@@ -126,6 +126,29 @@
                    <executable>true</executable>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
+16 −8
Original line number Diff line number Diff line
@@ -231,15 +231,24 @@ public class JWTWebServiceController {
        response.setStatus(HttpServletResponse.SC_NO_CONTENT);
    }

    @GetMapping(value = "/permission", produces = MediaType.TEXT_PLAIN_VALUE)
    public void getUserPermission(@RequestParam("user_id") String userId, HttpServletRequest request, HttpServletResponse response) throws IOException {
    @GetMapping(value = {"/permission/{group:.+}", "/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 {

        if (userId.isPresent()) {
            try (PrintWriter pw = new PrintWriter(response.getOutputStream())) {
            for (UserPermission userPermission : searchService.getUserPermission(userId, permissionsManager.getCurrentUserPermissions(getRoot()))) {
                for (UserPermission userPermission : searchService.getUserPermission(userId.get(), permissionsManager.getCurrentUserPermissions(getRoot()))) {
                    String group = String.join(".", userPermission.getGroupCompleteName());
                    pw.println(group + " " + userPermission.getPermission());
                }
            }
        } else {
            GroupEntity groupEntity = getGroupFromNames(extractGroupNames(groupNames));
            try (PrintWriter pw = new PrintWriter(response.getOutputStream())) {
                for (it.inaf.ia2.gms.model.UserPermission up : permissionsManager.getAllPermissions(groupEntity)) {
                    pw.println(up.getUser().getId() + " " + up.getPermission());
                }
            }
        }
    }

    @PostMapping(value = {"/permission/{group:.+}", "/permission/"}, produces = MediaType.TEXT_PLAIN_VALUE)
@@ -319,7 +328,6 @@ public class JWTWebServiceController {
                .orElseThrow(() -> new IllegalStateException("Missing root group"));
    }


    private List<String> extractGroupNames(Optional<String> group) {
        return extractGroupNames(group.orElse(null));
    }
Loading