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