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 ad56b12..86bf8c5 100644 --- a/src/main/java/org/gcube/common/authorization/client/Binder.java +++ b/src/main/java/org/gcube/common/authorization/client/Binder.java @@ -5,6 +5,7 @@ import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import org.gcube.common.authorization.library.AuthorizationEntry; +import org.gcube.common.authorization.library.ExternalServiceList; import org.gcube.common.authorization.library.Policies; import org.gcube.common.authorization.library.QualifiersList; import org.gcube.common.authorization.library.policies.Policy; @@ -18,7 +19,7 @@ public class Binder { public static JAXBContext getContext() throws JAXBException{ if (context==null) - context = JAXBContext.newInstance(QualifiersList.class, AuthorizationEntry.class, ClientInfo.class, UserInfo.class, + context = JAXBContext.newInstance(ExternalServiceList.class, QualifiersList.class, AuthorizationEntry.class, ClientInfo.class, UserInfo.class, ServiceInfo.class, Policies.class, Policy.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 235e773..57910ef 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 @@ -47,5 +47,7 @@ public interface AuthorizationProxy { String generateExternalServiceToken(String serviceId) throws Exception; + + Map retrieveExternalServiceGenerated() 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 bf6f080..899a853 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 @@ -24,6 +24,7 @@ import org.gcube.common.authorization.client.Binder; import org.gcube.common.authorization.client.Constants; import org.gcube.common.authorization.client.exceptions.ObjectNotFound; import org.gcube.common.authorization.library.AuthorizationEntry; +import org.gcube.common.authorization.library.ExternalServiceList; import org.gcube.common.authorization.library.Policies; import org.gcube.common.authorization.library.QualifiersList; import org.gcube.common.authorization.library.enpoints.AuthorizationEndpoint; @@ -236,7 +237,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { connection.setDoOutput(true); if (connection.getResponseCode()!=200) throw new Exception("error retrieving keys (error code is "+connection.getResponseCode()+")"); - if (connection.getContentLengthLong()<=0) return Collections.emptyMap(); + if (connection.getContentLengthLong()==0) return Collections.emptyMap(); Map tokensQulifiersMap; try(InputStream stream = (InputStream)connection.getContent();){ @@ -252,7 +253,41 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { } else return Collections.emptyMap(); } + + @Override + /** + * return a map with key external service id and value token + */ + public Map retrieveExternalServiceGenerated() throws Exception{ + String methodPath = "/token/external"; + int infrastructureHash = Utils.getInfrastructureHashFromToken(SecurityTokenProvider.instance.get(), endpoints.getDefaultInfrastructure()); + + + StringBuilder callUrl = new StringBuilder(getInternalEnpoint(infrastructureHash)).append(methodPath); + + URL url = new URL(callUrl.toString()); + HttpURLConnection connection = makeRequest(url, "GET", true); + connection.setDoInput(true); + connection.setDoOutput(true); + + if (connection.getResponseCode()!=200) throw new Exception("error retrieving externalServices (error code is "+connection.getResponseCode()+")"); + if (connection.getContentLengthLong()==0) return Collections.emptyMap(); + + Map externalServiceMap; + try(InputStream stream = (InputStream)connection.getContent();){ + ExternalServiceList entries = (ExternalServiceList)Binder.getContext().createUnmarshaller().unmarshal(stream); + externalServiceMap = entries.getExternalServiceMap(); + } + + if (externalServiceMap!=null && !externalServiceMap.isEmpty()){ + Map toReturnMap = new HashMap(); + for (Entry entry: externalServiceMap.entrySet()) + toReturnMap.put(entry.getKey(), Utils.addInfrastructureHashToToken(entry.getValue(), infrastructureHash)); + return toReturnMap; + } else return Collections.emptyMap(); + + } @Override public String requestActivation(ContainerInfo container, String context) throws Exception {