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 f515c31..67a1eaa 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 @@ -31,4 +31,5 @@ public interface AuthorizationProxy { List getPolicies(String context) throws Exception; String generateApiKey(String apiQualifier) 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 fdda7e8..7525e67 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 @@ -54,7 +54,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { @Override public String generateToken(ClientInfo client, String context) throws Exception { - String methodPath = "/generate/"; + String methodPath = "/token/"; if (client instanceof UserInfo) methodPath+="user"; @@ -89,15 +89,15 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { return token; } + @Override public String generateApiKey(String apiQualifier) throws Exception { - String methodPath = String.format("/generate/apikey/%s",apiQualifier); - AuthorizationEntry entry = this.get(SecurityTokenProvider.instance.get()); + String methodPath = String.format("/apikey?qualifier=%s",apiQualifier); - int infrastructureHash = getInfrastructureHashfromContext(entry.getContext()); + int infrastructureHash = getInfrastructureHashFromToken(SecurityTokenProvider.instance.get()); StringBuilder callUrl = new StringBuilder(getInternalEnpoint(infrastructureHash)).append(methodPath); @@ -133,6 +133,8 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { } private int getInfrastructureHashFromToken(String token) { + if (token==null) + throw new RuntimeException("valid token required for this method"); try{ String hashCodeAsString = token.split(TOKEN_SEPARATOR)[1]; return Integer.parseInt(hashCodeAsString); @@ -182,7 +184,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { if (cache.containsKey(token) && cache.get(token).isValid()) return cache.get(token).getEntry(); - final String methodPath = "/retrieve/"; + final String methodPath = "/token/"; StringBuilder callUrl = new StringBuilder(getInternalEnpoint(getInfrastructureHashFromToken(token))).append(methodPath).append(token); @@ -190,7 +192,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy { HttpURLConnection connection = makeRequest(url, "GET", false); connection.setDoInput(true); if (connection.getResponseCode()==404) throw new ObjectNotFound("token "+token+" not found"); - if (connection.getResponseCode()!=200) throw new Exception("error contacting authorization service"); + if (connection.getResponseCode()!=200) throw new Exception("error contacting authorization service (error code is "+connection.getResponseCode()+")"); if (connection.getContentLengthLong()<=0) return null; try(InputStream stream = (InputStream)connection.getContent();){ 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 b096097..4fad5c8 100644 --- a/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java +++ b/src/test/java/org/gcube/common/authorizationservice/cl/CallTest.java @@ -5,6 +5,8 @@ import static org.gcube.common.authorization.client.Constants.authorizationServi import java.util.ArrayList; import java.util.List; +import javax.annotation.Generated; + import org.gcube.common.authorization.client.exceptions.ObjectNotFound; import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.common.authorization.library.policies.Action; @@ -12,27 +14,15 @@ import org.gcube.common.authorization.library.policies.Policy; import org.gcube.common.authorization.library.policies.ServiceAccess; import org.gcube.common.authorization.library.policies.User2ServicePolicy; import org.gcube.common.authorization.library.policies.Users; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.authorization.library.provider.UserInfo; import org.junit.Test; public class CallTest { - @Test - public void call() throws Exception{ - try{ - AuthorizationEntry entry = authorizationService().get("f068c06b-dad9-4007-a3c6-020560116a59|98187548"); - - System.out.println(entry); - }catch(ObjectNotFound onf){ - onf.printStackTrace(); - } - } - @Test public void requestToken() throws Exception { - - System.out.println( authorizationService().generateToken(new UserInfo("valentina.marioli", new ArrayList()), "/gcube")); - + System.out.println(requestTestToken("/gcube")); } @Test @@ -52,4 +42,28 @@ public class CallTest { public void removePolicy() throws Exception { authorizationService().removePolicies(2, 3, 4); } + + @Test(expected=RuntimeException.class) + public void createKeyWithError() throws Exception { + authorizationService().generateApiKey("TEST"); + } + + @Test + public void createKey() throws Exception { + String token = requestTestToken("/gcube"); + SecurityTokenProvider.instance.set(token); + String key = authorizationService().generateApiKey("TEST"); + System.out.println("key : "+key); + System.out.println(resolveToken(key)); + } + + + private String requestTestToken(String context) throws Exception{ + return authorizationService().generateToken(new UserInfo("test.token", new ArrayList()), context); + } + + private AuthorizationEntry resolveToken(String token) throws Exception{ + AuthorizationEntry entry = authorizationService().get(token); + return entry; + } }