Repository: airavata
Updated Branches:
  refs/heads/master 7f8988096 -> c6fe0decd


http://git-wip-us.apache.org/repos/asf/airavata/blob/c6fe0dec/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/server/CredentialStoreServerHandler.java
----------------------------------------------------------------------
diff --git 
a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/server/CredentialStoreServerHandler.java
 
b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/server/CredentialStoreServerHandler.java
index ce54319..65ee48a 100644
--- 
a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/server/CredentialStoreServerHandler.java
+++ 
b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/server/CredentialStoreServerHandler.java
@@ -1,29 +1,35 @@
 package org.apache.airavata.credential.store.server;
 
 import org.apache.airavata.common.exception.ApplicationSettingsException;
-import org.apache.airavata.common.utils.ApplicationSettings;
 import org.apache.airavata.common.utils.DBUtil;
-import org.apache.airavata.common.utils.DefaultKeyStorePasswordCallback;
 import org.apache.airavata.common.utils.ServerSettings;
 import org.apache.airavata.credential.store.cpi.CredentialStoreService;
 import org.apache.airavata.credential.store.cpi.cs_cpi_serviceConstants;
+import org.apache.airavata.credential.store.credential.CommunityUser;
+import org.apache.airavata.credential.store.credential.Credential;
 import org.apache.airavata.credential.store.datamodel.CertificateCredential;
 import org.apache.airavata.credential.store.datamodel.PasswordCredential;
 import org.apache.airavata.credential.store.datamodel.SSHCredential;
 import org.apache.airavata.credential.store.store.CredentialStoreException;
-import org.apache.airavata.credential.store.store.impl.db.CredentialsDAO;
+import 
org.apache.airavata.credential.store.store.impl.CertificateCredentialWriter;
+import org.apache.airavata.credential.store.store.impl.CredentialReaderImpl;
+import org.apache.airavata.credential.store.store.impl.SSHCredentialWriter;
 import org.apache.airavata.credential.store.util.TokenGenerator;
+import org.apache.airavata.credential.store.util.Utility;
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.sql.Connection;
-import java.sql.SQLException;
+import java.io.ByteArrayInputStream;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
 
 public class CredentialStoreServerHandler implements 
