From eb8aa51a007af6c879df39f84d45407ebbec28cf Mon Sep 17 00:00:00 2001 From: lucio Date: Thu, 10 Oct 2019 18:19:34 +0200 Subject: [PATCH] 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; + +}