From eb8aa51a007af6c879df39f84d45407ebbec28cf Mon Sep 17 00:00:00 2001 From: lucio Date: Thu, 10 Oct 2019 18:19:34 +0200 Subject: [PATCH 1/6] Added client calls for user and group managing --- .../client/plugins/AbstractPlugin.java | 13 ++ .../client/plugins/GroupManagerPlugin.java | 53 +++++ .../client/plugins/UserManagerPlugin.java | 51 +++++ .../client/proxies/DefaultGroupManager.java | 199 ++++++++++++++++++ .../client/proxies/DefaultUserManager.java | 110 ++++++++++ .../client/proxies/GroupManagerClient.java | 21 ++ .../client/proxies/UserManagerClient.java | 15 ++ 7 files changed, 462 insertions(+) create mode 100644 src/main/java/org/gcube/common/storagehub/client/plugins/GroupManagerPlugin.java create mode 100644 src/main/java/org/gcube/common/storagehub/client/plugins/UserManagerPlugin.java create mode 100644 src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java create mode 100644 src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java create mode 100644 src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java create mode 100644 src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java diff --git a/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java b/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java index 29ef703..0f11c5d 100644 --- a/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/AbstractPlugin.java @@ -1,11 +1,14 @@ package org.gcube.common.storagehub.client.plugins; +import org.gcube.common.authorization.library.policies.Users; import org.gcube.common.clients.Plugin; import org.gcube.common.clients.ProxyBuilder; import org.gcube.common.clients.ProxyBuilderImpl; import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; import org.gcube.common.storagehub.client.Constants; +import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.client.proxies.UserManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; @@ -16,12 +19,22 @@ public abstract class AbstractPlugin implements Plugin { private static final ItemManagerPlugin item_plugin = new ItemManagerPlugin(); private static final WorkspaceManagerPlugin workspace_plugin = new WorkspaceManagerPlugin(); + private static final UserManagerPlugin user_plugin = new UserManagerPlugin(); + private static final GroupManagerPlugin group_plugin = new GroupManagerPlugin(); public static ProxyBuilder item() { return new ProxyBuilderImpl(item_plugin); } + public static ProxyBuilder groups() { + return new ProxyBuilderImpl(group_plugin); + } + + public static ProxyBuilder users() { + return new ProxyBuilderImpl(user_plugin); + } + public static ProxyBuilder workspace() { return new ProxyBuilderImpl(workspace_plugin); } diff --git a/src/main/java/org/gcube/common/storagehub/client/plugins/GroupManagerPlugin.java b/src/main/java/org/gcube/common/storagehub/client/plugins/GroupManagerPlugin.java new file mode 100644 index 0000000..bfc8ae7 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/GroupManagerPlugin.java @@ -0,0 +1,53 @@ +package org.gcube.common.storagehub.client.plugins; + +import javax.xml.transform.dom.DOMResult; +import javax.xml.ws.EndpointReference; + +import org.gcube.common.calls.jaxrs.GcubeService; +import org.gcube.common.calls.jaxrs.TargetFactory; +import org.gcube.common.clients.config.ProxyConfig; +import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; +import org.gcube.common.gxrest.response.entity.SerializableErrorEntityTextReader; +import org.gcube.common.storagehub.client.Constants; +import org.gcube.common.storagehub.client.MyInputStreamProvider; +import org.gcube.common.storagehub.client.proxies.DefaultGroupManager; +import org.gcube.common.storagehub.client.proxies.DefaultUserManager; +import org.gcube.common.storagehub.client.proxies.GroupManagerClient; +import org.gcube.common.storagehub.client.proxies.UserManagerClient; +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.w3c.dom.Node; + +public class GroupManagerPlugin extends AbstractPlugin { + + public GroupManagerPlugin() { + super("storagehub/workspace"); + } + + @Override + public Exception convert(Exception e, ProxyConfig arg1) { + return e; + } + + @Override + public GroupManagerClient newProxy(ProxyDelegate delegate) { + return new DefaultGroupManager(delegate); + } + + @Override + public GXWebTargetAdapterRequest resolve(EndpointReference epr, ProxyConfig config) + throws Exception { + DOMResult result = new DOMResult(); + epr.writeTo(result); + Node node =result.getNode(); + Node child=node.getFirstChild(); + String address = child.getTextContent(); + //GXWebTargetAdapterRequest request = GXWebTargetAdapterRequest.newRequest(address).path(this.name).path("items"); + GcubeService service = GcubeService.service().withName(Constants.MANAGER_QNAME).andPath("groups"); + GXWebTargetAdapterRequest requestAdapter = TargetFactory.stubFor(service).getAsGxRest(address); + requestAdapter.register(SerializableErrorEntityTextReader.class); + requestAdapter.register(MyInputStreamProvider.class); + requestAdapter.register(MultiPartFeature.class); + return requestAdapter; + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/common/storagehub/client/plugins/UserManagerPlugin.java b/src/main/java/org/gcube/common/storagehub/client/plugins/UserManagerPlugin.java new file mode 100644 index 0000000..91fd651 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/plugins/UserManagerPlugin.java @@ -0,0 +1,51 @@ +package org.gcube.common.storagehub.client.plugins; + +import javax.xml.transform.dom.DOMResult; +import javax.xml.ws.EndpointReference; + +import org.gcube.common.calls.jaxrs.GcubeService; +import org.gcube.common.calls.jaxrs.TargetFactory; +import org.gcube.common.clients.config.ProxyConfig; +import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; +import org.gcube.common.gxrest.response.entity.SerializableErrorEntityTextReader; +import org.gcube.common.storagehub.client.Constants; +import org.gcube.common.storagehub.client.MyInputStreamProvider; +import org.gcube.common.storagehub.client.proxies.DefaultUserManager; +import org.gcube.common.storagehub.client.proxies.UserManagerClient; +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.w3c.dom.Node; + +public class UserManagerPlugin extends AbstractPlugin { + + public UserManagerPlugin() { + super("storagehub/workspace"); + } + + @Override + public Exception convert(Exception e, ProxyConfig arg1) { + return e; + } + + @Override + public UserManagerClient newProxy(ProxyDelegate delegate) { + return new DefaultUserManager(delegate); + } + + @Override + public GXWebTargetAdapterRequest resolve(EndpointReference epr, ProxyConfig config) + throws Exception { + DOMResult result = new DOMResult(); + epr.writeTo(result); + Node node =result.getNode(); + Node child=node.getFirstChild(); + String address = child.getTextContent(); + //GXWebTargetAdapterRequest request = GXWebTargetAdapterRequest.newRequest(address).path(this.name).path("items"); + GcubeService service = GcubeService.service().withName(Constants.MANAGER_QNAME).andPath("users"); + GXWebTargetAdapterRequest requestAdapter = TargetFactory.stubFor(service).getAsGxRest(address); + requestAdapter.register(SerializableErrorEntityTextReader.class); + requestAdapter.register(MyInputStreamProvider.class); + requestAdapter.register(MultiPartFeature.class); + return requestAdapter; + } +} diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java new file mode 100644 index 0000000..b57d386 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java @@ -0,0 +1,199 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.util.List; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; + +import org.gcube.common.clients.Call; +import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; +import org.gcube.common.gxrest.response.inbound.GXInboundResponse; +import org.gcube.common.storagehub.model.acls.AccessType; +import org.gcube.common.storagehub.model.exceptions.BackendGenericError; +import org.gcube.common.storagehub.model.exceptions.StorageHubException; + +public class DefaultGroupManager implements GroupManagerClient { + +private final ProxyDelegate delegate; + + public DefaultGroupManager(ProxyDelegate delegate) { + this.delegate = delegate; + } + + @Override + public void addUserToGroup(String userId, String groupId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + MultivaluedMap formData = new MultivaluedHashMap(); + formData.add("userId", userId); + + GXInboundResponse response = myManager.path(groupId).put(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void removeUserFromGroup(String userId, String groupId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(groupId).path("users").path(userId).delete(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(Exception e) { + throw new RuntimeException(e); + } + + } + + @Override + public List getGroups() throws StorageHubException { + Call> call = new Call>() { + @Override + public List call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.get(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return response.getSource().readEntity(List.class); + } + }; + try { + List users = delegate.make(call); + return users; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void removeGroup(String groupId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(groupId).delete(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(Exception e) { + throw new RuntimeException(e); + } + + + } + + @Override + public void createGroup(String groupId, AccessType accessType) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + MultivaluedMap formData = new MultivaluedHashMap(); + formData.add("group", groupId); + formData.add("accessType", accessType); + + GXInboundResponse response = myManager.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(Exception e) { + throw new RuntimeException(e); + } + + } + + @Override + public List getUsersOfGroup(String groupId) throws StorageHubException { + Call> call = new Call>() { + @Override + public List call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(groupId).path("users").get(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return response.getSource().readEntity(List.class); + } + }; + try { + List users = delegate.make(call); + return users; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java new file mode 100644 index 0000000..6607b80 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java @@ -0,0 +1,110 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.util.List; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; + +import org.gcube.common.clients.Call; +import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; +import org.gcube.common.gxrest.response.inbound.GXInboundResponse; +import org.gcube.common.storagehub.model.exceptions.BackendGenericError; +import org.gcube.common.storagehub.model.exceptions.StorageHubException; + +public class DefaultUserManager implements UserManagerClient { + + private final ProxyDelegate delegate; + + public DefaultUserManager(ProxyDelegate delegate) { + this.delegate = delegate; + } + + @Override + public void addUser(String userId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + MultivaluedMap formData = new MultivaluedHashMap(); + formData.add("user", userId); + formData.add("password", userId+"pwd"); + + GXInboundResponse response = myManager.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void removeUser(String userId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(userId).delete(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public List getUsers() throws StorageHubException { + Call> call = new Call>() { + @Override + public List call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.get(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return response.getSource().readEntity(List.class); + } + }; + try { + List users = delegate.make(call); + return users; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java new file mode 100644 index 0000000..751827a --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java @@ -0,0 +1,21 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.util.List; + +import org.gcube.common.storagehub.model.acls.AccessType; +import org.gcube.common.storagehub.model.exceptions.StorageHubException; + +public interface GroupManagerClient { + + void addUserToGroup(String userId, String groupId) throws StorageHubException; + + void removeUserFromGroup(String userId, String groupId) throws StorageHubException; + + void removeGroup(String groupId) throws StorageHubException; + + void createGroup(String groupId, AccessType accessType) throws StorageHubException; + + List getUsersOfGroup(String groupId) throws StorageHubException; + + List getGroups() throws StorageHubException; +} diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java new file mode 100644 index 0000000..46412d6 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java @@ -0,0 +1,15 @@ +package org.gcube.common.storagehub.client.proxies; + +import java.util.List; + +import org.gcube.common.storagehub.model.exceptions.StorageHubException; + +public interface UserManagerClient { + + void addUser(String userId) throws StorageHubException; + + void removeUser(String userId) throws StorageHubException; + + List getUsers() throws StorageHubException; + +} From c036bb3d951c3c156528561df7c77c029c507f88 Mon Sep 17 00:00:00 2001 From: lucio Date: Mon, 14 Oct 2019 10:18:54 +0200 Subject: [PATCH 2/6] VREManager folder feature addded --- pom.xml | 2 +- .../client/dsl/FolderContainer.java | 4 +-- .../client/dsl/StorageHubClient.java | 12 ++++--- .../client/dsl/VREFolderManager.java | 36 +++++++++++++++++++ .../client/proxies/DefaultGroupManager.java | 24 ++++++++----- .../client/proxies/DefaultUserManager.java | 18 ++++++---- .../java/org/gcube/data/access/fs/Items.java | 15 ++++++-- .../org/gcube/data/access/fs/TestCall.java | 16 ++++++++- 8 files changed, 103 insertions(+), 24 deletions(-) create mode 100644 src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java diff --git a/pom.xml b/pom.xml index 3f79fe5..57e92a1 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ org.gcube.common storagehub-client-library - 1.0.7-SNAPSHOT + 1.0.8-SNAPSHOT storagehub-client-library diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java b/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java index fee5edd..97ef4d5 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/FolderContainer.java @@ -155,10 +155,10 @@ public class FolderContainer extends ItemContainer{ * @throws {@InvalidItemException} * @throws {@UserNotAuthorizedException} if user is not administrator of this folder */ - /*public FolderContainer changeAcls(String user, AccessType accessType) throws StorageHubException { + public FolderContainer changeAcls(String user, AccessType accessType) throws StorageHubException { itemclient.changeACL(this.itemId, user, accessType); return this; - }*/ + } public boolean canWrite() throws Exception { return itemclient.canWriteInto(this.itemId); diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java index 246f679..965e52b 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java @@ -1,6 +1,7 @@ package org.gcube.common.storagehub.client.dsl; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; +import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.exceptions.StorageHubException; @@ -10,6 +11,7 @@ public class StorageHubClient { private WorkspaceManagerClient wsClient = AbstractPlugin.workspace().build(); private ItemManagerClient itemclient = AbstractPlugin.item().build(); + private GroupManagerClient groupClient = AbstractPlugin.groups().build(); public FolderContainer getWSRoot(){ return new FolderContainer(itemclient, wsClient.getWorkspace()); @@ -28,11 +30,15 @@ public class StorageHubClient { public FolderContainer openVREFolder() { return new FolderContainer(itemclient, wsClient.getVreFolder()); } - + public ListResolver getVREFolders() { return new ListResolver((onlyType, includeHidden, excludes) -> wsClient.getVreFolders(excludes), itemclient); } + public VREFolderManager getVreFolderManager() { + return new VREFolderManager(wsClient, groupClient); + } + public FolderContainer openTrash() { return new FolderContainer(itemclient, wsClient.getTrashFolder()); } @@ -48,9 +54,7 @@ public class StorageHubClient { public long getTotalItemCount() { return wsClient.getTotalItemCount(); } - - - + public GenericItemContainer restoreThrashItem(String itemId) { return new GenericItemContainer(itemclient, wsClient.restoreFromTrash(itemId)); } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java new file mode 100644 index 0000000..4ac1b82 --- /dev/null +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java @@ -0,0 +1,36 @@ +package org.gcube.common.storagehub.client.dsl; + +import org.gcube.common.storagehub.client.proxies.GroupManagerClient; +import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; +import org.gcube.common.storagehub.model.Excludes; +import org.gcube.common.storagehub.model.exceptions.StorageHubException; +import org.gcube.common.storagehub.model.items.Item; + +public class VREFolderManager { + + private WorkspaceManagerClient wsClient; + private GroupManagerClient groupClient; + + public VREFolderManager(WorkspaceManagerClient wsClient, GroupManagerClient groupClient) { + super(); + this.wsClient = wsClient; + this.groupClient = groupClient; + } + + public void removeUser(String userId) throws StorageHubException{ + groupClient.removeUserFromGroup(userId, getVreFolder().getTitle()); + } + + public void addUser(String userId) throws StorageHubException{ + groupClient.addUserToGroup(userId, getVreFolder().getTitle()); + } + + public void getUsers() throws StorageHubException{ + getVreFolder(); + groupClient.getUsersOfGroup(getVreFolder().getTitle()); + } + + private Item getVreFolder() { + return wsClient.getVreFolder(Excludes.ALL.toArray(new String[0])); + } +} diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java index b57d386..93dafa0 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java @@ -48,8 +48,10 @@ private final ProxyDelegate delegate; try { delegate.make(call); return; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } @@ -75,8 +77,10 @@ private final ProxyDelegate delegate; try { delegate.make(call); return; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } @@ -103,8 +107,10 @@ private final ProxyDelegate delegate; try { List users = delegate.make(call); return users; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } @@ -130,8 +136,10 @@ private final ProxyDelegate delegate; try { delegate.make(call); return; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java index 6607b80..6da83a0 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java @@ -48,8 +48,10 @@ public class DefaultUserManager implements UserManagerClient { try { delegate.make(call); return; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } @@ -75,8 +77,10 @@ public class DefaultUserManager implements UserManagerClient { try { delegate.make(call); return; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } @@ -102,8 +106,10 @@ public class DefaultUserManager implements UserManagerClient { try { List users = delegate.make(call); return users; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } diff --git a/src/test/java/org/gcube/data/access/fs/Items.java b/src/test/java/org/gcube/data/access/fs/Items.java index 4f5813f..5404275 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -30,10 +30,21 @@ public class Items { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("9bec07ef-5d19-42ad-8a56-0af28c9b08ed-98187548"); - ScopeProvider.instance.set("/gcube"); + SecurityTokenProvider.instance.set("d9431600-9fef-41a7-946d-a5b402de30d6-98187548"); + ScopeProvider.instance.set("/gcube/devsec/devVRE"); } + @Test + public void removeUserFromVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + shc.getVreFolderManager().removeUser("andrea.rossi"); + } + + @Test + public void addUserFromVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + shc.getVreFolderManager().addUser("andrea.rossi"); + } @Test public void emptyStatisticaManagerTrash() { diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java index 2e0fc3f..eb079a7 100644 --- a/src/test/java/org/gcube/data/access/fs/TestCall.java +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -23,12 +23,14 @@ import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; +import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.Metadata; import org.gcube.common.storagehub.model.Paths; import org.gcube.common.storagehub.model.acls.ACL; import org.gcube.common.storagehub.model.acls.AccessType; +import org.gcube.common.storagehub.model.exceptions.StorageHubException; import org.gcube.common.storagehub.model.exceptions.UserNotAuthorizedException; import org.gcube.common.storagehub.model.expressions.GenericSearchableItem; import org.gcube.common.storagehub.model.expressions.OrderField; @@ -53,10 +55,22 @@ public class TestCall { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("b7c80297-e4ed-42ab-ab42-fdc0b8b0eabf-98187548"); + SecurityTokenProvider.instance.set("d9431600-9fef-41a7-946d-a5b402de30d6-98187548"); ScopeProvider.instance.set("/gcube"); } + @Test + public void removeUserFromGroup() throws StorageHubException { + GroupManagerClient client = AbstractPlugin.groups().build(); + client.removeUserFromGroup("andrea.rossi", "gcube-devsec-devVRE"); + } + + @Test + public void addUserToGroup() throws StorageHubException { + GroupManagerClient client = AbstractPlugin.groups().build(); + client.addUserToGroup("andrea.rossi", "gcube-devsec-devVRE"); + } + @Test(expected=UserNotAuthorizedException.class) public void createNotAuthorized() throws Exception{ ItemManagerClient itemclient = AbstractPlugin.item().build(); From 97321953980660ac19e9edc9eefc6eb83e930aee Mon Sep 17 00:00:00 2001 From: lucio Date: Wed, 15 Jan 2020 19:10:33 +0100 Subject: [PATCH 3/6] method for VRE Administrators management added --- pom.xml | 2 - .../client/dsl/StorageHubClient.java | 6 +- .../common/storagehub/client/dsl/Util.java | 11 +++ .../client/dsl/VREFolderManager.java | 31 +++++-- .../client/proxies/DefaultGroupManager.java | 90 ++++++++++++++++++- .../client/proxies/DefaultItemManager.java | 5 +- .../client/proxies/GroupManagerClient.java | 7 ++ .../client/proxies/ItemManagerClient.java | 6 +- .../java/org/gcube/data/access/fs/Items.java | 43 ++++++++- .../org/gcube/data/access/fs/TestCall.java | 7 +- 10 files changed, 184 insertions(+), 24 deletions(-) diff --git a/pom.xml b/pom.xml index 57e92a1..fafcb07 100644 --- a/pom.xml +++ b/pom.xml @@ -64,12 +64,10 @@ org.glassfish.jersey.media jersey-media-json-jackson - 2.24.1 org.glassfish.jersey.media jersey-media-multipart - 2.24.1 diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java index 965e52b..5a3ab59 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java @@ -35,8 +35,12 @@ public class StorageHubClient { return new ListResolver((onlyType, includeHidden, excludes) -> wsClient.getVreFolders(excludes), itemclient); } + public VREFolderManager getVreFolderManager(String vreTitle) { + return new VREFolderManager(wsClient, groupClient, vreTitle); + } + public VREFolderManager getVreFolderManager() { - return new VREFolderManager(wsClient, groupClient); + return new VREFolderManager(wsClient, groupClient, null); } public FolderContainer openTrash() { diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java b/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java index 35461c9..127d317 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/Util.java @@ -1,6 +1,10 @@ package org.gcube.common.storagehub.client.dsl; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.common.scope.impl.ScopeBean.Type; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.model.exceptions.BackendGenericError; import org.gcube.common.storagehub.model.items.AbstractFileItem; import org.gcube.common.storagehub.model.items.FolderItem; import org.gcube.common.storagehub.model.items.Item; @@ -14,4 +18,11 @@ public class Util { return new FolderContainer(itemClient, (FolderItem)item); else return new GenericItemContainer(itemClient, item); } + + public static String getVREGroupFromContext(String context) throws BackendGenericError{ + ScopeBean bean = new ScopeBean(context); + if (!bean.is(Type.VRE)) throw new BackendGenericError(context+ " is not a VRE context"); + String entireScopeName= bean.toString().replaceAll("^/(.*)/?$", "$1").replaceAll("/", "-"); + return entireScopeName; + } } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java index 4ac1b82..59506e6 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java @@ -1,5 +1,7 @@ package org.gcube.common.storagehub.client.dsl; +import java.util.List; + import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.Excludes; @@ -11,26 +13,41 @@ public class VREFolderManager { private WorkspaceManagerClient wsClient; private GroupManagerClient groupClient; - public VREFolderManager(WorkspaceManagerClient wsClient, GroupManagerClient groupClient) { + private String vreTitle; + + public VREFolderManager(WorkspaceManagerClient wsClient, GroupManagerClient groupClient, String vreTitle) { super(); this.wsClient = wsClient; this.groupClient = groupClient; + this.vreTitle = vreTitle; } public void removeUser(String userId) throws StorageHubException{ - groupClient.removeUserFromGroup(userId, getVreFolder().getTitle()); + groupClient.removeUserFromGroup(userId, vreTitle); } public void addUser(String userId) throws StorageHubException{ - groupClient.addUserToGroup(userId, getVreFolder().getTitle()); + groupClient.addUserToGroup(userId, vreTitle); } - public void getUsers() throws StorageHubException{ - getVreFolder(); - groupClient.getUsersOfGroup(getVreFolder().getTitle()); + public List getUsers() throws StorageHubException{ + return groupClient.getUsersOfGroup(vreTitle); } - + private Item getVreFolder() { return wsClient.getVreFolder(Excludes.ALL.toArray(new String[0])); } + + public void setAdmin(String userId) throws StorageHubException{ + groupClient.addAdmin(vreTitle, userId); + } + + public void removeAdmin(String userId) throws StorageHubException{ + groupClient.removeAdmin(vreTitle, userId); + } + + public List getAdmins() throws StorageHubException{ + return groupClient.getAdmins(vreTitle); + } + } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java index 93dafa0..90fe133 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java @@ -33,7 +33,7 @@ private final ProxyDelegate delegate; MultivaluedMap formData = new MultivaluedHashMap(); formData.add("userId", userId); - GXInboundResponse response = myManager.path(groupId).put(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + GXInboundResponse response = myManager.path(groupId).path("users").put(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); if (response.isErrorResponse()) { if (response.hasException()) @@ -204,4 +204,92 @@ private final ProxyDelegate delegate; } } + + + @Override + public void addAdmin(String groupId, String userId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + MultivaluedMap formData = new MultivaluedHashMap(); + formData.add("userId", userId); + + GXInboundResponse response = myManager.path(groupId).path("admins").put(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void removeAdmin(String groupId, String userId) throws StorageHubException { + Call call = new Call() { + @Override + public Void call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(groupId).path("admins").path(userId).delete(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return null; + } + }; + try { + delegate.make(call); + return; + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); + } + + } + + @Override + public List getAdmins(String groupId) throws StorageHubException { + Call> call = new Call>() { + @Override + public List call(GXWebTargetAdapterRequest manager) throws Exception { + GXWebTargetAdapterRequest myManager = manager; + + GXInboundResponse response = myManager.path(groupId).path("admins").get(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else + throw new BackendGenericError(); + } + + return response.getSource().readEntity(List.class); + } + }; + try { + List users = delegate.make(call); + return users; + }catch(Exception e) { + throw new RuntimeException(e); + } + } + } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java index c94daf8..c595645 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultItemManager.java @@ -1007,9 +1007,8 @@ public class DefaultItemManager implements ItemManagerClient { } -/* @Override - public String removeSharedFolderAdmin(String id, String user) throws StorageHubException { + public String removeAdmin(String id, String user) throws StorageHubException { Call call = new Call() { @Override public String call(GXWebTargetAdapterRequest manager) throws Exception { @@ -1041,7 +1040,7 @@ public class DefaultItemManager implements ItemManagerClient { }catch(Exception e1) { throw new RuntimeException(e1); } - }*/ + } @Override diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java index 751827a..f584769 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java @@ -18,4 +18,11 @@ public interface GroupManagerClient { List getUsersOfGroup(String groupId) throws StorageHubException; List getGroups() throws StorageHubException; + + void addAdmin(String groupId, String userId) throws StorageHubException; + + void removeAdmin(String groupId, String userId) throws StorageHubException; + + List getAdmins(String groupId) throws StorageHubException; + } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java index 0341cde..a27dcda 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/ItemManagerClient.java @@ -49,10 +49,8 @@ public interface ItemManagerClient { String changeACL(String id, String user, AccessType accessType) throws StorageHubException; - /* - String removeSharedFolderAdmin(String id, String user) throws StorageHubException; - */ - + String removeAdmin(String id, String user) throws StorageHubException; + @Deprecated void delete(String id) throws StorageHubException; diff --git a/src/test/java/org/gcube/data/access/fs/Items.java b/src/test/java/org/gcube/data/access/fs/Items.java index 5404275..7dee045 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -7,7 +7,9 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.nio.file.Files; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map.Entry; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; @@ -46,6 +48,27 @@ public class Items { shc.getVreFolderManager().addUser("andrea.rossi"); } + + @Test + public void getAdminsFromVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + for (String user: shc.getVreFolderManager().getAdmins()) { + System.out.println(user); + } + } + @Test + public void removeAdminsFromVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + shc.getVreFolderManager().removeAdmin("vfloros"); + + } + + @Test + public void addAdminToVRE() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + shc.getVreFolderManager().setAdmin("vfloros"); + } + @Test public void emptyStatisticaManagerTrash() { StorageHubClient shc = new StorageHubClient(); @@ -56,14 +79,26 @@ public class Items { public void forceDelete() throws Exception{ StorageHubClient shc = new StorageHubClient(); + /* + shc.getWSRoot().newFolder("lucioFolderTestMeta","desclucio" ); + HashMap prop = new HashMap<>(); + prop.put("folderProp", "test2"); + prop.put("folderProp2", "test2"); + */ + FolderContainer fc = shc.open("bfb0548b-92d0-47d4-a973-1253dc4694d1").asFolder(); + + List> children = fc.list().withMetadata().getContainers(); + + for (ItemContainer cont : children) { + Metadata m = cont.get().getMetadata(); + + for (Object v : m.getMap().values()) + System.out.println(v.toString()); + } - long count = shc.getTotalItemCount(); - long volume = shc.getTotalVolume(); - - System.out.println("items are "+count+" volume "+volume); } diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java index eb079a7..a0c6dd8 100644 --- a/src/test/java/org/gcube/data/access/fs/TestCall.java +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -25,6 +25,7 @@ import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.client.proxies.UserManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.Metadata; import org.gcube.common.storagehub.model.Paths; @@ -55,8 +56,8 @@ public class TestCall { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("d9431600-9fef-41a7-946d-a5b402de30d6-98187548"); - ScopeProvider.instance.set("/gcube"); + SecurityTokenProvider.instance.set("490eed48-dee3-478d-a856-cfb1132c1b92-843339462"); + ScopeProvider.instance.set("/d4science.research-infrastructures.eu"); } @Test @@ -325,6 +326,8 @@ public class TestCall { boolean b = m.find(); System.out.println("result: "+!b); } + + /* private InputStream getThumbnailAsPng(ImagePlus img, int thumbWidth, int thumbHeight) throws IOException { From 9de1e4ad59bca9ec65727d6af50091992e87ed1a Mon Sep 17 00:00:00 2001 From: lucio Date: Thu, 16 Jan 2020 18:11:46 +0100 Subject: [PATCH 4/6] user management method added --- .../client/dsl/StorageHubClient.java | 9 ++ .../client/dsl/VREFolderManager.java | 15 ++- .../client/proxies/DefaultGroupManager.java | 94 +++++++++++++------ .../client/proxies/DefaultUserManager.java | 2 +- .../client/proxies/GroupManagerClient.java | 2 +- .../client/proxies/UserManagerClient.java | 2 +- .../java/org/gcube/data/access/fs/Items.java | 22 ++++- 7 files changed, 109 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java index 5a3ab59..fcc12ab 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/StorageHubClient.java @@ -3,6 +3,7 @@ package org.gcube.common.storagehub.client.dsl; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; +import org.gcube.common.storagehub.client.proxies.UserManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; import org.gcube.common.storagehub.model.exceptions.StorageHubException; import org.gcube.common.storagehub.model.items.Item; @@ -12,6 +13,7 @@ public class StorageHubClient { private WorkspaceManagerClient wsClient = AbstractPlugin.workspace().build(); private ItemManagerClient itemclient = AbstractPlugin.item().build(); private GroupManagerClient groupClient = AbstractPlugin.groups().build(); + private UserManagerClient userClient = AbstractPlugin.users().build(); public FolderContainer getWSRoot(){ return new FolderContainer(itemclient, wsClient.getWorkspace()); @@ -63,4 +65,11 @@ public class StorageHubClient { return new GenericItemContainer(itemclient, wsClient.restoreFromTrash(itemId)); } + public void createUserAccount(String userId) throws StorageHubException { + userClient.createUser(userId); + } + + public void deleteUserAccount(String userId) throws StorageHubException { + userClient.removeUser(userId); + } } diff --git a/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java index 59506e6..e62c3b1 100644 --- a/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/dsl/VREFolderManager.java @@ -4,9 +4,8 @@ import java.util.List; import org.gcube.common.storagehub.client.proxies.GroupManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; -import org.gcube.common.storagehub.model.Excludes; +import org.gcube.common.storagehub.model.acls.AccessType; import org.gcube.common.storagehub.model.exceptions.StorageHubException; -import org.gcube.common.storagehub.model.items.Item; public class VREFolderManager { @@ -34,9 +33,9 @@ public class VREFolderManager { return groupClient.getUsersOfGroup(vreTitle); } - private Item getVreFolder() { + /*private Item getVreFolder() { return wsClient.getVreFolder(Excludes.ALL.toArray(new String[0])); - } + }*/ public void setAdmin(String userId) throws StorageHubException{ groupClient.addAdmin(vreTitle, userId); @@ -49,5 +48,13 @@ public class VREFolderManager { public List getAdmins() throws StorageHubException{ return groupClient.getAdmins(vreTitle); } + + public void createVRE(AccessType accessType, String folderOwner) throws StorageHubException{ + groupClient.createGroup(vreTitle, accessType, folderOwner); + } + + public void removeVRE() throws StorageHubException{ + groupClient.removeGroup(vreTitle); + } } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java index 90fe133..6adddba 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java @@ -14,6 +14,8 @@ import org.gcube.common.gxrest.response.inbound.GXInboundResponse; import org.gcube.common.storagehub.model.acls.AccessType; import org.gcube.common.storagehub.model.exceptions.BackendGenericError; import org.gcube.common.storagehub.model.exceptions.StorageHubException; +import org.gcube.common.storagehub.model.exceptions.UserNotAuthorizedException; +import org.glassfish.jersey.media.multipart.FormDataMultiPart; public class DefaultGroupManager implements GroupManagerClient { @@ -38,10 +40,13 @@ private final ProxyDelegate delegate; if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } + return null; } }; @@ -63,11 +68,13 @@ private final ProxyDelegate delegate; GXWebTargetAdapterRequest myManager = manager; GXInboundResponse response = myManager.path(groupId).path("users").path(userId).delete(); - + if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } @@ -97,10 +104,13 @@ private final ProxyDelegate delegate; if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } + return response.getSource().readEntity(List.class); } }; @@ -126,10 +136,13 @@ private final ProxyDelegate delegate; if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } + return null; } }; @@ -146,33 +159,42 @@ private final ProxyDelegate delegate; } @Override - public void createGroup(String groupId, AccessType accessType) throws StorageHubException { + public void createGroup(String groupId, AccessType accessType, String folderOwner) throws StorageHubException { Call call = new Call() { @Override public Void call(GXWebTargetAdapterRequest manager) throws Exception { GXWebTargetAdapterRequest myManager = manager; - MultivaluedMap formData = new MultivaluedHashMap(); - formData.add("group", groupId); - formData.add("accessType", accessType); - - GXInboundResponse response = myManager.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); + try (FormDataMultiPart multipart = new FormDataMultiPart()){ + multipart.field("accessType", accessType, MediaType.APPLICATION_JSON_TYPE); + multipart.field("group", groupId); + multipart.field("folderOwner", folderOwner); + + + GXInboundResponse response = myManager.post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE)); - if (response.isErrorResponse()) { - if (response.hasException()) - throw response.getException(); - else - throw new BackendGenericError(); + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else + throw new BackendGenericError(); + } + + } - + return null; } }; try { delegate.make(call); return; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } @@ -189,18 +211,23 @@ private final ProxyDelegate delegate; if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } + return response.getSource().readEntity(List.class); } }; try { List users = delegate.make(call); return users; - }catch(Exception e) { - throw new RuntimeException(e); + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); } } @@ -221,18 +248,23 @@ private final ProxyDelegate delegate; if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } + return null; } }; try { delegate.make(call); - }catch(Exception e) { - throw new RuntimeException(e); - } + }catch(StorageHubException e) { + throw e; + }catch(Exception e1) { + throw new RuntimeException(e1); + } } @Override @@ -247,10 +279,13 @@ private final ProxyDelegate delegate; if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } + return null; } }; @@ -277,10 +312,13 @@ private final ProxyDelegate delegate; if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + else throw new BackendGenericError(); } + return response.getSource().readEntity(List.class); } }; diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java index 6da83a0..d98294e 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java @@ -23,7 +23,7 @@ public class DefaultUserManager implements UserManagerClient { } @Override - public void addUser(String userId) throws StorageHubException { + public void createUser(String userId) throws StorageHubException { Call call = new Call() { @Override public Void call(GXWebTargetAdapterRequest manager) throws Exception { diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java index f584769..aa066bc 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/GroupManagerClient.java @@ -13,7 +13,7 @@ public interface GroupManagerClient { void removeGroup(String groupId) throws StorageHubException; - void createGroup(String groupId, AccessType accessType) throws StorageHubException; + void createGroup(String groupId, AccessType accessType, String folderOwner) throws StorageHubException; List getUsersOfGroup(String groupId) throws StorageHubException; diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java index 46412d6..a577eac 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/UserManagerClient.java @@ -6,7 +6,7 @@ import org.gcube.common.storagehub.model.exceptions.StorageHubException; public interface UserManagerClient { - void addUser(String userId) throws StorageHubException; + void createUser(String userId) throws StorageHubException; void removeUser(String userId) throws StorageHubException; diff --git a/src/test/java/org/gcube/data/access/fs/Items.java b/src/test/java/org/gcube/data/access/fs/Items.java index 7dee045..30fde10 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -19,6 +19,7 @@ import org.gcube.common.storagehub.client.dsl.FileContainer; import org.gcube.common.storagehub.client.dsl.FolderContainer; import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.StorageHubClient; +import org.gcube.common.storagehub.client.dsl.VREFolderManager; import org.gcube.common.storagehub.model.Metadata; import org.gcube.common.storagehub.model.acls.AccessType; import org.gcube.common.storagehub.model.exceptions.StorageHubException; @@ -26,16 +27,32 @@ import org.gcube.common.storagehub.model.items.Item; import org.junit.BeforeClass; import org.junit.Test; +import ch.qos.logback.classic.pattern.Util; + public class Items { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("d9431600-9fef-41a7-946d-a5b402de30d6-98187548"); - ScopeProvider.instance.set("/gcube/devsec/devVRE"); + SecurityTokenProvider.instance.set("b7c80297-e4ed-42ab-ab42-fdc0b8b0eabf-98187548"); + ScopeProvider.instance.set("/gcube"); } + @Test + public void allRound() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + VREFolderManager vreFolderMaanger = shc.getVreFolderManager(org.gcube.common.storagehub.client.dsl.Util.getVREGroupFromContext("/gcube/devsec/devVreLucio")); + vreFolderMaanger.createVRE(AccessType.READ_ONLY, "lucio.lelii"); + /*vreFolderMaanger.addUser("lucio.lelii"); + vreFolderMaanger.addUser("massimiliano.assante"); + vreFolderMaanger.setAdmin("massimiliano.assante");*/ + vreFolderMaanger.removeVRE(); + + + } + + @Test public void removeUserFromVRE() throws StorageHubException { StorageHubClient shc = new StorageHubClient(); @@ -61,6 +78,7 @@ public class Items { StorageHubClient shc = new StorageHubClient(); shc.getVreFolderManager().removeAdmin("vfloros"); + } @Test From b56206b1e4737732f93a84f9450fd4de2f095030 Mon Sep 17 00:00:00 2001 From: lucio Date: Wed, 22 Jan 2020 16:59:54 +0100 Subject: [PATCH 5/6] User and Group management method upgrade --- .../client/proxies/DefaultGroupManager.java | 10 ++--- .../client/proxies/DefaultUserManager.java | 41 +++++++++++++------ .../java/org/gcube/data/access/fs/Items.java | 8 ++++ 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java index 6adddba..55c3b5e 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultGroupManager.java @@ -41,7 +41,7 @@ private final ProxyDelegate delegate; if (response.hasException()) throw response.getException(); else if (response.getHTTPCode()==403) - throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); else throw new BackendGenericError(); } @@ -73,7 +73,7 @@ private final ProxyDelegate delegate; if (response.hasException()) throw response.getException(); else if (response.getHTTPCode()==403) - throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); else throw new BackendGenericError(); } @@ -105,7 +105,7 @@ private final ProxyDelegate delegate; if (response.hasException()) throw response.getException(); else if (response.getHTTPCode()==403) - throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); else throw new BackendGenericError(); } @@ -137,7 +137,7 @@ private final ProxyDelegate delegate; if (response.hasException()) throw response.getException(); else if (response.getHTTPCode()==403) - throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); else throw new BackendGenericError(); } @@ -177,7 +177,7 @@ private final ProxyDelegate delegate; if (response.hasException()) throw response.getException(); else if (response.getHTTPCode()==403) - throw new UserNotAuthorizedException("the call to this methdo is not allowed for the user"); + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); else throw new BackendGenericError(); } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java index d98294e..8441c12 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultUserManager.java @@ -13,11 +13,12 @@ import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; import org.gcube.common.gxrest.response.inbound.GXInboundResponse; import org.gcube.common.storagehub.model.exceptions.BackendGenericError; import org.gcube.common.storagehub.model.exceptions.StorageHubException; +import org.gcube.common.storagehub.model.exceptions.UserNotAuthorizedException; public class DefaultUserManager implements UserManagerClient { private final ProxyDelegate delegate; - + public DefaultUserManager(ProxyDelegate delegate) { this.delegate = delegate; } @@ -32,16 +33,19 @@ public class DefaultUserManager implements UserManagerClient { MultivaluedMap formData = new MultivaluedHashMap(); formData.add("user", userId); formData.add("password", userId+"pwd"); - + GXInboundResponse response = myManager.post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); + else throw new BackendGenericError(); } + return null; } }; @@ -62,13 +66,21 @@ public class DefaultUserManager implements UserManagerClient { public Void call(GXWebTargetAdapterRequest manager) throws Exception { GXWebTargetAdapterRequest myManager = manager; - GXInboundResponse response = myManager.path(userId).delete(); - - if (response.isErrorResponse()) { - if (response.hasException()) - throw response.getException(); - else - throw new BackendGenericError(); + try { + + GXInboundResponse response = myManager.path(userId).delete(); + + if (response.isErrorResponse()) { + if (response.hasException()) + throw response.getException(); + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); + else + throw new BackendGenericError(); + } + }catch (Exception e) { + e.printStackTrace(); + throw e; } return null; @@ -92,14 +104,17 @@ public class DefaultUserManager implements UserManagerClient { GXWebTargetAdapterRequest myManager = manager; GXInboundResponse response = myManager.get(); - + if (response.isErrorResponse()) { if (response.hasException()) throw response.getException(); - else + else if (response.getHTTPCode()==403) + throw new UserNotAuthorizedException("the call to this method is not allowed for the user"); + else throw new BackendGenericError(); } + return response.getSource().readEntity(List.class); } }; @@ -112,5 +127,5 @@ public class DefaultUserManager implements UserManagerClient { throw new RuntimeException(e1); } } - + } diff --git a/src/test/java/org/gcube/data/access/fs/Items.java b/src/test/java/org/gcube/data/access/fs/Items.java index 30fde10..116f10e 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -52,6 +52,14 @@ public class Items { } + @Test + public void creteAndREmoveUser() throws StorageHubException { + StorageHubClient shc = new StorageHubClient(); + shc.createUserAccount("giorgino"); + shc.deleteUserAccount("giorgino"); + + + } @Test public void removeUserFromVRE() throws StorageHubException { From ba16c199e885b8944511b10a195482de50b8a5c1 Mon Sep 17 00:00:00 2001 From: lucio Date: Wed, 22 Jan 2020 17:05:20 +0100 Subject: [PATCH 6/6] prepared for release --- pom.xml | 6 +++--- src/test/java/org/gcube/data/access/fs/AddUserToVRes.java | 2 +- src/test/java/org/gcube/data/access/fs/Items.java | 6 ++---- src/test/java/org/gcube/data/access/fs/TestCall.java | 3 +-- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index fafcb07..47d4894 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ org.gcube.common storagehub-client-library - 1.0.8-SNAPSHOT + 1.0.8 storagehub-client-library @@ -54,7 +54,7 @@ org.gcube.common storagehub-model - [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + [1.0.0,2.0.0-SNAPSHOT) com.fasterxml.jackson.jaxrs @@ -77,7 +77,7 @@ org.gcube.common common-jaxrs-client - [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + [1.0.0,2.0.0-SNAPSHOT) diff --git a/src/test/java/org/gcube/data/access/fs/AddUserToVRes.java b/src/test/java/org/gcube/data/access/fs/AddUserToVRes.java index 6aaa4f4..3eab5b0 100644 --- a/src/test/java/org/gcube/data/access/fs/AddUserToVRes.java +++ b/src/test/java/org/gcube/data/access/fs/AddUserToVRes.java @@ -75,7 +75,7 @@ public class AddUserToVRes { @Test public void add() throws Exception{ String group = "pred4s-preprod-preVRE"; - URL addGroupUrl = new URL("http://storagehub.pre.d4science.net/storagehub/workspace/groups/"+group+"?gcube-token=a6cec25b-3844-4901-83f3-95eee83319ba-980114272"); + URL addGroupUrl = new URL("http://storagehub.pre.d4science.net/storagehub/workspace/groups/"+group+"?gcube-token="); for (String user : PRE_VRE) { try { diff --git a/src/test/java/org/gcube/data/access/fs/Items.java b/src/test/java/org/gcube/data/access/fs/Items.java index 116f10e..3cc3214 100644 --- a/src/test/java/org/gcube/data/access/fs/Items.java +++ b/src/test/java/org/gcube/data/access/fs/Items.java @@ -35,9 +35,8 @@ public class Items { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("b7c80297-e4ed-42ab-ab42-fdc0b8b0eabf-98187548"); - ScopeProvider.instance.set("/gcube"); } + @Test public void allRound() throws StorageHubException { @@ -55,8 +54,7 @@ public class Items { @Test public void creteAndREmoveUser() throws StorageHubException { StorageHubClient shc = new StorageHubClient(); - shc.createUserAccount("giorgino"); - shc.deleteUserAccount("giorgino"); + shc.getVreFolderManager("gcube-devsec-devVRE").addUser("gCat"); } diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java index a0c6dd8..cfd771b 100644 --- a/src/test/java/org/gcube/data/access/fs/TestCall.java +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -56,8 +56,7 @@ public class TestCall { @BeforeClass public static void setUp(){ - SecurityTokenProvider.instance.set("490eed48-dee3-478d-a856-cfb1132c1b92-843339462"); - ScopeProvider.instance.set("/d4science.research-infrastructures.eu"); + } @Test