//* Licensed Materials - Property of *
//* IBM *
//* Alexandra Instituttet A/S *
//* *
//* eu.abc4trust.pabce.1.34 *
//* *
//* (C) Copyright IBM Corp. 2014. All Rights Reserved. *
//* (C) Copyright Alexandra Instituttet A/S, Denmark. 2014. All *
//* Rights Reserved. *
//* US Government Users Restricted Rights - Use, duplication or *
//* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. *
//* *
//* This file is licensed under the Apache License, Version 2.0 (the *
//* "License"); you may not use this file except in compliance with *
//* the License. You may obtain a copy of the License at: *
//* http://www.apache.org/licenses/LICENSE-2.0 *
//* Unless required by applicable law or agreed to in writing, *
//* software distributed under the License is distributed on an *
//* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
//* KIND, either express or implied. See the License for the *
//* specific language governing permissions and limitations *
//* under the License. *
//*/**/****************************************************************
package eu.abc4trust.services.inspector;
import java.io.File;
import java.io.FilenameFilter;
import java.net.URI;
import java.net.URL;
import java.util.List;
import java.util.Random;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.sun.jersey.api.client.WebResource.Builder;
import eu.abc4trust.abce.external.user.UserAbcEngine;
import eu.abc4trust.abce.external.verifier.VerifierAbcEngine;
import eu.abc4trust.abce.testharness.IntegrationModuleFactory;
import eu.abc4trust.cryptoEngine.util.SystemParametersUtil;
import eu.abc4trust.keyManager.KeyManager;
import eu.abc4trust.ri.servicehelper.AbstractHelper;
import eu.abc4trust.ri.servicehelper.FileSystem;
import eu.abc4trust.services.AbstractTestFactory;
import eu.abc4trust.services.Constants;
import eu.abc4trust.services.verifier.VerifierServiceFactory;
import eu.abc4trust.util.CryptoUriUtil;
import eu.abc4trust.xml.AttributeList;
import eu.abc4trust.xml.CredentialSpecification;
import eu.abc4trust.xml.InspectorPublicKey;
import eu.abc4trust.xml.IssuerParameters;
import eu.abc4trust.xml.ObjectFactory;
import eu.abc4trust.xml.PresentationPolicyAlternatives;
import eu.abc4trust.xml.PresentationToken;
public class InspectorServiceFactory extends AbstractTestFactory{
static ObjectFactory of = new ObjectFactory();
final String baseUrl = "http://localhost:9200/abce-services/inspector";
final static String INSPECTOR_UID = "http://thebestbank.com/inspector/pub_key_v1";
private static final String USERNAME = "username";
public InspectorPublicKey getInspectorPublicKey(int keyLength, String cryptoMechanism){
String requestString = "/setupInspectorPublicKey/?keyLength="+ keyLength+
"&cryptoMechanism="+cryptoMechanism+
"&uid="+INSPECTOR_UID;
Builder resource = this.getHttpBuilder(requestString, this.baseUrl);
InspectorPublicKey publicKey = resource
.post(InspectorPublicKey.class);
return publicKey;
}
public AttributeList inspectPresentationToken(PresentationToken pt){
String requestString = "/inspect";
Builder resource = this.getHttpBuilder(requestString, this.baseUrl);
AttributeList attList = resource.post(AttributeList.class, of.createPresentationToken(pt));
return attList;
}
public AttributeList inspect(InspectorPublicKey inspectorPublicKey) throws Exception{
Injector issuerInjector = Guice.createInjector(IntegrationModuleFactory
.newModule(new Random(1987)));
Injector userInjector = Guice.createInjector(IntegrationModuleFactory
.newModule(new Random(1987)));
KeyManager userKeyManager = userInjector.getInstance(KeyManager.class);
userKeyManager.storeInspectorPublicKey(URI.create(INSPECTOR_UID), inspectorPublicKey);
VerifierServiceFactory verifierServiceFactory = new VerifierServiceFactory();
verifierServiceFactory.issueCredential(userInjector, issuerInjector, CryptoUriUtil.getIdemixMechanism());
Injector verifierInjector = Guice.createInjector(IntegrationModuleFactory
.newModule(new Random(1987)));
KeyManager keyManager = verifierInjector.getInstance(KeyManager.class);
keyManager.storeSystemParameters(SystemParametersUtil.getDefaultSystemParameters_1024());
keyManager.storeInspectorPublicKey(URI.create(INSPECTOR_UID), inspectorPublicKey);
CredentialSpecification credSpec = this.getCredentialSpecificationForTest();
keyManager.storeCredentialSpecification(credSpec.getSpecificationUID(), credSpec);
String[] issuerParamsResourceList =
this.getFilesFromDir(Constants.ISSUER_RESOURCES_FOLDER, "issuer_param", "xml");
List<IssuerParameters> issuerParamsList =
FileSystem.loadXmlListFromResources(issuerParamsResourceList);
for(IssuerParameters ip : issuerParamsList){
keyManager.storeIssuerParameters(ip.getParametersUID(), ip);
}
PresentationPolicyAlternatives ppa = this.getPresentationPolicyAlternativesForInspectionTest();
UserAbcEngine user = userInjector.getInstance(UserAbcEngine.class);
// TODO(enr): Do we need to add this?
// chosenInspectors.add(INSPECTOR_UID);
PresentationToken pt = user.createPresentationTokenFirstChoice(USERNAME, ppa);
VerifierAbcEngine verifier = verifierInjector.getInstance(VerifierAbcEngine.class);
verifier.verifyTokenAgainstPolicy(ppa, pt, false);
return inspectPresentationToken(pt);
}
private String[] getFilesFromDir(String folderName, final String filter, final String extension) {
String[] resourceList;
URL url = AbstractHelper.class.getResource(folderName);
File folder = null;
if (url != null) {
folder = new File(url.getFile());
} else {
folder = new File(folderName);
}
File[] fileList = folder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File arg0, String arg1) {
if (arg1.indexOf(filter) != -1 && arg1.endsWith(extension)) {
return true;
} else {
return false;
}
}
});
if (fileList == null) {
System.out.println("Folder " + folderName
+ " does not exist! \n Trying to continue without these resources");
return new String[0];
}
resourceList = new String[fileList.length];
for (int i = 0; i < fileList.length; i++) {
resourceList[i] = fileList[i].getAbsolutePath();
}
return resourceList;
}
}