CredentialStoreService.Iface {
     protected static Logger log = 
LoggerFactory.getLogger(CredentialStoreServerHandler.class);
     private DBUtil dbUtil;
-    private CredentialsDAO credentialsDAO;
+    private SSHCredentialWriter sshCredentialWriter;
+    private CertificateCredentialWriter certificateCredentialWriter;
+    private CredentialReaderImpl credentialReader;
 
     public CredentialStoreServerHandler() throws ApplicationSettingsException, 
IllegalAccessException, ClassNotFoundException, InstantiationException {
         String jdbcUrl = ServerSettings.getCredentialStoreDBURL();
@@ -33,8 +39,9 @@ public class CredentialStoreServerHandler implements 
CredentialStoreService.Ifac
 
         log.debug("Starting credential store, connecting to database - " + 
jdbcUrl + " DB user - " + userName + " driver name - " + driverName);
         dbUtil = new DBUtil(jdbcUrl, userName, password, driverName);
-        this.credentialsDAO = new 
CredentialsDAO(ApplicationSettings.getCredentialStoreKeyStorePath(),
-                ApplicationSettings.getCredentialStoreKeyAlias(), new 
DefaultKeyStorePasswordCallback());
+        sshCredentialWriter = new SSHCredentialWriter(dbUtil);
+        certificateCredentialWriter = new CertificateCredentialWriter(dbUtil);
+        credentialReader = new CredentialReaderImpl(dbUtil);
     }
 
     @Override
@@ -44,53 +51,58 @@ public class CredentialStoreServerHandler implements 
CredentialStoreService.Ifac
 
     @Override
     public String addSSHCredential(SSHCredential sshCredential) throws 
org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
-        Connection connection = null;
-        org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential 
credential = new 
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential();
-        credential.setGateway(sshCredential.getGatewayId());
-        credential.setPortalUserName(sshCredential.getUsername());
-        // only username and gateway id will be sent by client.
-        String token = 
TokenGenerator.generateToken(sshCredential.getGatewayId(), null);
-        credential.setToken(token);
-        credential.setPassphrase(sshCredential.getPassphrase());
-        if (sshCredential.getPrivateKey() != null){
-            credential.setPrivateKey(sshCredential.getPrivateKey().getBytes());
-        }
-        if (sshCredential.getPublicKey() != null){
-            credential.setPublicKey(sshCredential.getPublicKey().getBytes());
-        }
         try {
-            connection = dbUtil.getConnection();
-            // First delete existing credentials
-            credentialsDAO.deleteCredentials(sshCredential.getGatewayId(), 
sshCredential.getToken(), connection);
-            // Add the new certificate
-            credentialsDAO.addCredentials(sshCredential.getGatewayId(), 
credential, connection);
-
-            if (!connection.getAutoCommit()) {
-                connection.commit();
+            
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential 
credential = new 
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential();
+            credential.setGateway(sshCredential.getGatewayId());
+            credential.setPortalUserName(sshCredential.getUsername());
+            // only username and gateway id will be sent by client.
+            String token = 
TokenGenerator.generateToken(sshCredential.getGatewayId(), null);
+            credential.setToken(token);
+            credential.setPassphrase(sshCredential.getPassphrase());
+            if (sshCredential.getPrivateKey() != null) {
+                
credential.setPrivateKey(sshCredential.getPrivateKey().getBytes());
             }
-            return token;
-
-        } catch (SQLException e) {
-            if (connection != null) {
-                try {
-                    connection.rollback();
-                } catch (SQLException e1) {
-                    log.error("Unable to rollback transaction", e1);
-                }
+            if (sshCredential.getPublicKey() != null) {
+                
credential.setPublicKey(sshCredential.getPublicKey().getBytes());
+            }
+            if (sshCredential.getPublicKey() == null || 
sshCredential.getPrivateKey() == null) {
+                credential = 
Utility.generateKeyPair(sshCredential.getUsername(), 
sshCredential.getPassphrase());
             }
-            log.error("Unable to retrieve database connection.", e);
-            throw new 
org.apache.airavata.credential.store.exception.CredentialStoreException("Unable 
to retrieve database connection.");
+            sshCredentialWriter.writeCredentials(credential);
+            return token;
         } catch (CredentialStoreException e) {
             log.error("Error occurred while saving SSH Credentials.", e);
             throw new 
org.apache.airavata.credential.store.exception.CredentialStoreException("Error 
occurred while saving SSH Credentials.");
-        } finally {
-            DBUtil.cleanup(connection);
+        } catch (Exception e) {
+            log.error("Error occurred while generating key pair.", e);
+            throw new 
org.apache.airavata.credential.store.exception.CredentialStoreException("Error 
occurred while generating key pair..");
         }
     }
 
     @Override
     public String addCertificateCredential(CertificateCredential 
certificateCredential) throws 
org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
-        return null;
+        try {
+            
org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential
 credential = new 
org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential();
+            
credential.setPortalUserName(certificateCredential.getCommunityUser().getUsername());
+            credential.setCommunityUser(new 
CommunityUser(certificateCredential.getCommunityUser().getGatewayNmae(),
+                    certificateCredential.getCommunityUser().getUsername(), 
certificateCredential.getCommunityUser().getUserEmail()));
+            String token = 
TokenGenerator.generateToken(certificateCredential.getCommunityUser().getGatewayNmae(),
 null);
+            credential.setToken(token);
+            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            ByteArrayInputStream stream = new 
ByteArrayInputStream(certificateCredential.getX509Cert().getBytes());
+            X509Certificate certificate = 
(X509Certificate)cf.generateCertificate(stream);
+            X509Certificate[] certificates = new X509Certificate[1];
+            certificates[0] = certificate;
+            credential.setCertificates(certificates);
+            certificateCredentialWriter.writeCredentials(credential);
+            return token;
+        } catch (CredentialStoreException e) {
+            log.error("Error occurred while saving SSH Credentials.", e);
+            throw new 
org.apache.airavata.credential.store.exception.CredentialStoreException("Error 
occurred while saving SSH Credentials.");
+        } catch (Exception e) {
+            log.error("Error occurred while generating key pair.", e);
+            throw new 
org.apache.airavata.credential.store.exception.CredentialStoreException("Error 
occurred while generating key pair..");
+        }
     }
 
     @Override
@@ -99,17 +111,66 @@ public class CredentialStoreServerHandler implements 
CredentialStoreService.Ifac
     }
 
     @Override
-    public SSHCredential getSSHCredential(String tokenId) throws 
org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
-        return null;
+    public SSHCredential getSSHCredential(String tokenId, String gatewayId) 
throws org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
+        try {
+            Credential credential = credentialReader.getCredential(gatewayId, 
tokenId);
+            if (credential instanceof 
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential) {
+                
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential 
credential1 = 
(org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential) 
credential;
+                SSHCredential sshCredential = new SSHCredential();
+                sshCredential.setUsername(credential1.getPortalUserName());
+                sshCredential.setGatewayId(credential1.getGateway());
+                sshCredential.setPublicKey(new 
String(credential1.getPublicKey()));
+                sshCredential.setPrivateKey(new 
String(credential1.getPrivateKey()));
+                sshCredential.setPassphrase(credential1.getPassphrase());
+                sshCredential.setToken(credential1.getToken());
+                
sshCredential.setPersistedTime(credential1.getCertificateRequestedTime().getTime());
+                return sshCredential;
+            } else {
+                log.info("Could not find SSH credentials for token - " + 
tokenId + " and "
+                        + "gateway id - " + gatewayId);
+                return null;
+            }
+        } catch (CredentialStoreException e) {
+            log.error("Error occurred while retrieving SSH credentialfor token 
- " +  tokenId + " and gateway id - " + gatewayId, e);
+            throw new 
org.apache.airavata.credential.store.exception.CredentialStoreException("Error 
occurred while retrieving SSH credential for token - " +  tokenId + " and 
gateway id - " + gatewayId);
+        }
     }
 
     @Override
-    public CertificateCredential getCertificateCredential(String tokenId) 
throws org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
-        return null;
+    public CertificateCredential getCertificateCredential(String tokenId, 
String gatewayId) throws 
org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
+        try {
+            Credential credential = credentialReader.getCredential(gatewayId, 
tokenId);
+            if (credential instanceof 
org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential)
 {
+                
org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential
 credential1 = 
(org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential)
 credential;
+                CertificateCredential certificateCredential = new 
CertificateCredential();
+                org.apache.airavata.credential.store.datamodel.CommunityUser 
communityUser = new 
org.apache.airavata.credential.store.datamodel.CommunityUser();
+                
communityUser.setGatewayNmae(credential1.getCommunityUser().getGatewayName());
+                
communityUser.setUsername(credential1.getCommunityUser().getUserName());
+                
communityUser.setUserEmail(credential1.getCommunityUser().getUserEmail());
+                certificateCredential.setCommunityUser(communityUser);
+                certificateCredential.setToken(credential1.getToken());
+                certificateCredential.setLifeTime(credential1.getLifeTime());
+                certificateCredential.setNotAfter(credential1.getNotAfter());
+                certificateCredential.setNotBefore(credential1.getNotBefore());
+                
certificateCredential.setPersistedTime(credential1.getCertificateRequestedTime().getTime());
+                if (credential1.getPrivateKey() != null){
+                    
certificateCredential.setPrivateKey(credential1.getPrivateKey().toString());
+                }
+                
certificateCredential.setX509Cert(credential1.getCertificates()[0].toString());
+                return certificateCredential;
+            } else {
+                log.info("Could not find Certificate credentials for token - " 
+ tokenId + " and "
+                        + "gateway id - " + gatewayId);
+                return null;
+            }
+        } catch (CredentialStoreException e) {
+            log.error("Error occurred while retrieving Certificate credential 
for token - " +  tokenId + " and gateway id - " + gatewayId, e);
+            throw new 
org.apache.airavata.credential.store.exception.CredentialStoreException("Error 
occurred while retrieving Certificate credential for token - " +  tokenId + " 
and gateway id - " + gatewayId);
+        }
     }
 
     @Override
-    public PasswordCredential getPasswordCredential(String tokenId) throws 
org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
+    public PasswordCredential getPasswordCredential(String tokenId, String 
gatewayId) throws 
org.apache.airavata.credential.store.exception.CredentialStoreException, 
TException {
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/c6fe0dec/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java
----------------------------------------------------------------------
diff --git 
a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java
 
b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java
index b4f7455..9f97ee9 100644
--- 
a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java
+++ 
b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/Utility.java
@@ -21,9 +21,15 @@
 
 package org.apache.airavata.credential.store.util;
 
+import com.jcraft.jsch.JSch;
+import com.jcraft.jsch.KeyPair;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
 import java.io.FileInputStream;
 import java.security.KeyStore;
-import java.security.KeyStoreException;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -34,6 +40,8 @@ import java.util.Date;
  */
 public class Utility {
 
+    protected static Logger log = LoggerFactory.getLogger(Utility.class);
+
     private static final String DATE_FORMAT = "MM/dd/yyyy HH:mm:ss";
 
     public static String convertDateToString(Date date) {
@@ -75,4 +83,30 @@ public class Utility {
         return new char[0];
     }
 
+    public static 
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential 
generateKeyPair(String userName, String passphrase) throws Exception{
+        JSch jsch=new JSch();
+        try{
+            KeyPair kpair=KeyPair.genKeyPair(jsch, KeyPair.RSA);
+            File file = File.createTempFile("id_rsa", "");
+            String fileName = file.getAbsolutePath();
+
+            kpair.writePrivateKey(fileName,passphrase.getBytes());
+            kpair.writePublicKey(fileName + ".pub"  , "");
+            kpair.dispose();
+            byte[] priKey = FileUtils.readFileToByteArray(new File(fileName));
+
+            byte[] pubKey = FileUtils.readFileToByteArray(new File(fileName + 
".pub"));
+            
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential 
sshCredential = new 
org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential();
+            sshCredential.setPrivateKey(priKey);
+            sshCredential.setPublicKey(pubKey);
+            sshCredential.setPortalUserName(userName);
+            sshCredential.setPassphrase(passphrase);
+            return sshCredential;
+        }
+        catch(Exception e){
+            log.error("Error while creating key pair", e);
+            throw new Exception("Error while creating key pair", e);
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/c6fe0dec/modules/credential-store-service/cs-thrift-description/cs.cpi.service.thrift
----------------------------------------------------------------------
diff --git 
a/modules/credential-store-service/cs-thrift-description/cs.cpi.service.thrift 
b/modules/credential-store-service/cs-thrift-description/cs.cpi.service.thrift
index 9191bd2..b4f078b 100644
--- 
a/modules/credential-store-service/cs-thrift-description/cs.cpi.service.thrift
+++ 
b/modules/credential-store-service/cs-thrift-description/cs.cpi.service.thrift
@@ -41,9 +41,9 @@ service CredentialStoreService {
   string addSSHCredential (1: required csDataModel.SSHCredential 
sshCredential) throws (1:credentialStoreErrors.CredentialStoreException 
csException) ;
   string addCertificateCredential (1: required 
csDataModel.CertificateCredential certificateCredential) throws 
(1:credentialStoreErrors.CredentialStoreException csException);
   string addPasswordCredential (1: required csDataModel.PasswordCredential 
passwordCredential) throws (1:credentialStoreErrors.CredentialStoreException 
csException);
-  csDataModel.SSHCredential getSSHCredential (1: required string tokenId) 
throws (1:credentialStoreErrors.CredentialStoreException csException);
-  csDataModel.CertificateCredential getCertificateCredential (1: required 
string tokenId) throws (1:credentialStoreErrors.CredentialStoreException 
csException);
-  csDataModel.PasswordCredential getPasswordCredential (1: required string 
tokenId) throws (1:credentialStoreErrors.CredentialStoreException csException);
+  csDataModel.SSHCredential getSSHCredential (1: required string tokenId, 2: 
required string gatewayId) throws 
(1:credentialStoreErrors.CredentialStoreException csException);
+  csDataModel.CertificateCredential getCertificateCredential (1: required 
string tokenId, 2: required string gatewayId) throws 
(1:credentialStoreErrors.CredentialStoreException csException);
+  csDataModel.PasswordCredential getPasswordCredential (1: required string 
tokenId, 2: required string gatewayId) throws 
(1:credentialStoreErrors.CredentialStoreException csException);
 
 
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/c6fe0dec/modules/credential-store-service/cs-thrift-description/csDataModel.thrift
----------------------------------------------------------------------
diff --git 
a/modules/credential-store-service/cs-thrift-description/csDataModel.thrift 
b/modules/credential-store-service/cs-thrift-description/csDataModel.thrift
index 28dc977..efd3dd5 100644
--- a/modules/credential-store-service/cs-thrift-description/csDataModel.thrift
+++ b/modules/credential-store-service/cs-thrift-description/csDataModel.thrift
@@ -29,10 +29,10 @@ const string DEFAULT_ID = "DO_NOT_SET_AT_CLIENTS"
 struct SSHCredential {
     1: required string gatewayId,
     2: required string username,
-    3: optional string passphrase,
+    3: required string passphrase,
     4: optional string publicKey,
     5: optional string privateKey,
-    6: optional i32 persistedTime,
+    6: optional i64 persistedTime,
     7: optional string token
 }
 
@@ -44,18 +44,18 @@ struct CommunityUser {
 
 struct CertificateCredential {
     1: required CommunityUser communityUser,
-    2: optional string notAfter,
-    3: optional string x509Cert,
+    2: required string x509Cert,
+    3: optional string notAfter,
     4: optional string privateKey,
-    5: optional i32 lifeTime,
+    5: optional i64 lifeTime,
     6: optional string notBefore
-    7: optional i32 persistedTime,
+    7: optional i64 persistedTime,
     8: optional string token
 }
 
 struct PasswordCredential {
     1: required string username,
     2: required string password,
-    3: optional i32 persistedTime,
+    3: optional i64 persistedTime,
     4: optional string token
 }

Reply via email to