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>