You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by am...@apache.org on 2013/02/04 18:40:20 UTC
svn commit: r1442196 [2/2] - in /airavata/trunk: ./
modules/commons/utils/src/main/java/org/apache/airavata/common/utils/
modules/credential-store/ modules/credential-store/scripts/
modules/credential-store/src/ modules/credential-store/src/main/ modul...
Added: airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/impl/db/ParentDAO.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/impl/db/ParentDAO.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/impl/db/ParentDAO.java (added)
+++ airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/impl/db/ParentDAO.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,19 @@
+package org.apache.airavata.credential.store.impl.db;
+
+import org.apache.airavata.common.utils.DBUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Super class to abstract out Data access classes.
+ */
+public class ParentDAO {
+ protected static Logger log = LoggerFactory.getLogger(CommunityUserDAO.class);
+
+ protected DBUtil dbUtil;
+
+ public ParentDAO(DBUtil dbUtil) {
+ this.dbUtil = dbUtil;
+ }
+
+}
Added: airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialBootstrapper.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialBootstrapper.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialBootstrapper.java (added)
+++ airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialBootstrapper.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,27 @@
+package org.apache.airavata.credential.store.servlet;
+
+import edu.uiuc.ncsa.myproxy.oa4mp.client.loader.ClientBootstrapper;
+import edu.uiuc.ncsa.security.core.util.ConfigurationLoader;
+
+import javax.servlet.ServletContext;
+import java.io.File;
+
+/**
+ * Bootstrapper class for credential-store.
+ */
+public class CredentialBootstrapper extends ClientBootstrapper {
+
+ public ConfigurationLoader getConfigurationLoader(ServletContext servletContext)
+ throws Exception {
+
+ File currentDirectory = new File(".");
+ System.out.println("Current directory is - " + currentDirectory.getAbsolutePath());
+
+
+ return super.getConfigurationLoader(servletContext);
+
+
+ }
+
+
+}
Added: airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreCallbackServlet.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreCallbackServlet.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreCallbackServlet.java (added)
+++ airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreCallbackServlet.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,184 @@
+package org.apache.airavata.credential.store.servlet;
+
+import edu.uiuc.ncsa.myproxy.oa4mp.client.AssetResponse;
+import edu.uiuc.ncsa.myproxy.oa4mp.client.ClientEnvironment;
+import edu.uiuc.ncsa.myproxy.oa4mp.client.OA4MPResponse;
+import edu.uiuc.ncsa.myproxy.oa4mp.client.OA4MPService;
+import edu.uiuc.ncsa.myproxy.oa4mp.client.servlet.ClientServlet;
+import edu.uiuc.ncsa.security.core.exceptions.GeneralException;
+import edu.uiuc.ncsa.security.servlet.JSPUtil;
+import edu.uiuc.ncsa.security.util.pkcs.CertUtil;
+import org.apache.airavata.common.utils.DBUtil;
+import org.apache.airavata.credential.store.CertificateCredential;
+import org.apache.airavata.credential.store.CommunityUser;
+import org.apache.airavata.credential.store.impl.CertificateCredentialWriter;
+import org.apache.airavata.credential.store.util.Utility;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.Map;
+
+import static edu.uiuc.ncsa.myproxy.oa4mp.client.ClientEnvironment.CALLBACK_URI_KEY;
+
+/**
+ * Callback from the portal will come here. In this class we will store incomming
+ * certificate to the database.
+ * Partly taken from OA4MP code base.
+ */
+public class CredentialStoreCallbackServlet extends ClientServlet {
+
+ private static final String ERROR_PAGE = "/credential-store/error.jsp";
+ private static final String SUCCESS_PAGE = "/credential-store/success.jsp";
+
+ private static final String GATEWAY_NAME_QUERY_PARAMETER = "gatewayName";
+ private static final String PORTAL_USER_QUERY_PARAMETER = "portalUserName";
+ private static final String PORTAL_USER_EMAIL_QUERY_PARAMETER = "email";
+ private static final String DURATION_QUERY_PARAMETER = "duration";
+
+ private OA4MPService oa4mpService;
+
+ private CertificateCredentialWriter certificateCredentialWriter;
+
+ public void init() throws ServletException {
+
+ DBUtil dbUtil;
+
+ try {
+ dbUtil = DBUtil.getDBUtil();
+ } catch (Exception e) {
+ throw new ServletException("Error initializing database operations.", e);
+ }
+
+ super.init();
+ certificateCredentialWriter = new CertificateCredentialWriter(dbUtil);
+
+ info("Credential store callback initialized successfully.");
+ }
+
+ @Override
+ public OA4MPService getOA4MPService() {
+ return oa4mpService;
+ }
+
+ @Override
+ public void loadEnvironment() throws IOException {
+ environment = getConfigurationLoader().load();
+ oa4mpService = new CredentialStoreOA4MPServer((ClientEnvironment) environment);
+ }
+
+ @Override
+ protected void doIt(HttpServletRequest request, HttpServletResponse response) throws Throwable {
+
+ String gatewayName = request.getParameter(GATEWAY_NAME_QUERY_PARAMETER);
+ String portalUserName = request.getParameter(PORTAL_USER_QUERY_PARAMETER);
+ String durationParameter = request.getParameter(DURATION_QUERY_PARAMETER);
+ String contactEmail = request.getParameter(PORTAL_USER_EMAIL_QUERY_PARAMETER);
+
+ //TODO remove hard coded values, once passing query parameters is
+ //fixed in OA4MP client api
+ long duration = 800;
+
+ if (durationParameter != null) {
+ duration = Long.parseLong(durationParameter);
+ }
+
+ info("Gateway name " + gatewayName);
+ info("Portal user name " + portalUserName);
+ info("Community user contact email " + contactEmail);
+
+ info("2.a. Getting token and verifier.");
+ String token = request.getParameter(TOKEN_KEY);
+ String verifier = request.getParameter(VERIFIER_KEY);
+ if (token == null || verifier == null) {
+ warn("2.a. The token is " + (token == null ? "null" : token) + " and the verifier is " + (verifier == null ? "null" : verifier));
+ GeneralException ge = new GeneralException("Error: This servlet requires parameters for the token and verifier. It cannot be called directly.");
+ request.setAttribute("exception", ge);
+ JSPUtil.fwd(request, response, ERROR_PAGE);
+ return;
+ }
+ info("2.a Token and verifier found.");
+ X509Certificate cert = null;
+ AssetResponse assetResponse = null;
+ OA4MPResponse oa4MPResponse = null;
+
+ Map<String, String> parameters = createQueryParameters(gatewayName, portalUserName,
+ contactEmail, duration);
+
+ try {
+ info("Requesting private key ...");
+ oa4MPResponse = getOA4MPService().requestCert(parameters);
+
+ info("2.a. Getting the cert(s) from the service");
+ assetResponse = getOA4MPService().getCert(token, verifier);
+ cert = assetResponse.getX509Certificates()[0];
+
+ // The work in this call
+ } catch (Throwable t) {
+ warn("2.a. Exception from the server: " + t.getCause().getMessage());
+ error("Exception while trying to get cert. message:" + t.getMessage());
+ request.setAttribute("exception", t);
+ JSPUtil.fwd(request, response, ERROR_PAGE);
+ return;
+ }
+ info("2.b. Done! Displaying success page.");
+
+ CertificateCredential certificateCredential = new CertificateCredential();
+
+ certificateCredential.setNotBefore(Utility.convertDateToString(cert.getNotBefore()));
+ certificateCredential.setNotAfter(Utility.convertDateToString(cert.getNotAfter()));
+ certificateCredential.setCertificate(cert);
+ certificateCredential.setPrivateKey(oa4MPResponse.getPrivateKey());
+ certificateCredential.setCommunityUser(new CommunityUser(gatewayName, assetResponse.getUsername(),
+ contactEmail));
+ certificateCredential.setPortalUserName(portalUserName);
+ certificateCredential.setLifeTime(duration);
+
+ certificateCredentialWriter.writeCredentials(certificateCredential);
+
+ StringBuilder stringBuilder = new StringBuilder("Certificate for community user ");
+ stringBuilder.append(assetResponse.getUsername()).append(" successfully persisted.");
+ stringBuilder.append(" Certificate DN - ").append(cert.getSubjectDN());
+
+ info(stringBuilder.toString());
+
+ String contextPath = request.getContextPath();
+ if (!contextPath.endsWith("/")) {
+ contextPath = contextPath + "/";
+ }
+ request.setAttribute("action", contextPath);
+ JSPUtil.fwd(request, response, SUCCESS_PAGE);
+ info("2.a. Completely finished with delegation.");
+
+ }
+
+ private Map<String, String> createQueryParameters (String gatewayName,
+ String portalUserName,
+ String portalEmail,
+ long duration) {
+
+ String callbackUriKey = getEnvironment().getConstants().get(CALLBACK_URI_KEY);
+ ClientEnvironment clientEnvironment = (ClientEnvironment) getEnvironment();
+
+ String callbackUri = clientEnvironment.getCallback().toString();
+
+ StringBuilder stringBuilder = new StringBuilder(callbackUri);
+
+ stringBuilder.append("?").append(GATEWAY_NAME_QUERY_PARAMETER).append("=").append(gatewayName)
+ .append("&").append(PORTAL_USER_QUERY_PARAMETER).append("=").append(portalUserName)
+ .append("&")
+ .append(PORTAL_USER_EMAIL_QUERY_PARAMETER).append("=").append(portalEmail);
+
+ info("Callback URI is set to - " + stringBuilder.toString());
+
+ Map<String, String> parameters = new HashMap<String, String>();
+ parameters.put(callbackUriKey, stringBuilder.toString());
+
+ return parameters;
+
+ }
+}
+
Added: airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreOA4MPServer.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreOA4MPServer.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreOA4MPServer.java (added)
+++ airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreOA4MPServer.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,60 @@
+package org.apache.airavata.credential.store.servlet;
+
+import edu.uiuc.ncsa.myproxy.oa4mp.client.ClientEnvironment;
+import edu.uiuc.ncsa.myproxy.oa4mp.client.OA4MPResponse;
+import edu.uiuc.ncsa.myproxy.oa4mp.client.OA4MPService;
+import edu.uiuc.ncsa.security.core.exceptions.GeneralException;
+import edu.uiuc.ncsa.security.delegation.client.request.DelegationRequest;
+import edu.uiuc.ncsa.security.delegation.client.request.DelegationResponse;
+import org.apache.commons.codec.binary.Base64;
+import org.bouncycastle.jce.PKCS10CertificationRequest;
+
+import java.security.KeyPair;
+import java.util.HashMap;
+import java.util.Map;
+
+import static edu.uiuc.ncsa.myproxy.oa4mp.client.ClientEnvironment.CALLBACK_URI_KEY;
+import static edu.uiuc.ncsa.security.util.pkcs.CertUtil.createCertRequest;
+import static edu.uiuc.ncsa.security.util.pkcs.KeyUtil.generateKeyPair;
+
+/**
+ * Credential store specific OA4MPService.
+ * Only change is add support to include get parameters.
+ */
+public class CredentialStoreOA4MPServer extends OA4MPService {
+ public CredentialStoreOA4MPServer(ClientEnvironment environment) {
+ super(environment);
+ }
+
+ public OA4MPResponse requestCert(Map additionalParameters) {
+ if (additionalParameters == null) {
+ additionalParameters = new HashMap();
+ }
+ try {
+ KeyPair keyPair = generateKeyPair();
+ PKCS10CertificationRequest certReq = createCertRequest(keyPair);
+ OA4MPResponse mpdsResponse = new OA4MPResponse();
+ mpdsResponse.setPrivateKey(keyPair.getPrivate());
+ additionalParameters.put(ClientEnvironment.CERT_REQUEST_KEY, Base64.encodeBase64String(certReq.getDEREncoded()));
+
+ if (additionalParameters.get(getEnvironment().getConstants().get(CALLBACK_URI_KEY)) == null) {
+ additionalParameters.put(getEnvironment().getConstants().get(CALLBACK_URI_KEY), getEnvironment().
+ getCallback().toString());
+ }
+
+ DelegationRequest daReq = new DelegationRequest();
+ daReq.setParameters(additionalParameters);
+ daReq.setClient(getEnvironment().getClient());
+ daReq.setBaseUri(getEnvironment().getAuthorizationUri());
+ DelegationResponse daResp = (DelegationResponse) getEnvironment().getDelegationService().process(daReq);
+ mpdsResponse.setRedirect(daResp.getRedirectUri());
+ return mpdsResponse;
+ } catch (Throwable e) {
+ if (e instanceof RuntimeException) {
+ throw (RuntimeException) e;
+ }
+ throw new GeneralException("Error generating request", e);
+ }
+
+ }
+}
Added: airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreStartServlet.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreStartServlet.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreStartServlet.java (added)
+++ airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/servlet/CredentialStoreStartServlet.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,122 @@
+package org.apache.airavata.credential.store.servlet;
+
+import edu.uiuc.ncsa.myproxy.oa4mp.client.OA4MPResponse;
+import edu.uiuc.ncsa.myproxy.oa4mp.client.servlet.ClientServlet;
+import edu.uiuc.ncsa.security.servlet.JSPUtil;
+import edu.uiuc.ncsa.security.util.pkcs.KeyUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import static edu.uiuc.ncsa.myproxy.oa4mp.client.ClientEnvironment.CALLBACK_URI_KEY;
+
+/**
+ * When portal initiate a request to get credentials it will hit this servlet.
+ */
+public class CredentialStoreStartServlet extends ClientServlet {
+
+ private String errorUrl;
+ private String redirectUrl;
+
+ private static Logger log = LoggerFactory.getLogger(CredentialStoreStartServlet.class);
+
+ protected String decorateURI(URI inputURI, Map<String, String> parameters) {
+
+ if (parameters.isEmpty()) {
+ return inputURI.toString();
+ }
+
+ String stringUri = inputURI.toString();
+ StringBuilder stringBuilder = new StringBuilder(stringUri);
+
+ boolean isFirst = true;
+
+ for (Map.Entry<String, String> entry : parameters.entrySet()) {
+ if (isFirst) {
+ stringBuilder.append("?");
+ isFirst = false;
+ } else {
+ stringBuilder.append("&");
+ }
+
+ stringBuilder.append(entry.getKey()).append("=").append(entry.getValue());
+ }
+
+ return stringBuilder.toString();
+
+ }
+
+ @Override
+ protected void doIt(HttpServletRequest request, HttpServletResponse response)
+ throws Throwable {
+
+ String gatewayName = request.getParameter("gatewayName");
+ String portalUserName = request.getParameter("portalUserName");
+ String contactEmail = request.getParameter("email");
+
+ if (gatewayName == null) {
+ JSPUtil.handleException(new RuntimeException("Please specify a gateway name."), request,
+ response, "/credential-store/error.jsp");
+ return;
+ }
+
+ if (portalUserName == null) {
+ JSPUtil.handleException(new RuntimeException("Please specify a portal user name."), request,
+ response, "/credential-store/error.jsp");
+ return;
+ }
+
+ if (contactEmail == null) {
+ JSPUtil.handleException(new RuntimeException("Please specify a contact email address for community" +
+ " user account."), request,
+ response, "/credential-store/error.jsp");
+ return;
+ }
+
+ log.info("1.a. Starting transaction");
+ OA4MPResponse gtwResp = null;
+
+ Map<String, String> queryParameters = new HashMap<String, String>();
+ queryParameters.put("gatewayName", gatewayName);
+ queryParameters.put("portalUserName", portalUserName);
+ queryParameters.put("email", contactEmail);
+
+ Map<String, String> additionalParameters = new HashMap<String, String>();
+
+ String modifiedCallbackUri = decorateURI(getOA4MPService().getEnvironment().getCallback(), queryParameters);
+
+ info("The modified callback URI - " + modifiedCallbackUri);
+
+ additionalParameters.put(getEnvironment().getConstants().get(CALLBACK_URI_KEY), modifiedCallbackUri);
+
+
+ // Drumroll please: here is the work for this call.
+ try {
+ gtwResp = getOA4MPService().requestCert(additionalParameters);
+ } catch (Throwable t) {
+ JSPUtil.handleException(t, request, response, "/credential-store/error.jsp");
+ return;
+ }
+ log.info("1.b. Got response. Creating page with redirect for " + gtwResp.getRedirect().getHost());
+ // Normally, we'd just do a redirect, but we will put up a page and show the redirect to the user.
+ // The client response contains the generated private key as well
+ // In a real application, the private key would be stored. This, however, exceeds the scope of this
+ // sample application -- all we need to do to complete the process is send along the redirect url.
+
+ request.setAttribute(REDIR, REDIR);
+ request.setAttribute("redirectUrl", gtwResp.getRedirect().toString());
+ request.setAttribute(ACTION_KEY, ACTION_KEY);
+ request.setAttribute("action", ACTION_REDIRECT_VALUE);
+ log.info("1.b. Showing redirect page.");
+ JSPUtil.fwd(request, response, "/credential-store/show-redirect.jsp");
+
+ }
+}
Added: airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java (added)
+++ airavata/trunk/modules/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,20 @@
+package org.apache.airavata.credential.store.util;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Contains some utility methods.
+ */
+public class Utility {
+
+ private static final String DATE_FORMAT = "MM/dd/yyyy HH:mm:ss";
+
+ public static String convertDateToString(Date date) {
+
+ DateFormat df = new SimpleDateFormat(DATE_FORMAT);
+ return df.format(date);
+ }
+
+}
Added: airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CommunityUserDAOTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CommunityUserDAOTest.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CommunityUserDAOTest.java (added)
+++ airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CommunityUserDAOTest.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,116 @@
+package org.apache.airavata.credential.store.impl.db;
+
+import org.apache.airavata.common.utils.DBUtil;
+import org.apache.airavata.common.utils.DatabaseTestCases;
+import org.apache.airavata.common.utils.DerbyUtil;
+import org.apache.airavata.credential.store.CommunityUser;
+import org.junit.*;
+
+import java.sql.Connection;
+import java.util.List;
+
+/**
+ * Test for community user DAO.
+ */
+public class CommunityUserDAOTest extends DatabaseTestCases {
+
+ private CommunityUserDAO communityUserDAO;
+
+ @BeforeClass
+ public static void setUpDatabase() throws Exception{
+
+ DerbyUtil.startDerbyInServerMode(getHostAddress(), getPort(), getUserName(), getPassword());
+
+ waitTillServerStarts();
+
+ String createTable = "CREATE TABLE COMMUNITY_USER\n" +
+ " (\n" +
+ " GATEWAY_NAME VARCHAR(256) NOT NULL,\n" +
+ " COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,\n" +
+ " COMMUNITY_USER_EMAIL VARCHAR(256) NOT NULL,\n" +
+ " PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)\n" +
+ " )";
+ executeSQL(createTable);
+
+ }
+
+ @AfterClass
+ public static void shutDownDatabase() throws Exception {
+ DerbyUtil.stopDerbyServer();
+ }
+
+ @Before
+ public void setUp() throws Exception {
+
+ communityUserDAO = new CommunityUserDAO(getDbUtil());
+
+ Connection connection = getDbUtil().getConnection();
+ DBUtil.truncate("community_user", connection);
+
+ connection.close();
+ }
+
+ @Test
+ public void testAddCommunityUser() throws Exception {
+
+ CommunityUser communityUser = new CommunityUser("gw1", "ogce","ogce@sciencegateway.org");
+ communityUserDAO.addCommunityUser(communityUser);
+
+ communityUser = new CommunityUser("gw1", "ogce2","ogce@sciencegateway.org");
+ communityUserDAO.addCommunityUser(communityUser);
+
+ CommunityUser user = communityUserDAO.getCommunityUser("gw1", "ogce");
+ Assert.assertNotNull(user);
+ Assert.assertEquals("ogce@sciencegateway.org", user.getUserEmail());
+
+ user = communityUserDAO.getCommunityUser("gw1", "ogce2");
+ Assert.assertNotNull(user);
+ Assert.assertEquals("ogce@sciencegateway.org", user.getUserEmail());
+ }
+
+ @Test
+ public void testDeleteCommunityUser() throws Exception {
+
+ CommunityUser communityUser = new CommunityUser("gw1", "ogce","ogce@sciencegateway.org");
+ communityUserDAO.addCommunityUser(communityUser);
+
+ CommunityUser user = communityUserDAO.getCommunityUser("gw1", "ogce");
+ Assert.assertNotNull(user);
+
+ communityUser = new CommunityUser("gw1", "ogce","ogce@sciencegateway.org");
+ communityUserDAO.deleteCommunityUser(communityUser);
+
+ user = communityUserDAO.getCommunityUser("gw1", "ogce");
+ Assert.assertNull(user);
+
+ }
+
+ @Test
+ public void testGetCommunityUsers() throws Exception {
+
+ CommunityUser communityUser = new CommunityUser("gw1", "ogce","ogce@sciencegateway.org");
+ communityUserDAO.addCommunityUser(communityUser);
+
+ CommunityUser user = communityUserDAO.getCommunityUser("gw1", "ogce");
+ Assert.assertNotNull(user);
+ Assert.assertEquals("ogce@sciencegateway.org", user.getUserEmail());
+
+ }
+
+ @Test
+ public void testGetCommunityUsersForGateway() throws Exception {
+
+ CommunityUser communityUser = new CommunityUser("gw1", "ogce","ogce@sciencegateway.org");
+ communityUserDAO.addCommunityUser(communityUser);
+
+ communityUser = new CommunityUser("gw1", "ogce2","ogce@sciencegateway.org");
+ communityUserDAO.addCommunityUser(communityUser);
+
+ List<CommunityUser> users = communityUserDAO.getCommunityUsers("gw1");
+ Assert.assertNotNull(users);
+ Assert.assertEquals(2, users.size());
+
+ Assert.assertEquals(users.get(0).getUserName(), "ogce");
+ Assert.assertEquals(users.get(1).getUserName(), "ogce2");
+ }
+}
Added: airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CredentialsDAOTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CredentialsDAOTest.java?rev=1442196&view=auto
==============================================================================
--- airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CredentialsDAOTest.java (added)
+++ airavata/trunk/modules/credential-store/src/test/java/org/apache/airavata/credential/store/impl/db/CredentialsDAOTest.java Mon Feb 4 17:40:18 2013
@@ -0,0 +1,224 @@
+package org.apache.airavata.credential.store.impl.db;
+
+import junit.framework.Assert;
+import org.apache.airavata.common.utils.DBUtil;
+import org.apache.airavata.common.utils.DatabaseTestCases;
+import org.apache.airavata.common.utils.DerbyUtil;
+import org.apache.airavata.credential.store.CertificateCredential;
+import org.apache.airavata.credential.store.CommunityUser;
+import org.bouncycastle.jce.X509Principal;
+import org.bouncycastle.x509.X509V3CertificateGenerator;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.security.*;
+import java.security.cert.X509Certificate;
+import java.sql.Connection;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Test class for credential class
+ */
+public class CredentialsDAOTest extends DatabaseTestCases {
+
+ private CredentialsDAO credentialsDAO;
+
+ private X509Certificate x509Certificate;
+ private PrivateKey privateKey;
+
+ @BeforeClass
+ public static void setUpDatabase() throws Exception{
+ DerbyUtil.startDerbyInServerMode(getHostAddress(), getPort(), getUserName(), getPassword());
+
+ waitTillServerStarts();
+
+ String createTable = "CREATE TABLE CREDENTIALS\n" +
+ "(\n" +
+ " GATEWAY_NAME VARCHAR(256) NOT NULL,\n" +
+ " COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,\n" +
+ " CREDENTIAL BLOB NOT NULL,\n" +
+ " PRIVATE_KEY BLOB NOT NULL,\n" +
+ " NOT_BEFORE VARCHAR(256) NOT NULL,\n" +
+ " NOT_AFTER VARCHAR(256) NOT NULL,\n" +
+ " LIFETIME INTEGER NOT NULL,\n" +
+ " REQUESTING_PORTAL_USER_NAME VARCHAR(256) NOT NULL,\n" +
+ " REQUESTED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',\n" +
+ " PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)\n" +
+ ")";
+ executeSQL(createTable);
+
+ }
+
+ @AfterClass
+ public static void shutDownDatabase() throws Exception {
+ DerbyUtil.stopDerbyServer();
+ }
+
+ @Before
+ public void setUp() throws Exception {
+
+ credentialsDAO = new CredentialsDAO(getDbUtil());
+
+ // Cleanup tables;
+ Connection connection = getDbUtil().getConnection();
+ DBUtil.truncate("credentials", connection);
+ DBUtil.truncate("community_user", connection);
+
+ connection.close();
+
+ initializeKeys();
+ }
+
+ private void initializeKeys() throws Exception {
+ KeyStore ks = KeyStore.getInstance("JKS");
+ char[] password = "password".toCharArray();
+
+ String baseDirectory = System.getProperty("credential.module.directory");
+
+ String keyStorePath = "src" + File.separator + "test" + File.separator + "resources" + File.separator
+ + "keystore.jks";
+
+ if (baseDirectory != null) {
+ keyStorePath = baseDirectory + File.separator + keyStorePath;
+ }
+
+ java.io.FileInputStream fis = null;
+ try {
+ fis =
+ new java.io.FileInputStream(keyStorePath);
+ ks.load(fis, password);
+ } finally {
+ if (fis != null) {
+ fis.close();
+ }
+ }
+
+ fis.close();
+
+ privateKey = (PrivateKey) ks.getKey("selfsigned", password);
+ x509Certificate = (X509Certificate) ks.getCertificate("selfsigned");
+
+ }
+
+ @Test
+ public void testKeyReading() throws Exception {
+ initializeKeys();
+ System.out.println(privateKey.getAlgorithm());
+ System.out.println(x509Certificate.getIssuerDN());
+
+ Assert.assertNotNull(privateKey);
+ Assert.assertNotNull(x509Certificate);
+ }
+
+ private CommunityUser getCommunityUser(String gateway, String name) {
+ return new CommunityUser(gateway, name, "amila@sciencegateway.org");
+ }
+
+ private void addTestCredentials() throws Exception {
+
+ CertificateCredential certificateCredential = new CertificateCredential();
+ certificateCredential.setCertificate(x509Certificate);
+ certificateCredential.setPrivateKey(privateKey);
+ certificateCredential.setCommunityUser(getCommunityUser("gw1", "tom"));
+ certificateCredential.setLifeTime(1000);
+ certificateCredential.setPortalUserName("jerry");
+ certificateCredential.setNotBefore("13 OCT 2012 5:34:23");
+ certificateCredential.setNotAfter("14 OCT 2012 5:34:23");
+
+ credentialsDAO.addCredentials(certificateCredential);
+ }
+
+ @Test
+ public void testSerialization() throws IOException, ClassNotFoundException {
+ byte[] array = CredentialsDAO.convertObjectToByteArray(privateKey);
+ PrivateKey newKey = (PrivateKey) CredentialsDAO.convertByteArrayToObject(array);
+
+ Assert.assertNotNull(newKey);
+ Assert.assertEquals(privateKey.toString(), newKey.toString());
+ Assert.assertEquals(privateKey.getAlgorithm(), newKey.getAlgorithm());
+ Assert.assertTrue(Arrays.equals(privateKey.getEncoded(), newKey.getEncoded()));
+ }
+
+ @Test
+ public void testAddCredentials() throws Exception {
+
+ addTestCredentials();
+
+ CertificateCredential certificateCredential
+ = credentialsDAO.getCredential("gw1", "tom");
+ Assert.assertNotNull(certificateCredential);
+ Assert.assertEquals("jerry", certificateCredential.getPortalUserName());
+ Assert.assertEquals(x509Certificate, certificateCredential.getCertificate());
+ Assert.assertEquals(privateKey, certificateCredential.getPrivateKey());
+
+ }
+
+ @Test
+ public void testDeleteCredentials() throws Exception {
+
+ addTestCredentials();
+
+ CertificateCredential certificateCredential
+ = credentialsDAO.getCredential("gw1", "tom");
+ Assert.assertNotNull(certificateCredential);
+
+ credentialsDAO.deleteCredentials("gw1", "tom");
+
+ certificateCredential = credentialsDAO.getCredential("gw1", "tom");
+ Assert.assertNull(certificateCredential);
+ }
+
+ @Test
+ public void testUpdateCredentials() throws Exception {
+
+ addTestCredentials();
+
+ CertificateCredential certificateCredential = new CertificateCredential();
+ certificateCredential.setCommunityUser(getCommunityUser("gw1", "tom"));
+ certificateCredential.setCertificate(x509Certificate);
+ certificateCredential.setPrivateKey(privateKey);
+ certificateCredential.setPortalUserName("test2");
+ certificateCredential.setLifeTime(50);
+ certificateCredential.setNotBefore("15 OCT 2012 5:34:23");
+ certificateCredential.setNotAfter("16 OCT 2012 5:34:23");
+
+ credentialsDAO.updateCredentials(certificateCredential);
+
+ certificateCredential = credentialsDAO.getCredential("gw1", "tom");
+
+ Assert.assertEquals("CN=Airavata Project, OU=IU, O=Indiana University, L=Bloomington, ST=IN, C=US",
+ certificateCredential.getCertificate().getIssuerDN().toString());
+ Assert.assertNotNull(certificateCredential.getPrivateKey());
+ Assert.assertEquals("test2", certificateCredential.getPortalUserName());
+
+ }
+
+ @Test
+ public void testGetCredentials() throws Exception {
+
+ addTestCredentials();
+
+ CertificateCredential certificateCredential = credentialsDAO.getCredential("gw1", "tom");
+
+ Assert.assertEquals("CN=Airavata Project, OU=IU, O=Indiana University, L=Bloomington, ST=IN, C=US",
+ certificateCredential.getCertificate().getIssuerDN().toString());
+ Assert.assertNotNull(certificateCredential.getPrivateKey());
+ }
+
+ @Test
+ public void testGetGatewayCredentials() throws Exception {
+
+ addTestCredentials();
+
+ List<CertificateCredential> list = credentialsDAO.getCredentials("gw1");
+
+ Assert.assertEquals(1, list.size());
+ }
+}
Added: airavata/trunk/modules/credential-store/src/test/resources/keystore.jks
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/credential-store/src/test/resources/keystore.jks?rev=1442196&view=auto
==============================================================================
Binary file - no diff available.
Propchange: airavata/trunk/modules/credential-store/src/test/resources/keystore.jks
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: airavata/trunk/modules/distribution/airavata-server/src/main/resources/bin/data.sql
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/distribution/airavata-server/src/main/resources/bin/data.sql?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/distribution/airavata-server/src/main/resources/bin/data.sql (original)
+++ airavata/trunk/modules/distribution/airavata-server/src/main/resources/bin/data.sql Mon Feb 4 17:40:18 2013
@@ -18,120 +18,120 @@
* under the License.
*
*/
-create table Gateway
+CREATE TABLE Gateway
(
- gateway_name varchar(255),
- owner varchar(255),
+ gateway_name VARCHAR(255),
+ owner VARCHAR(255),
PRIMARY KEY (gateway_name)
);
-create table Configuration
+CREATE TABLE Configuration
(
- config_ID int(11) NOT NULL AUTO_INCREMENT,
- config_key varchar(255),
- config_val varchar(255),
+ config_ID INT(11) NOT NULL AUTO_INCREMENT,
+ config_key VARCHAR(255),
+ config_val VARCHAR(255),
expire_date TIMESTAMP DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(config_ID)
);
-create table Users
+CREATE TABLE Users
(
- user_name varchar(255),
- password varchar(255),
+ user_name VARCHAR(255),
+ password VARCHAR(255),
PRIMARY KEY(user_name)
);
-create table Gateway_Worker
+CREATE TABLE Gateway_Worker
(
- gateway_name varchar(255),
- user_name varchar(255),
+ gateway_name VARCHAR(255),
+ user_name VARCHAR(255),
PRIMARY KEY (gateway_name, user_name),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
FOREIGN KEY (user_name) REFERENCES Users(user_name) ON DELETE CASCADE
);
-create table Project
+CREATE TABLE Project
(
- project_ID int(11) NOT NULL AUTO_INCREMENT,
- gateway_name varchar(255),
- user_name varchar(255),
- project_name varchar(255),
+ project_ID INT(11) NOT NULL AUTO_INCREMENT,
+ gateway_name VARCHAR(255),
+ user_name VARCHAR(255),
+ project_name VARCHAR(255),
PRIMARY KEY(project_ID),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
FOREIGN KEY (user_name) REFERENCES Users(user_name) ON DELETE CASCADE
);
-create table Published_Workflow
+CREATE TABLE Published_Workflow
(
- gateway_name varchar(255),
- created_user varchar(255),
- publish_workflow_name varchar(255),
- version varchar(255),
+ gateway_name VARCHAR(255),
+ created_user VARCHAR(255),
+ publish_workflow_name VARCHAR(255),
+ version VARCHAR(255),
published_date TIMESTAMP DEFAULT '0000-00-00 00:00:00',
- path varchar (255),
- workflow_content varchar(2000),
+ path VARCHAR (255),
+ workflow_content VARCHAR(2000),
PRIMARY KEY(gateway_name, publish_workflow_name),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
FOREIGN KEY (created_user) REFERENCES Users(user_name) ON DELETE CASCADE
);
-create table User_Workflow
+CREATE TABLE User_Workflow
(
- gateway_name varchar(255),
- owner varchar(255),
- template_name varchar(255),
- last_updated_date TIMESTAMP DEFAULT now() on update now(),
- path varchar (255),
- workflow_graph varchar(2000),
+ gateway_name VARCHAR(255),
+ owner VARCHAR(255),
+ template_name VARCHAR(255),
+ last_updated_date TIMESTAMP DEFAULT now() ON UPDATE now(),
+ path VARCHAR (255),
+ workflow_graph VARCHAR(2000),
PRIMARY KEY(gateway_name, owner, template_name),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
FOREIGN KEY (owner) REFERENCES Users(user_name) ON DELETE CASCADE
);
-create table Host_Descriptor
+CREATE TABLE Host_Descriptor
(
- gateway_name varchar(255),
- updated_user varchar(255),
- host_descriptor_ID varchar(255),
- host_descriptor_xml varchar(2000),
+ gateway_name VARCHAR(255),
+ updated_user VARCHAR(255),
+ host_descriptor_ID VARCHAR(255),
+ host_descriptor_xml VARCHAR(2000),
PRIMARY KEY(gateway_name, host_descriptor_ID),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
FOREIGN KEY (updated_user) REFERENCES Users(user_name) ON DELETE CASCADE
);
-create table Service_Descriptor
+CREATE TABLE Service_Descriptor
(
- gateway_name varchar(255),
- updated_user varchar(255),
- service_descriptor_ID varchar(255),
- service_descriptor_xml varchar(2000),
+ gateway_name VARCHAR(255),
+ updated_user VARCHAR(255),
+ service_descriptor_ID VARCHAR(255),
+ service_descriptor_xml VARCHAR(2000),
PRIMARY KEY(gateway_name,service_descriptor_ID),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
FOREIGN KEY (updated_user) REFERENCES Users(user_name) ON DELETE CASCADE
);
-create table Application_Descriptor
+CREATE TABLE Application_Descriptor
(
- gateway_name varchar(255),
- updated_user varchar(255),
- application_descriptor_ID varchar(255),
- host_descriptor_ID varchar(255),
- service_descriptor_ID varchar(255),
- application_descriptor_xml varchar(2000),
+ gateway_name VARCHAR(255),
+ updated_user VARCHAR(255),
+ application_descriptor_ID VARCHAR(255),
+ host_descriptor_ID VARCHAR(255),
+ service_descriptor_ID VARCHAR(255),
+ application_descriptor_xml VARCHAR(2000),
PRIMARY KEY(gateway_name,host_descriptor_ID, service_descriptor_ID,application_descriptor_ID),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
FOREIGN KEY (updated_user) REFERENCES Users(user_name) ON DELETE CASCADE
);
-create table Experiment
+CREATE TABLE Experiment
(
- project_ID int(11),
- gateway_name varchar(255),
- user_name varchar(255),
- experiment_ID varchar(255),
+ project_ID INT(11),
+ gateway_name VARCHAR(255),
+ user_name VARCHAR(255),
+ experiment_ID VARCHAR(255),
submitted_date TIMESTAMP DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(experiment_ID),
FOREIGN KEY (gateway_name) REFERENCES Gateway(gateway_name) ON DELETE CASCADE,
Modified: airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-derby.sql
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-derby.sql?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-derby.sql (original)
+++ airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-derby.sql Mon Feb 4 17:40:18 2013
@@ -195,6 +195,29 @@ create table Gram_Data
FOREIGN KEY (workflow_instanceID) REFERENCES Workflow_Data(workflow_instanceID) ON DELETE CASCADE
);
+CREATE TABLE COMMUNITY_USER
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_EMAIL VARCHAR(256) NOT NULL,
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
+
+CREATE TABLE CREDENTIALS
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ CREDENTIAL BLOB NOT NULL,
+ PRIVATE_KEY BLOB NOT NULL,
+ NOT_BEFORE VARCHAR(256) NOT NULL,
+ NOT_AFTER VARCHAR(256) NOT NULL,
+ LIFETIME INTEGER NOT NULL,
+ REQUESTING_PORTAL_USER_NAME VARCHAR(256) NOT NULL,
+ REQUESTED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
Modified: airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-mysql.sql
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-mysql.sql?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-mysql.sql (original)
+++ airavata/trunk/modules/registry/airavata-jpa-registry/src/main/resources/data-mysql.sql Mon Feb 4 17:40:18 2013
@@ -193,3 +193,27 @@ create table Gram_Data
FOREIGN KEY (workflow_instanceID) REFERENCES Workflow_Data(workflow_instanceID) ON DELETE CASCADE
);
+CREATE TABLE COMMUNITY_USER
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_EMAIL VARCHAR(256) NOT NULL,
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
+
+CREATE TABLE CREDENTIALS
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ CREDENTIAL TEXT NOT NULL,
+ PRIVATE_KEY TEXT NOT NULL,
+ NOT_BEFORE VARCHAR(256) NOT NULL,
+ NOT_AFTER VARCHAR(256) NOT NULL,
+ LIFETIME MEDIUMINT NOT NULL,
+ REQUESTING_PORTAL_USER_NAME VARCHAR(256) NOT NULL,
+ REQUESTED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
+
Modified: airavata/trunk/modules/registry/airavata-jpa-registry/src/test/resources/data-derby.sql
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/airavata-jpa-registry/src/test/resources/data-derby.sql?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/registry/airavata-jpa-registry/src/test/resources/data-derby.sql (original)
+++ airavata/trunk/modules/registry/airavata-jpa-registry/src/test/resources/data-derby.sql Mon Feb 4 17:40:18 2013
@@ -195,6 +195,29 @@ create table Gram_Data
FOREIGN KEY (workflow_instanceID) REFERENCES Workflow_Data(workflow_instanceID) ON DELETE CASCADE
);
+CREATE TABLE COMMUNITY_USER
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_EMAIL VARCHAR(256) NOT NULL,
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
+
+CREATE TABLE CREDENTIALS
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ CREDENTIAL BLOB NOT NULL,
+ PRIVATE_KEY BLOB NOT NULL,
+ NOT_BEFORE VARCHAR(256) NOT NULL,
+ NOT_AFTER VARCHAR(256) NOT NULL,
+ LIFETIME INTEGER NOT NULL,
+ REQUESTING_PORTAL_USER_NAME VARCHAR(256) NOT NULL,
+ REQUESTED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
Modified: airavata/trunk/modules/registry/airavata-registry-test/src/test/resources/data-derby.sql
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/airavata-registry-test/src/test/resources/data-derby.sql?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/registry/airavata-registry-test/src/test/resources/data-derby.sql (original)
+++ airavata/trunk/modules/registry/airavata-registry-test/src/test/resources/data-derby.sql Mon Feb 4 17:40:18 2013
@@ -195,6 +195,29 @@ create table Gram_Data
FOREIGN KEY (workflow_instanceID) REFERENCES Workflow_Data(workflow_instanceID) ON DELETE CASCADE
);
+CREATE TABLE COMMUNITY_USER
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_EMAIL VARCHAR(256) NOT NULL,
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
+
+CREATE TABLE CREDENTIALS
+(
+ GATEWAY_NAME VARCHAR(256) NOT NULL,
+ COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
+ CREDENTIAL BLOB NOT NULL,
+ PRIVATE_KEY BLOB NOT NULL,
+ NOT_BEFORE VARCHAR(256) NOT NULL,
+ NOT_AFTER VARCHAR(256) NOT NULL,
+ LIFETIME INTEGER NOT NULL,
+ REQUESTING_PORTAL_USER_NAME VARCHAR(256) NOT NULL,
+ REQUESTED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (GATEWAY_NAME, COMMUNITY_USER_NAME)
+);
+
Modified: airavata/trunk/modules/rest/service/src/main/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/rest/service/src/main/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStore.java?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/rest/service/src/main/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStore.java (original)
+++ airavata/trunk/modules/rest/service/src/main/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStore.java Mon Feb 4 17:40:18 2013
@@ -59,7 +59,6 @@ public class LocalUserStore {
RegistrySettings.getSetting("registry.jdbc.password"),
RegistrySettings.getSetting("registry.jdbc.driver"));
- dbUtil.init();
}
public LocalUserStore(DBUtil db) {
Modified: airavata/trunk/modules/rest/service/src/test/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStoreTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/rest/service/src/test/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStoreTest.java?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/rest/service/src/test/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStoreTest.java (original)
+++ airavata/trunk/modules/rest/service/src/test/java/org/apache/airavata/services/registry/rest/security/local/LocalUserStoreTest.java Mon Feb 4 17:40:18 2013
@@ -58,7 +58,6 @@ public class LocalUserStoreTest extends
public void setUp() throws Exception {
DBUtil dbUtil = new DBUtil(getJDBCUrl(), getUserName(), getPassword(), getDriver());
- dbUtil.init();
localUserStore = new LocalUserStore(dbUtil);
}
Modified: airavata/trunk/modules/rest/webapp/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/rest/webapp/pom.xml?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/rest/webapp/pom.xml (original)
+++ airavata/trunk/modules/rest/webapp/pom.xml Mon Feb 4 17:40:18 2013
@@ -172,6 +172,16 @@
<artifactId>airavata-jpa-registry</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.airavata</groupId>
+ <artifactId>airavata-credential-store</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>edu.uiuc.ncsa.myproxy</groupId>
+ <artifactId>oa4mp-client-oauth1</artifactId>
+ <version>1.0.6-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.apache.airavata</groupId>
<artifactId>airavata-rest-mappings</artifactId>
Modified: airavata/trunk/modules/rest/webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/rest/webapp/src/main/webapp/WEB-INF/web.xml?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/rest/webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ airavata/trunk/modules/rest/webapp/src/main/webapp/WEB-INF/web.xml Mon Feb 4 17:40:18 2013
@@ -21,6 +21,40 @@
<listener>
<listener-class>org.apache.airavata.rest.mappings.utils.RegistryListener</listener-class>
</listener>
+ <listener>
+ <listener-class>org.apache.airavata.credential.store.servlet.CredentialBootstrapper</listener-class>
+ </listener>
+
+ <context-param>
+ <param-name>oa4mp:client.config.file</param-name>
+ <param-value>${catalina.home}/webapps/airavata-registry/WEB-INF/classes/credential-store/client.xml</param-value>
+ <!--param-value>
+ /home/amila/development/tools/apache-tomcat-7.0.29/webapps/airavata-registry-rest-services/WEB-INF/classes/credential-store/client.xml
+ </param-value-->
+
+ </context-param>
+
+ <!-- Credential store parameters -->
+ <context-param>
+ <param-name>credential-store-jdbc-url</param-name>
+ <param-value>jdbc:mysql://localhost/airavata</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>credential-store-db-user</param-name>
+ <param-value>root</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>credential-store-db-password</param-name>
+ <param-value>root123</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>credential-store-db-driver</param-name>
+ <param-value>com.mysql.jdbc.Driver</param-value>
+ </context-param>
+
<servlet>
<servlet-name>Airavata Web Application</servlet-name>
@@ -54,4 +88,36 @@
<servlet-name>Airavata Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
+
+ <!-- Credential Store Configurations -->
+ <servlet>
+ <servlet-name>credential-store</servlet-name>
+ <!--internal name of the servlet-->
+ <servlet-class>org.apache.airavata.credential.store.servlet.CredentialStoreStartServlet</servlet-class>
+
+ <load-on-startup>1</load-on-startup>
+ <!--load as soon as tomcat starts?-->
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>credential-store</servlet-name>
+ <!--the servlet-name above-->
+ <url-pattern>/credential-store</url-pattern>
+ <!--what needs to be in the url, so http://foo.org/client/simple-->
+ </servlet-mapping>
+
+ <servlet>
+ <servlet-name>callback</servlet-name>
+ <!--internal name of the servlet-->
+ <servlet-class>org.apache.airavata.credential.store.servlet.CredentialStoreCallbackServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ <!--load as soon as tomcat starts?-->
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>callback</servlet-name>
+ <!--the servlet-name above-->
+ <url-pattern>/callback</url-pattern>
+ <!--what needs to be in the url, so http://foo.org/client/simple-->
+ </servlet-mapping>
</web-app>
Modified: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java (original)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/JDBCUserStore.java Mon Feb 4 17:40:18 2013
@@ -131,7 +131,12 @@ public class JDBCUserStore extends Abstr
passwordDigester = new PasswordDigester(passwordHashMethod);
- initializeDatabaseLookup(passwordColumn, userTable, userNameColumn);
+ try {
+ initializeDatabaseLookup(passwordColumn, userTable, userNameColumn);
+ } catch (Exception e) {
+ log.error("Error while initializing database configurations.", e);
+ throw new UserStoreException("Error while initializing database configurations.", e);
+ }
StringBuilder stringBuilder = new StringBuilder(
"Configuring DB parameters for authenticator with User name Table - ");
@@ -141,7 +146,7 @@ public class JDBCUserStore extends Abstr
log.debug(stringBuilder.toString());
}
- protected void initializeDatabaseLookup(String passwordColumn, String userTable, String userNameColumn) {
+ protected void initializeDatabaseLookup(String passwordColumn, String userTable, String userNameColumn) throws IllegalAccessException, ClassNotFoundException, InstantiationException {
DBUtil dbUtil = new DBUtil(getDatabaseURL(), getDatabaseUserName(), getDatabasePassword(), getDatabaseDriver());
DataSource dataSource = dbUtil.getDataSource();
Modified: airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java (original)
+++ airavata/trunk/modules/security/src/main/java/org/apache/airavata/security/userstore/SessionDBUserStore.java Mon Feb 4 17:40:18 2013
@@ -119,10 +119,8 @@ public class SessionDBUserStore extends
private void initializeDatabaseLookup() throws RuntimeException {
- this.dbUtil = new DBUtil(getDatabaseURL(), getDatabaseUserName(), getDatabasePassword(), getDatabaseDriver());
-
try {
- this.dbUtil.init();
+ this.dbUtil = new DBUtil(getDatabaseURL(), getDatabaseUserName(), getDatabasePassword(), getDatabaseDriver());
} catch (ClassNotFoundException e) {
throw new RuntimeException("Error loading database driver. Driver class not found.", e);
} catch (InstantiationException e) {
Modified: airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java (original)
+++ airavata/trunk/modules/security/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java Mon Feb 4 17:40:18 2013
@@ -69,7 +69,7 @@ public class AuthenticatorConfigurationR
assertEquals(true, authenticator.isEnabled());
assertEquals("jdbc:sql:thin:@//myhost:1521/mysql1",
((TestDBAuthenticator1) authenticator).getDatabaseURL());
- assertEquals("org.myqsql.Driver1", ((TestDBAuthenticator1) authenticator).getDatabaseDriver());
+ assertEquals("org.apache.derby.jdbc.ClientDriver", ((TestDBAuthenticator1) authenticator).getDatabaseDriver());
assertEquals("mysql1", ((TestDBAuthenticator1) authenticator).getDatabaseUserName());
assertEquals("secret1", ((TestDBAuthenticator1) authenticator).getDatabasePassword());
assertNotNull(authenticator.getUserStore());
@@ -89,7 +89,7 @@ public class AuthenticatorConfigurationR
assertEquals(true, authenticator.isEnabled());
assertEquals("jdbc:sql:thin:@//myhost:1521/mysql3",
((TestDBAuthenticator3) authenticator).getDatabaseURL());
- assertEquals("org.myqsql.Driver3", ((TestDBAuthenticator3) authenticator).getDatabaseDriver());
+ assertEquals("org.apache.derby.jdbc.ClientDriver", ((TestDBAuthenticator3) authenticator).getDatabaseDriver());
assertEquals("mysql3", ((TestDBAuthenticator3) authenticator).getDatabaseUserName());
assertEquals("secret3", ((TestDBAuthenticator3) authenticator).getDatabasePassword());
assertNotNull(authenticator.getUserStore());
Modified: airavata/trunk/modules/security/src/test/resources/authenticators.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/test/resources/authenticators.xml?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/security/src/test/resources/authenticators.xml (original)
+++ airavata/trunk/modules/security/src/test/resources/authenticators.xml Mon Feb 4 17:40:18 2013
@@ -28,7 +28,7 @@ Those configurations are reside inside &
<userName>mysql1</userName>
<password>secret1</password>
<passwordHashMethod>MD5</passwordHashMethod>
- <databaseDriver>org.myqsql.Driver1</databaseDriver>
+ <databaseDriver>org.apache.derby.jdbc.ClientDriver</databaseDriver>
<sessionTable>Session1</sessionTable>
<sessionColumn>sessioncolumn</sessionColumn>
<comparingColumn>comparecolumn</comparingColumn>
@@ -62,7 +62,7 @@ Those configurations are reside inside &
<jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql2</jdbcUrl>
<userName>mysql2</userName>
<password>secret2</password>
- <databaseDriver>org.myqsql.Driver2</databaseDriver>
+ <databaseDriver>org.apache.derby.jdbc.ClientDriver</databaseDriver>
<sessionTable>Session2</sessionTable>
<sessionColumn>sessioncolumn2</sessionColumn>
<comparingColumn>comparecolumn2</comparingColumn>
@@ -77,7 +77,7 @@ Those configurations are reside inside &
<jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql3</jdbcUrl>
<userName>mysql3</userName>
<password>secret3</password>
- <databaseDriver>org.myqsql.Driver3</databaseDriver>
+ <databaseDriver>org.apache.derby.jdbc.ClientDriver</databaseDriver>
<sessionTable>Session3</sessionTable>
<sessionColumn>sessioncolumn3</sessionColumn>
<comparingColumn>comparecolumn3</comparingColumn>
Modified: airavata/trunk/modules/security/src/test/resources/disabled-authenticator.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/security/src/test/resources/disabled-authenticator.xml?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/modules/security/src/test/resources/disabled-authenticator.xml (original)
+++ airavata/trunk/modules/security/src/test/resources/disabled-authenticator.xml Mon Feb 4 17:40:18 2013
@@ -27,7 +27,7 @@ Those configurations are reside inside &
<jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql1</jdbcUrl>
<userName>mysql1</userName>
<password>secret1</password>
- <databaseDriver>org.myqsql.Driver1</databaseDriver>
+ <databaseDriver>org.apache.derby.jdbc.ClientDriver</databaseDriver>
<sessionTable>Session1</sessionTable>
<sessionColumn>sessioncolumn</sessionColumn>
<comparingColumn>comparecolumn</comparingColumn>
@@ -43,7 +43,7 @@ Those configurations are reside inside &
<jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql2</jdbcUrl>
<userName>mysql2</userName>
<password>secret2</password>
- <databaseDriver>org.myqsql.Driver2</databaseDriver>
+ <databaseDriver>org.apache.derby.jdbc.ClientDriver</databaseDriver>
<sessionTable>Session2</sessionTable>
<sessionColumn>sessioncolumn2</sessionColumn>
<comparingColumn>comparecolumn2</comparingColumn>
@@ -58,7 +58,7 @@ Those configurations are reside inside &
<jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql2</jdbcUrl>
<userName>mysql2</userName>
<password>secret2</password>
- <databaseDriver>org.myqsql.Driver2</databaseDriver>
+ <databaseDriver>org.apache.derby.jdbc.ClientDriver</databaseDriver>
<sessionTable>Session2</sessionTable>
<sessionColumn>sessioncolumn2</sessionColumn>
<comparingColumn>comparecolumn2</comparingColumn>
@@ -73,7 +73,7 @@ Those configurations are reside inside &
<jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql3</jdbcUrl>
<userName>mysql3</userName>
<password>secret3</password>
- <databaseDriver>org.myqsql.Driver3</databaseDriver>
+ <databaseDriver>org.apache.derby.jdbc.ClientDriver</databaseDriver>
<sessionTable>Session3</sessionTable>
<sessionColumn>sessioncolumn3</sessionColumn>
<comparingColumn>comparecolumn3</comparingColumn>
Modified: airavata/trunk/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/pom.xml?rev=1442196&r1=1442195&r2=1442196&view=diff
==============================================================================
--- airavata/trunk/pom.xml (original)
+++ airavata/trunk/pom.xml Mon Feb 4 17:40:18 2013
@@ -68,6 +68,7 @@
<axis2.version>1.5.1</axis2.version>
<derby.version>10.9.1.0</derby.version>
<org.slf4j.version>1.7.2</org.slf4j.version>
+ <log4j.version>1.2.16</log4j.version>
<axiom.version>1.2.8</axiom.version>
<surefire.version>2.12</surefire.version>
<junit.version>4.7</junit.version>
@@ -311,6 +312,11 @@
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>${log4j.version}</version>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
@@ -340,6 +346,16 @@
</snapshots>
</repository>
<repository>
+ <name>oa4mp.repo</name>
+ <id>oa4mp.repo</id>
+ <url>http://cilogon.svn.sourceforge.net/viewvc/cilogon/m2-repo/snapshots</url>
+ <snapshots>
+ <!--updatePolicy>daily</updatePolicy -->
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+
+ <repository>
<id>m2-snapshot-repository</id>
<url>http://people.apache.org/repo/m2-snapshot-repository</url>
<releases>
@@ -428,6 +444,7 @@
<module>modules/registry</module>
<module>modules/airavata-client</module>
<module>modules/security</module>
+ <module>modules/credential-store</module>
<module>modules/rest</module>
<module>tools</module>
<module>samples/simple-math-service</module>