git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/Common/authorization-common-client@134131 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
f4971155f5
commit
8f3287a6f6
|
@ -41,5 +41,11 @@ public interface AuthorizationProxy {
|
|||
Map<String, String> retrieveApiKeys() throws Exception;
|
||||
|
||||
File getSymmKey(String filePath) throws Exception;
|
||||
|
||||
String resolveTokenByUserAndContext(String user, String context)
|
||||
throws Exception;
|
||||
|
||||
String generateExternalServiceToken(String serviceId)
|
||||
throws Exception;
|
||||
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
|
||||
|
@ -90,6 +91,64 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
|||
return Utils.addInfrastructureHashToToken(token, infrastructureHash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateExternalServiceToken(String serviceId) throws Exception {
|
||||
|
||||
String methodPath = "/token/external/";
|
||||
|
||||
int infrastructureHash = Utils.getInfrastructureHashFromToken(SecurityTokenProvider.instance.get(), endpoints.getDefaultInfrastructure());
|
||||
|
||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(infrastructureHash)).append(methodPath).append(serviceId);
|
||||
|
||||
URL url = new URL(callUrl.toString());
|
||||
HttpURLConnection connection = makeRequest(url, "PUT", true);
|
||||
connection.setDoInput(true);
|
||||
connection.setRequestProperty("Content-type", "application/xml");
|
||||
|
||||
log.debug("response code for "+callUrl.toString()+" is "+connection.getResponseCode()+" "+connection.getResponseMessage());
|
||||
|
||||
if (connection.getResponseCode()!=200) throw new Exception("error contacting authorization service");
|
||||
String token= "";
|
||||
try(BufferedReader reader = new BufferedReader(new InputStreamReader((InputStream)connection.getContent()))){
|
||||
StringBuilder result = new StringBuilder();
|
||||
String line;
|
||||
while((line = reader.readLine()) != null)
|
||||
result.append(line);
|
||||
token = result.toString();
|
||||
}
|
||||
|
||||
return Utils.addInfrastructureHashToToken(token, infrastructureHash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String resolveTokenByUserAndContext(String user, String context) throws Exception {
|
||||
|
||||
String methodPath = "/token/";
|
||||
|
||||
int infrastructureHash = Utils.getInfrastructureHashfromContext(context);
|
||||
|
||||
StringBuilder callUrl = new StringBuilder(getInternalEnpoint(infrastructureHash)).append(methodPath).append(user).append("?context=").append(context);
|
||||
|
||||
URL url = new URL(callUrl.toString());
|
||||
HttpURLConnection connection = makeRequest(url, "GET", false);
|
||||
|
||||
log.debug("response code for "+callUrl.toString()+" is "+connection.getResponseCode()+" "+connection.getResponseMessage());
|
||||
|
||||
if (connection.getResponseCode()==404) throw new ObjectNotFound("token not found");
|
||||
if (connection.getResponseCode()!=200) throw new Exception("error contacting authorization service (error code is "+connection.getResponseCode()+")");
|
||||
if (connection.getContentLengthLong()==0) return null;
|
||||
String token= "";
|
||||
try(BufferedReader reader = new BufferedReader(new InputStreamReader((InputStream)connection.getContent()))){
|
||||
StringBuilder result = new StringBuilder();
|
||||
String line;
|
||||
while((line = reader.readLine()) != null)
|
||||
result.append(line);
|
||||
token = result.toString();
|
||||
}
|
||||
|
||||
return Utils.addInfrastructureHashToToken(token, infrastructureHash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateUserToken(UserInfo client, String context) throws Exception {
|
||||
|
||||
|
@ -179,10 +238,19 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
|||
if (connection.getResponseCode()!=200) throw new Exception("error retrieving keys (error code is "+connection.getResponseCode()+")");
|
||||
if (connection.getContentLengthLong()<=0) return Collections.emptyMap();
|
||||
|
||||
Map<String, String> tokensQulifiersMap;
|
||||
try(InputStream stream = (InputStream)connection.getContent();){
|
||||
QualifiersList entries = (QualifiersList)Binder.getContext().createUnmarshaller().unmarshal(stream);
|
||||
return entries.getQualifiers();
|
||||
tokensQulifiersMap = entries.getQualifiers();
|
||||
}
|
||||
|
||||
if (tokensQulifiersMap!=null && !tokensQulifiersMap.isEmpty()){
|
||||
Map<String, String> toReturnMap = new HashMap<String, String>();
|
||||
for (Entry<String, String> entry: tokensQulifiersMap.entrySet())
|
||||
toReturnMap.put(entry.getKey(), Utils.addInfrastructureHashToToken(entry.getValue(), infrastructureHash));
|
||||
return toReturnMap;
|
||||
} else return Collections.emptyMap();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -281,7 +349,7 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
|||
|
||||
if (connection.getResponseCode()==404) throw new ObjectNotFound("token "+maskedToken+" not found");
|
||||
if (connection.getResponseCode()!=200) throw new Exception("error contacting authorization service (error code is "+connection.getResponseCode()+")");
|
||||
if (connection.getContentLengthLong()<=0) return null;
|
||||
if (connection.getContentLengthLong()==0) return null;
|
||||
|
||||
try(InputStream stream = (InputStream)connection.getContent();){
|
||||
AuthorizationEntry entry = (AuthorizationEntry)Binder.getContext().createUnmarshaller().unmarshal(stream);
|
||||
|
@ -333,8 +401,12 @@ public class DefaultAuthorizationProxy implements AuthorizationProxy {
|
|||
URL url = new URL(callUrl.toString());
|
||||
HttpURLConnection connection = makeRequest(url, "GET", true);
|
||||
connection.setDoInput(true);
|
||||
if (connection.getResponseCode()!=200) throw new Exception("error retrieving policies");
|
||||
if (connection.getContentLengthLong()<=0) return Collections.emptyList();
|
||||
if (connection.getResponseCode()!=200){
|
||||
log.info("response code is not 200");
|
||||
throw new Exception("error retrieving policies");
|
||||
}
|
||||
if (connection.getContentLengthLong()==0)
|
||||
return Collections.emptyList();
|
||||
|
||||
try(InputStreamReader stream = new InputStreamReader((InputStream)connection.getContent())){
|
||||
Policies policies = (Policies)Binder.getContext().createUnmarshaller().unmarshal(stream);
|
||||
|
|
|
@ -2,10 +2,18 @@ package org.gcube.common.authorizationservice.cl;
|
|||
|
||||
import static org.gcube.common.authorization.client.Constants.authorizationService;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.gcube.common.authorization.client.proxy.AuthorizationProxy;
|
||||
import org.gcube.common.authorization.library.AuthorizationEntry;
|
||||
import org.gcube.common.authorization.library.policies.Action;
|
||||
import org.gcube.common.authorization.library.policies.Policy;
|
||||
|
@ -15,12 +23,14 @@ import org.gcube.common.authorization.library.policies.Users;
|
|||
import org.gcube.common.authorization.library.provider.ContainerInfo;
|
||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||
import org.gcube.common.authorization.library.provider.UserInfo;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
public class CallTest {
|
||||
|
||||
@Test
|
||||
public void resolveNodeToken() throws Exception{
|
||||
System.out.println(resolveToken("a7caa51b-6979-4b1d-abc6-449365b8350a-98187548")); //81caac0f-8a0d-4923-9312-7ff0eb3f2d5e|98187548"));
|
||||
System.out.println(resolveToken("80048c62-26e0-4df3-a5ec-f893aee07243-843339462")); //81caac0f-8a0d-4923-9312-7ff0eb3f2d5e|98187548"));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -38,9 +48,10 @@ public class CallTest {
|
|||
|
||||
@Test
|
||||
public void getPolicies() throws Exception{
|
||||
SecurityTokenProvider.instance.set(requestTestToken("/gcube/devNext/NextNext"));
|
||||
List<Policy> policies = authorizationService().getPolicies("/gcube/devsec/devVRE");
|
||||
System.out.println(policies);
|
||||
SecurityTokenProvider.instance.set(requestTestToken("/gcube/devNext"));
|
||||
List<Policy> policies = authorizationService().getPolicies("/gcube/devsec");
|
||||
for (Policy policy: policies)
|
||||
System.out.println(policy);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -50,13 +61,13 @@ public class CallTest {
|
|||
|
||||
@Test
|
||||
public void requestToken() throws Exception{
|
||||
System.out.println(authorizationService().generateUserToken(new UserInfo("andrea.dellamico", new ArrayList<String>()), "/gcube"));
|
||||
System.out.println(authorizationService().generateUserToken(new UserInfo("test.gcube", new ArrayList<String>()), "/gcube/devsec"));
|
||||
}
|
||||
@Test(expected=RuntimeException.class)
|
||||
public void createKeyWithError() throws Exception {
|
||||
authorizationService().generateApiKey("TEST");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getSymmKey() throws Exception{
|
||||
SecurityTokenProvider.instance.set(_requestNodeToken());
|
||||
|
@ -83,8 +94,8 @@ public class CallTest {
|
|||
}
|
||||
|
||||
public String _requestNodeToken() throws Exception {
|
||||
SecurityTokenProvider.instance.set(requestTestToken("/gcube"));
|
||||
String token = authorizationService().requestActivation(new ContainerInfo("dlib29.isti.cnr.it",8080), "/gcube/devsec");
|
||||
SecurityTokenProvider.instance.set(requestTestToken("/d4science.research-infrastructures.eu"));
|
||||
String token = authorizationService().requestActivation(new ContainerInfo("node65.d4science.org",80), "/d4science.research-infrastructures.eu");
|
||||
return token;
|
||||
}
|
||||
|
||||
|
@ -94,11 +105,139 @@ public class CallTest {
|
|||
}
|
||||
|
||||
private String requestTestToken(String context) throws Exception{
|
||||
return authorizationService().generateUserToken(new UserInfo("test.token", new ArrayList<String>()), context);
|
||||
return authorizationService().generateUserToken(new UserInfo("lucio.lelii", new ArrayList<String>()), context);
|
||||
}
|
||||
|
||||
private AuthorizationEntry resolveToken(String token) throws Exception{
|
||||
AuthorizationEntry entry = authorizationService().get(token);
|
||||
return entry;
|
||||
}
|
||||
|
||||
/* List<String> scopes = Arrays.asList("/d4science.research-infrastructures.eu/gCubeApps/TabularDataLab",
|
||||
"/d4science.research-infrastructures.eu/FARM/AquaMaps",
|
||||
"/d4science.research-infrastructures.eu/FARM/WECAFC-FIRMS",
|
||||
"/d4science.research-infrastructures.eu/gCubeApps/PGFA-UFMT",
|
||||
"/d4science.research-infrastructures.eu/FARM",
|
||||
"/d4science.research-infrastructures.eu/gCubeApps/EcologicalModelling",
|
||||
"/d4science.research-infrastructures.eu/gCubeApps/EuBrazilOpenBio",
|
||||
"/d4science.research-infrastructures.eu/gCubeApps/AlieiaVRE",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ENVRIPlus",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ENVRI",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICES_DASC",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/FAO_TunaAtlas",
|
||||
/d4science.research-infrastructures.eu/SoBigData/ResourceCatalogue",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/StocksAndFisheriesKB",
|
||||
/d4science.research-infrastructures.eu/SoBigData/TagMe",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BlueCommons",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICES_TCSSM",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/OpenIt",
|
||||
/d4science.research-infrastructures.eu/SmartArea/SmartApps",
|
||||
/d4science.research-infrastructures.eu",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/Parthenos",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/AquacultureAtlasGeneration",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/IGDI",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/RStudioLab",
|
||||
/d4science.research-infrastructures.eu/SoBigData",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BlueBridgeProject",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/rScience",
|
||||
/d4science.research-infrastructures.eu/FARM/VME-DB",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/EllinikaPsariaVRE",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/gCube",
|
||||
/d4science.research-infrastructures.eu/FARM/TBTI_VRE",
|
||||
/d4science.research-infrastructures.eu/FARM/GRSF",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/DocumentsWorkflow",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICOS_ETC",
|
||||
/d4science.research-infrastructures.eu/SoBigData/CityOfCitizens",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/SoBigData.eu",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BiOnym",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/PerformanceEvaluationInAquaculture",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/SmartArea",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICES_TCRE",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/CNR_OpenScienceTF",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BlueBRIDGE-PSC",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BOBLME_HilsaAWG",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ScalableDataMining",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BiodiversityLab",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/DESCRAMBLE",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICES_FIACO",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BlueBRIDGE-EAB",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ARIADNE",
|
||||
/d4science.research-infrastructures.eu/SmartArea/SmartBuilding",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ProtectedAreaImpactMaps",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ForkysVRE",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/EGIEngage",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICES_StockAssessmentAdvanced",
|
||||
/d4science.research-infrastructures.eu/FARM/GRSF",
|
||||
/d4science.research-infrastructures.eu/SmartArea",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/RPrototypingLab",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/TCom",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICCAT_BFT-E",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICES_DALSA",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/SoBigData.it",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/EGIP",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BlueUptake",
|
||||
/d4science.research-infrastructures.eu/FARM/iMarineBoardVRE",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/KnowledgeBridging",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/EFG",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/StockAssessment",
|
||||
/d4science.research-infrastructures.eu/gCubeApps/iSearch",
|
||||
"/d4science.research-infrastructures.eu/gCubeApps",
|
||||
"/d4science.research-infrastructures.eu/gCubeApps/StrategicInvestmentAnalysis")*/
|
||||
|
||||
@Test
|
||||
public void requestListOfTokenForVREs() throws Exception{
|
||||
SecurityTokenProvider.instance.set(requestTestToken("/d4science.research-infrastructures.eu"));
|
||||
|
||||
String jrNode ="tabulardata.d4science.org";
|
||||
int jrPort =8080;
|
||||
|
||||
AuthorizationProxy proxy = authorizationService();
|
||||
|
||||
try(BufferedReader isr = new BufferedReader(new InputStreamReader(new FileInputStream("./src/test/resources/Scopes.txt")));
|
||||
BufferedWriter bw = new BufferedWriter(new FileWriter("./src/test/resources/tokens-"+jrNode+".txt"))){
|
||||
String line = null;
|
||||
|
||||
|
||||
while ( (line=isr.readLine())!=null){
|
||||
System.out.println(" retrieving token for scope "+line);
|
||||
String token = proxy.requestActivation(new ContainerInfo(jrNode,jrPort), line.trim());
|
||||
bw.write(String.format("<token>%s</token>", token));
|
||||
bw.newLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
@Ignore @Test
|
||||
public void checkDiff() throws Exception{
|
||||
|
||||
|
||||
Set<String> scopes = new HashSet<String>();
|
||||
|
||||
try(BufferedReader isr = new BufferedReader(new InputStreamReader(new FileInputStream("./src/test/resources/Scopes.txt")))){
|
||||
String line = null;
|
||||
|
||||
while ( (line=isr.readLine())!=null){
|
||||
System.out.println(scopes.size()+" "+line);
|
||||
if (scopes.contains(line.trim()))
|
||||
System.out.println("already contians "+line);
|
||||
else scopes.add(line.trim());
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("initial scope count is "+scopes.size());
|
||||
|
||||
|
||||
try(BufferedReader isr = new BufferedReader(new InputStreamReader(new FileInputStream("./src/test/resources/createdScope.txt")))){
|
||||
String line = null;
|
||||
|
||||
|
||||
while ( (line=isr.readLine())!=null){
|
||||
if (!scopes.remove(line.trim()))
|
||||
System.out.println("cannot remove scope "+line.trim());
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("final scope count is "+scopes.size());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
package org.gcube.common.authorizationservice.cl;
|
||||
|
||||
import static org.gcube.common.authorization.client.Constants.authorizationService;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.gcube.common.authorization.library.provider.UserInfo;
|
||||
import org.junit.Test;
|
||||
|
||||
public class StressTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void stressing(){
|
||||
int counter = 0;
|
||||
for (int i =1 ; i<=10000; i++){
|
||||
if ((i-(counter*4))>4)
|
||||
counter++;
|
||||
final int index = counter;
|
||||
Thread t = new Thread(){
|
||||
|
||||
public void run(){
|
||||
try {
|
||||
requestTestToken("/gcube", "stress.test19-"+index);
|
||||
} catch (Exception e) {
|
||||
System.out.println("erorr in thread "+Thread.currentThread().getName());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
t.start();
|
||||
System.out.println("next execution");
|
||||
}
|
||||
System.out.println("waiting");
|
||||
try {
|
||||
System.in.read();
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private String requestTestToken(String context, String user) throws Exception{
|
||||
return authorizationService().generateUserToken(new UserInfo(user, new ArrayList<String>()), context);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
/d4science.research-infrastructures.eu/gCubeApps/FAO_TunaAtlas
|
||||
/d4science.research-infrastructures.eu/gCubeApps/TabularDataLab
|
||||
/d4science.research-infrastructures.eu/gCubeApps/BOBLME_HilsaAWG
|
||||
/d4science.research-infrastructures.eu/gCubeApps/PGFA-UFMT
|
||||
/d4science.research-infrastructures.eu/gCubeApps/IGDI
|
||||
/d4science.research-infrastructures.eu/gCubeApps/ICES_TCRE
|
||||
/d4science.research-infrastructures.eu/gCubeApps/StockAssessment
|
||||
/d4science.research-infrastructures.eu
|
Loading…
Reference in New Issue