git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/Common/authorization-common-client@129385 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
e09f53b3b5
commit
01d1a84dd9
15
pom.xml
15
pom.xml
|
@ -12,6 +12,18 @@
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.distribution</groupId>
|
||||||
|
<artifactId>gcube-bom</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<distroDirectory>distro</distroDirectory>
|
<distroDirectory>distro</distroDirectory>
|
||||||
</properties>
|
</properties>
|
||||||
|
@ -20,19 +32,16 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.common</groupId>
|
<groupId>org.gcube.common</groupId>
|
||||||
<artifactId>common-authorization</artifactId>
|
<artifactId>common-authorization</artifactId>
|
||||||
<version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.core</groupId>
|
<groupId>org.gcube.core</groupId>
|
||||||
<artifactId>common-encryption</artifactId>
|
<artifactId>common-encryption</artifactId>
|
||||||
<version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<version>1.7.5</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.gcube.common.authorization.client.proxy;
|
package org.gcube.common.authorization.client.proxy;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
|
import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
|
||||||
import org.gcube.common.authorization.library.AuthorizationEntry;
|
import org.gcube.common.authorization.library.AuthorizationEntry;
|
||||||
|
@ -11,9 +12,9 @@ import org.gcube.common.authorization.library.provider.ServiceInfo;
|
||||||
|
|
||||||
public interface AuthorizationProxy {
|
public interface AuthorizationProxy {
|
||||||
|
|
||||||
AuthorizationEndpoint getEndpoint();
|
AuthorizationEndpoint getEndpoint(int infrastructureHash);
|
||||||
|
|
||||||
void setEndpoint(AuthorizationEndpoint endpoint);
|
void setEndpoint(Map<Integer,AuthorizationEndpoint> endpoints);
|
||||||
|
|
||||||
AuthorizationEntry get(String token) throws ObjectNotFound, Exception;
|
AuthorizationEntry get(String token) throws ObjectNotFound, Exception;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
import org.gcube.common.authorization.client.Binder;
|
import org.gcube.common.authorization.client.Binder;
|
||||||
import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
|
import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
|
||||||
|
@ -23,6 +23,7 @@ import org.gcube.common.authorization.library.enpoints.AuthorizationEndpoint;
|
||||||
import org.gcube.common.authorization.library.enpoints.AuthorizationEndpointScanner;
|
import org.gcube.common.authorization.library.enpoints.AuthorizationEndpointScanner;
|
||||||
import org.gcube.common.authorization.library.policies.Policy;
|
import org.gcube.common.authorization.library.policies.Policy;
|
||||||
import org.gcube.common.authorization.library.provider.ClientInfo;
|
import org.gcube.common.authorization.library.provider.ClientInfo;
|
||||||
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
import org.gcube.common.authorization.library.provider.ServiceInfo;
|
import org.gcube.common.authorization.library.provider.ServiceInfo;
|
||||||
import org.gcube.common.authorization.library.provider.UserInfo;
|
import org.gcube.common.authorization.library.provider.UserInfo;
|
||||||
import org.gcube.common.encryption.StringEncrypter;
|
import org.gcube.common.encryption.StringEncrypter;
|
||||||
|
@ -33,18 +34,19 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
|
|
||||||
private static Logger log = LoggerFactory.getLogger(AuthorizationProxy.class);
|
private static Logger log = LoggerFactory.getLogger(AuthorizationProxy.class);
|
||||||
|
|
||||||
private static Map<String, AuthorizationEntryCache> cache = new ConcurrentHashMap<String, AuthorizationEntryCache>();
|
private static Map<String, AuthorizationEntryCache> cache = Collections.synchronizedMap(new WeakHashMap<String, AuthorizationEntryCache>());
|
||||||
|
|
||||||
private List<AuthorizationEndpoint> endpoints;
|
private Map<Integer, AuthorizationEndpoint> endpoints;
|
||||||
|
|
||||||
|
private static final String TOKEN_SEPARATOR ="|";
|
||||||
|
|
||||||
public DefaultAuthorizationProxy() {
|
public DefaultAuthorizationProxy() {
|
||||||
endpoints = AuthorizationEndpointScanner.endpoints();
|
endpoints = AuthorizationEndpointScanner.endpoints();
|
||||||
this.setEndpoint(endpoints.get(0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getInternalEnpoint(){
|
private String getInternalEnpoint(int infrastructureHash){
|
||||||
StringBuilder endpoint = new StringBuilder("http://").append(getEndpoint().getHost()).append(":")
|
StringBuilder endpoint = new StringBuilder("http://").append(getEndpoint(infrastructureHash).getHost()).append(":")
|
||||||
.append(getEndpoint().getPort()).append("/authorization-service/gcube/service");
|
.append(getEndpoint(infrastructureHash).getPort()).append("/authorization-service/gcube/service");
|
||||||
return endpoint.toString();
|
return endpoint.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +59,9 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
methodPath+="user";
|
methodPath+="user";
|
||||||
else methodPath+="service";
|
else methodPath+="service";
|
||||||
|
|
||||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint()).append(methodPath).append("?")
|
int infrastructureHash = getInfrastructureHashfromContext(context);
|
||||||
|
|
||||||
|
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(infrastructureHash)).append(methodPath).append("?")
|
||||||
.append(CONTEXT_PARAM).append("=").append(context);
|
.append(CONTEXT_PARAM).append("=").append(context);
|
||||||
|
|
||||||
URL url = new URL(callUrl.toString());
|
URL url = new URL(callUrl.toString());
|
||||||
|
@ -86,6 +90,24 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
return StringEncrypter.getEncrypter().decrypt(encryptedToken, context);
|
return StringEncrypter.getEncrypter().decrypt(encryptedToken, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getInfrastructureHashfromContext(String context) {
|
||||||
|
try{
|
||||||
|
String infrastructure = context.split("/")[1];
|
||||||
|
return infrastructure.hashCode();
|
||||||
|
}catch(Exception e){
|
||||||
|
throw new RuntimeException("invalid contex");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getInfrastructureHashFromToken(String token) {
|
||||||
|
try{
|
||||||
|
String hashCodeAsString = token.split(TOKEN_SEPARATOR)[1];
|
||||||
|
return Integer.parseInt(hashCodeAsString);
|
||||||
|
}catch(Exception e){
|
||||||
|
throw new RuntimeException("invalid token");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String requestActivation(ServiceInfo container, String context) throws Exception {
|
public String requestActivation(ServiceInfo container, String context) throws Exception {
|
||||||
|
|
||||||
|
@ -93,7 +115,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint()).append(methodPath).append("?")
|
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(getInfrastructureHashfromContext(context))).append(methodPath).append("?")
|
||||||
.append(CONTEXT_PARAM).append("=").append(context);
|
.append(CONTEXT_PARAM).append("=").append(context);
|
||||||
|
|
||||||
URL url = new URL(callUrl.toString());
|
URL url = new URL(callUrl.toString());
|
||||||
|
@ -129,7 +151,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
|
|
||||||
final String methodPath = "/retrieve/";
|
final String methodPath = "/retrieve/";
|
||||||
|
|
||||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint()).append(methodPath).append(token);
|
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(getInfrastructureHashFromToken(token))).append(methodPath).append(token);
|
||||||
|
|
||||||
URL url = new URL(callUrl.toString());
|
URL url = new URL(callUrl.toString());
|
||||||
HttpURLConnection connection = makeRequest(url, "GET");
|
HttpURLConnection connection = makeRequest(url, "GET");
|
||||||
|
@ -150,7 +172,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
public void addPolicies(List<Policy> policies) throws Exception {
|
public void addPolicies(List<Policy> policies) throws Exception {
|
||||||
final String methodPath = "/policyManager";
|
final String methodPath = "/policyManager";
|
||||||
|
|
||||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint()).append(methodPath);
|
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(getInfrastructureHashFromToken(SecurityTokenProvider.instance.get()))).append(methodPath);
|
||||||
|
|
||||||
URL url = new URL(callUrl.toString());
|
URL url = new URL(callUrl.toString());
|
||||||
HttpURLConnection connection = makeRequest(url, "POST");
|
HttpURLConnection connection = makeRequest(url, "POST");
|
||||||
|
@ -168,7 +190,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
@Override
|
@Override
|
||||||
public void removePolicies(long... ids) throws Exception {
|
public void removePolicies(long... ids) throws Exception {
|
||||||
final String methodPath = "/policyManager/";
|
final String methodPath = "/policyManager/";
|
||||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint()).append(methodPath);
|
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(getInfrastructureHashFromToken(SecurityTokenProvider.instance.get()))).append(methodPath);
|
||||||
List<Long> errorIds = new ArrayList<Long>();
|
List<Long> errorIds = new ArrayList<Long>();
|
||||||
for (long id: ids){
|
for (long id: ids){
|
||||||
URL url = new URL(callUrl.toString()+id);
|
URL url = new URL(callUrl.toString()+id);
|
||||||
|
@ -183,7 +205,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
public List<Policy> getPolicies(String context) throws Exception{
|
public List<Policy> getPolicies(String context) throws Exception{
|
||||||
final String methodPath = "/policyManager/";
|
final String methodPath = "/policyManager/";
|
||||||
|
|
||||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint()).append(methodPath).append("?").append(CONTEXT_PARAM).append("=").append(context);
|
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(getInfrastructureHashfromContext(context))).append(methodPath).append("?").append(CONTEXT_PARAM).append("=").append(context);
|
||||||
|
|
||||||
URL url = new URL(callUrl.toString());
|
URL url = new URL(callUrl.toString());
|
||||||
HttpURLConnection connection = makeRequest(url, "GET");
|
HttpURLConnection connection = makeRequest(url, "GET");
|
||||||
|
@ -205,13 +227,15 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AuthorizationEndpoint getEndpoint() {
|
public AuthorizationEndpoint getEndpoint(int infrastructureHash) {
|
||||||
return this.endpoints.get(0);
|
if (!this.endpoints.containsKey(infrastructureHash))
|
||||||
|
throw new RuntimeException("Authorization Endpoint not found for the required infrastructure");
|
||||||
|
return this.endpoints.get(infrastructureHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setEndpoint(AuthorizationEndpoint authEndpoint) {
|
public void setEndpoint(Map<Integer,AuthorizationEndpoint> endpoints) {
|
||||||
this.endpoints = Collections.singletonList(authEndpoint);
|
this.endpoints = endpoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue