Skip to content
Commits on Source (20)
import os
base_cmd = "java -jar ~/code/ia2-gms/gms-client/gms-cli/target/gms-cli.jar --token-file ~/Downloads/token.txt --config-file ~/code/ia2-gms/gms-client/gms-cli/gms.properties "
def exec(cmd):
result = os.popen(base_cmd + cmd).read()
print(result)
return result
assert exec("create-group test false") == "Group created\n"
assert exec("create-group test.test2 true") == "Group created\n"
assert exec("list-groups test") == "test2\n"
assert exec("add-member test.test2 2386") == "Member added\n"
assert exec("add-permission test.test2 2386 VIEW_MEMBERS") == "Permission added\n"
exec("get-user-permissions 2386")
assert exec("get-group-permissions test.test2") == "2386 VIEW_MEMBERS\n"
exec("get-member-email-addresses test.test2 VIEW_MEMBERS")
exec("get-user-groups 2386")
assert exec("set-permission test.test2 2386 ADMIN") == "Permission changed\n"
assert exec("get-group-permissions test.test2") == "2386 ADMIN\n"
assert exec("delete-permission test.test2 2386") == "Permission removed\n"
assert exec("get-group-permissions test.test2") == ""
exec("remove-member test.test2 2386")
exec("get-member-email-addresses test.test2 VIEW_MEMBERS") == ""
exec("delete-group test.test2")
assert exec("list-groups test") == ""
gms_url=http://localhost:8082/gms/ws/jwt
gms_url=http://localhost:8082/gms
client_id=gms_cli
client_secret=gms
rap_url=http://localhost/rap-ia2
......@@ -20,6 +20,11 @@
<artifactId>gms-client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
<build>
<finalName>gms-cli</finalName>
......
......@@ -2,7 +2,9 @@ package it.inaf.ia2.gms.cli;
import it.inaf.ia2.client.ClientException;
import it.inaf.ia2.gms.client.GmsClient;
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 it.inaf.ia2.rap.client.ClientCredentialsRapClient;
import it.inaf.ia2.rap.client.RapClient;
import it.inaf.ia2.rap.data.AccessTokenResponse;
......@@ -74,6 +76,10 @@ public class CLI {
}
argIndex++;
}
if (!commandParsed) {
displayUsage();
}
}
private String getNextArg() {
......@@ -159,6 +165,16 @@ public class CLI {
private void parseCommand() {
switch (args[argIndex]) {
case "list-groups": {
String parent = "";
if (args.length == argIndex + 2) {
parent = args[argIndex + 1];
}
for (String group : client.listGroups(parent, false)) {
System.out.println(group);
}
break;
}
case "create-group":
boolean leaf = false;
if (argIndex + 2 < args.length) {
......@@ -167,10 +183,31 @@ public class CLI {
client.createGroup(args[argIndex + 1], leaf);
System.out.println("Group created");
break;
case "get-group-permissions": {
String parent = "";
if (args.length == argIndex + 2) {
parent = args[argIndex + 1];
}
for (GroupPermission gp : client.getGroupPermissions(parent)) {
System.out.println(gp.getUserId() + " " + gp.getPermission());
}
break;
}
case "delete-group":
client.deleteGroup(args[argIndex + 1]);
client.deleteGroup(getNextArg());
System.out.println("Group deleted");
break;
case "get-user-groups": {
String userId = getNextArg();
String parent = "";
if (args.length == argIndex + 2) {
parent = args[argIndex + 1];
}
for (String group : client.getUserGroups(userId, parent)) {
System.out.println(group);
}
break;
}
case "add-member":
if (argIndex + 2 >= args.length) {
displayUsage();
......@@ -185,6 +222,11 @@ public class CLI {
client.removeMember(args[argIndex + 1], args[argIndex + 2]);
System.out.println("Member removed");
break;
case "get-user-permissions":
for (UserPermission up : client.getUserPermissions(getNextArg())) {
System.out.println(up.getGroup() + " " + up.getPermission());
}
break;
case "set-permission":
if (argIndex + 3 >= args.length) {
displayUsage();
......@@ -230,8 +272,12 @@ public class CLI {
+ " [--rap-url <url>]\n"
+ " [--client-id <id>]\n"
+ " [--client-secret <secret>]\n"
+ " list-groups [<name1.name2.name3>]\n"
+ " create-group <name1.name2.name3> [<leaf>]\n"
+ " delete-group <name1.name2.name3>\n"
+ " get-user-groups <user_id> [<name1.name2.name3>]\n"
+ " get-group-permissions [<name1.name2.name3>]\n"
+ " get-user-permissions <user_id>\n"
+ " add-member <name1.name2.name3> <user_id>\n"
+ " remove-member <name1.name2.name3> <user_id>\n"
+ " set-permission <name1.name2.name3> <user_id> <permission>\n"
......
......@@ -98,8 +98,8 @@ public class GmsClient extends BaseClient {
}).orElse(super.getInvalidStatusCodeExceptionMessage(request, response));
}
public List<String> listGroups(String prefix) {
return new ListGroupsCall(this).listGroups(prefix);
public List<String> listGroups(String prefix, boolean recursive) {
return new ListGroupsCall(this).listGroups(prefix, recursive);
}
public List<String> getUserGroups(String userId) {
......
......@@ -2,9 +2,11 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class AddMemberCall extends BaseCall<GmsClient> {
......@@ -14,15 +16,18 @@ public class AddMemberCall extends BaseCall<GmsClient> {
public boolean addMember(String completeGroupName, String userId) {
String endpoint = "ws/jwt/membership";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName;
String endpoint = "membership";
if (completeGroupName == null) {
completeGroupName = "";
}
HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain")
.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();
return client.call(groupsRequest, BodyHandlers.ofInputStream(), 200, res -> true);
......
......@@ -3,10 +3,12 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import it.inaf.ia2.gms.client.model.Permission;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublisher;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
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) {
String endpoint = "ws/jwt/permission";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName;
String endpoint = "permission";
if (completeGroupName == null) {
completeGroupName = "";
}
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)
.header("Accept", "text/plain")
......
......@@ -2,9 +2,11 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class CreateGroupCall extends BaseCall<GmsClient> {
......@@ -14,10 +16,12 @@ public class CreateGroupCall extends BaseCall<GmsClient> {
public boolean createGroup(String completeGroupName, boolean leaf) {
HttpRequest groupsRequest = client.newRequest("ws/jwt/" + completeGroupName)
HttpRequest groupsRequest = client.newRequest("group")
.header("Accept", "text/plain")
.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();
return client.call(groupsRequest, BodyHandlers.ofInputStream(), 201, res -> true);
......
......@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class DeleteGroupCall extends BaseCall<GmsClient> {
......@@ -13,7 +15,8 @@ public class DeleteGroupCall extends BaseCall<GmsClient> {
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")
.DELETE()
.build();
......
......@@ -4,8 +4,10 @@ import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import it.inaf.ia2.gms.client.model.GroupPermission;
import it.inaf.ia2.gms.client.model.Permission;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
......@@ -16,12 +18,11 @@ public class GetGroupPermissionsCall extends BaseCall<GmsClient> {
super(client);
}
public List<GroupPermission> getGroupPermissions(String groupId) {
public List<GroupPermission> getGroupPermissions(String groupName) {
List<GroupPermission> groupPermissions = new ArrayList<>();
String endpoint = "ws/jwt/permission";
endpoint += "/" + groupId;
String endpoint = "permission?group=" + URLEncoder.encode(groupName, StandardCharsets.UTF_8);
HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain")
......
......@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
......@@ -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<>();
String endpoint = "ws/jwt/membership";
if (prefix != null && !prefix.isBlank()) {
endpoint += "/" + prefix;
if (groupName == null) {
groupName = "";
}
endpoint += "?user_id=" + userId;
String endpoint = "membership?group="
+ URLEncoder.encode(groupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain")
......
......@@ -20,8 +20,7 @@ public class GetUserPermissionsCall extends BaseCall<GmsClient> {
List<UserPermission> userPermissions = new ArrayList<>();
String endpoint = "ws/jwt/permission";
endpoint += "?user_id=" + userId;
String endpoint = "permission?user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain")
......
......@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
......@@ -16,18 +18,21 @@ public class ListGroupsCall extends BaseCall<GmsClient> {
/**
* 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
* service.
* the privileges to see that information). The parent group name is removed
* by the service.
*/
public List<String> listGroups(String prefix) {
public List<String> listGroups(String parentGroup, boolean recursive) {
List<String> groups = new ArrayList<>();
String uri = "ws/jwt/list";
if (prefix != null && !prefix.isBlank()) {
uri += "/" + prefix;
if (parentGroup == null) {
parentGroup = "";
}
String uri = "groups?parent="
+ URLEncoder.encode(parentGroup, StandardCharsets.UTF_8)
+ "&recursive=" + recursive;
HttpRequest groupsRequest = client.newRequest(uri)
.header("Accept", "text/plain")
.GET()
......
......@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class RemoveMemberCall extends BaseCall<GmsClient> {
......@@ -13,11 +15,13 @@ public class RemoveMemberCall extends BaseCall<GmsClient> {
public boolean removeMember(String completeGroupName, String userId) {
String endpoint = "ws/jwt/membership";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName;
if (completeGroupName == null) {
completeGroupName = "";
}
endpoint += "?user_id=" + userId;
String endpoint = "membership?group="
+ URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain")
......
......@@ -2,8 +2,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
public class RemovePermissionCall extends BaseCall<GmsClient> {
......@@ -13,11 +15,13 @@ public class RemovePermissionCall extends BaseCall<GmsClient> {
public boolean removePermission(String completeGroupName, String userId) {
String endpoint = "ws/jwt/permission";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName;
if (completeGroupName == null) {
completeGroupName = "";
}
endpoint += "?user_id=" + userId;
String endpoint = "permission?group="
+ URLEncoder.encode(completeGroupName, StandardCharsets.UTF_8)
+ "&user_id=" + userId;
HttpRequest groupsRequest = client.newRequest(endpoint)
.header("Accept", "text/plain")
......
......@@ -3,8 +3,10 @@ package it.inaf.ia2.gms.client.call;
import it.inaf.ia2.client.BaseCall;
import it.inaf.ia2.gms.client.GmsClient;
import it.inaf.ia2.gms.client.model.Permission;
import java.net.URLEncoder;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
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) {
String endpoint = "ws/jwt/permission";
if (completeGroupName != null && !completeGroupName.isBlank()) {
endpoint += "/" + completeGroupName;
if (completeGroupName == null) {
completeGroupName = "";
}
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("Content-Type", "application/x-www-form-urlencoded")
.PUT(requestBody)
......
......@@ -28,6 +28,6 @@ public class AddMemberTest extends BaseGmsClientTest {
when(httpClient.sendAsync(any(), any())).thenReturn(response);
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 {
when(httpClient.sendAsync(any(), any())).thenReturn(response);
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 {
when(httpClient.sendAsync(any(), any())).thenReturn(response);
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 {
when(httpClient.sendAsync(any(), any())).thenReturn(response);
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());
}
}