From 6d6bd2daa0ee3fdf7b59a9ba20bcb2fad63b045e Mon Sep 17 00:00:00 2001 From: lucio Date: Mon, 7 Oct 2019 09:19:54 +0200 Subject: [PATCH] setRoles on a token added --- pom.xml | 2 +- .../common/authorization/client/Binder.java | 3 +- .../client/proxy/AuthorizationProxy.java | 2 ++ .../proxy/DefaultAuthorizationProxy.java | 30 +++++++++++++++++++ .../authorizationservice/cl/CallTest.java | 9 ++++-- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 1fa7624..1cbfb84 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.gcube.common authorization-client - 2.0.4-SNAPSHOT + 2.0.5-SNAPSHOT authorization service client library diff --git a/src/main/java/org/gcube/common/authorization/client/Binder.java b/src/main/java/org/gcube/common/authorization/client/Binder.java index 86bf8c5..4519be3 100644 --- a/src/main/java/org/gcube/common/authorization/client/Binder.java +++ b/src/main/java/org/gcube/common/authorization/client/Binder.java @@ -12,6 +12,7 @@ import org.gcube.common.authorization.library.policies.Policy; import org.gcube.common.authorization.library.provider.ClientInfo; import org.gcube.common.authorization.library.provider.ServiceInfo; import org.gcube.common.authorization.library.provider.UserInfo; +import org.gcube.common.authorization.library.utils.ListMapper; public class Binder { @@ -20,7 +21,7 @@ public class Binder { public static JAXBContext getContext() throws JAXBException{ if (context==null) context = JAXBContext.newInstance(ExternalServiceList.class, QualifiersList.class, AuthorizationEntry.class, ClientInfo.class, UserInfo.class, - ServiceInfo.class, Policies.class, Policy.class); + ServiceInfo.class, Policies.class, Policy.class, ListMapper.class); return context; } diff --git a/src/main/java/org/gcube/common/authorization/client/proxy/AuthorizationProxy.java b/src/main/java/org/gcube/common/authorization/client/proxy/AuthorizationProxy.java index f952a1e..7f006ed 100644 --- a/src/main/java/org/gcube/common/authorization/client/proxy/AuthorizationProxy.java +++ b/src/main/java/org/gcube/common/authorization/client/proxy/AuthorizationProxy.java @@ -51,5 +51,7 @@ public interface AuthorizationProxy { Map retrieveExternalServiceGenerated() throws Exception; void removeAllReleatedToken(String clientId, String context) throws Exception; + + void setTokenRoles(String token, List roles) throws Exception; } diff --git a/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java b/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java index ddac43c..5217be6 100644 --- a/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java +++ b/src/main/java/org/gcube/common/authorization/client/proxy/DefaultAuthorizationProxy.java @@ -36,6 +36,7 @@ import org.gcube.common.authorization.library.provider.ContainerInfo; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.ServiceInfo; import org.gcube.common.authorization.library.provider.UserInfo; +import org.gcube.common.authorization.library.utils.ListMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -185,7 +186,36 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { return Utils.addInfrastructureHashToToken(token, infrastructureHash); } + + @Override + public void setTokenRoles(String token, List roles) throws Exception { + String realToken = Utils.getRealToken(token); + String methodPath = String.format("/token/user/%s/roles",realToken); + + int infrastructureHash = Utils.getInfrastructureHashFromToken(token, endpoints.getDefaultInfrastructure()); + + StringBuilder callUrl = new StringBuilder(getInternalEnpoint(infrastructureHash)).append(methodPath); + + URL url = new URL(callUrl.toString()); + HttpURLConnection connection = makeRequest(url, "PUT", false); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setRequestProperty("Content-type", "application/xml"); + + ListMapper listmapper = new ListMapper(); + listmapper.setList(roles); + try(OutputStream os = new BufferedOutputStream(connection.getOutputStream())){ + Binder.getContext().createMarshaller().marshal(listmapper, os); + } + + log.debug("response code for "+callUrl.toString()+" is "+connection.getResponseCode()+" "+connection.getResponseMessage()); + + if (connection.getResponseCode()!=200) throw new Exception("error contacting authorization service"); + + } + + @Override public void removeAllReleatedToken(String clientId, String context) throws Exception{ String methodPath = "/token/user"; diff --git a/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java b/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java index 5a85f69..c6dc478 100644 --- a/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java +++ b/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java @@ -8,6 +8,8 @@ import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStreamReader; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -25,7 +27,7 @@ import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.UserInfo; import org.junit.Ignore; import org.junit.Test; -@Ignore + public class CallTest { @Test @@ -35,7 +37,10 @@ public class CallTest { @Test public void requestUserTokenViaUserNameAndScope() throws Exception { - System.out.println(authorizationService().resolveTokenByUserAndContext("valentina.marioli", "/gcube/devNext/NextNext")); + String token = authorizationService().resolveTokenByUserAndContext("valentina.marioli", "/gcube"); + authorizationService().setTokenRoles(token, Arrays.asList("VOManager")); + AuthorizationEntry authEntry = authorizationService().get(token); + System.out.println(authEntry.getClientInfo().toString()); } @Test