adding capability to store and retreive PWD credentials in the Airavata API
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/3bb7f493 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/3bb7f493 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/3bb7f493 Branch: refs/heads/develop Commit: 3bb7f493dc9ab3b71177c1e1ac9b14c25e406519 Parents: 63825ce Author: scnakandala <[email protected]> Authored: Sun May 1 14:28:36 2016 -0400 Committer: scnakandala <[email protected]> Committed: Sun May 1 14:28:36 2016 -0400 ---------------------------------------------------------------------- .../server/handler/AiravataServerHandler.java | 70 + .../java/org/apache/airavata/api/Airavata.java | 14469 +++++++++++------ .../main/resources/lib/airavata/Airavata.cpp | 4505 +++-- .../src/main/resources/lib/airavata/Airavata.h | 492 + .../lib/airavata/Airavata_server.skeleton.cpp | 38 + .../resources/lib/Airavata/API/Airavata.php | 7181 ++++---- .../lib/apache/airavata/api/Airavata-remote | 21 + .../lib/apache/airavata/api/Airavata.py | 1447 +- .../impl/password/PasswordCredential.java | 11 +- .../server/CredentialStoreServerHandler.java | 72 +- .../store/cpi/CredentialStoreService.java | 2249 ++- .../store/datamodel/CertificateCredential.java | 2 +- .../store/datamodel/CommunityUser.java | 2 +- .../store/datamodel/PasswordCredential.java | 254 +- .../store/datamodel/SSHCredential.java | 2 +- .../exception/CredentialStoreException.java | 2 +- .../apache/airavata/gfac/cpi/GfacService.java | 2 +- .../orchestrator/cpi/OrchestratorService.java | 2 +- .../airavata-apis/airavata_api.thrift | 41 + .../component-cpis/credential-store-cpi.thrift | 3 + .../credential_store_data_models.thrift | 17 +- 21 files changed, 20911 insertions(+), 9971 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/3bb7f493/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java index a8b3375..4b6d2f3 100644 --- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java +++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java @@ -31,6 +31,7 @@ import org.apache.airavata.common.utils.ServerSettings; import org.apache.airavata.credential.store.client.CredentialStoreClientFactory; import org.apache.airavata.credential.store.cpi.CredentialStoreService; import org.apache.airavata.credential.store.datamodel.SSHCredential; +import org.apache.airavata.credential.store.datamodel.PasswordCredential; import org.apache.airavata.credential.store.exception.CredentialStoreException; import org.apache.airavata.messaging.core.MessageContext; import org.apache.airavata.messaging.core.Publisher; @@ -405,6 +406,40 @@ public class AiravataServerHandler implements Airavata.Iface { } } + /** + * Generate and Register Username PWD Pair with Airavata Credential Store. + * + * @param authzToken + * @param gatewayId The identifier for the requested Gateway. + * @param userName The User for which the credential should be registered. For community accounts, this user is the name of the + * community user name. For computational resources, this user name need not be the same user name on resoruces. + * @param password + * @return airavataCredStoreToken + * An SSH Key pair is generated and stored in the credential store and associated with users or community account + * belonging to a Gateway. + */ + @Override + public String registerPwdCredential(AuthzToken authzToken, String gatewayId, String userName, String password) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException { + try { + if (csClient == null){ + csClient = getCredentialStoreServiceClient(); + } + PasswordCredential pwdCredential = new PasswordCredential(); + pwdCredential.setUsername(userName); + pwdCredential.setPassword(password); + pwdCredential.setGatewayId(gatewayId); + String key = csClient.addPasswordCredential(pwdCredential); + logger.debug("Airavata generated PWD credential for gateway : " + gatewayId + " and for user : " + userName); + return key; + }catch (Exception e){ + logger.error("Error occurred while registering PWD Credential", e); + AiravataSystemException exception = new AiravataSystemException(); + exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR); + exception.setMessage("Error occurred while registering PWD Credential. More info : " + e.getMessage()); + throw exception; + } + } + @Override @SecurityCheck public String getSSHPubKey(AuthzToken authzToken, String airavataCredStoreToken, String gatewayId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException { @@ -461,6 +496,24 @@ public class AiravataServerHandler implements Airavata.Iface { } @Override + public Map<String, String> getAllGatewayPWDCredentials(AuthzToken authzToken, String gatewayId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException { + try { + if (csClient == null){ + csClient = getCredentialStoreServiceClient(); + } + Map<String, String> allPwdCredentials = csClient.getAllPWDCredentialsForGateway(gatewayId); + logger.debug("Airavata retrieved all PWD Credentials for gateway Id : " + gatewayId); + return allPwdCredentials; + }catch (Exception e){ + logger.error("Error occurred while retrieving PWD Credentials for gateway : " + gatewayId , e); + AiravataSystemException exception = new AiravataSystemException(); + exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR); + exception.setMessage("Error occurred while retrieving PWD Credentials for gateway : " + gatewayId + ". More info : " + e.getMessage()); + throw exception; + } + } + + @Override public boolean deleteSSHPubKey(AuthzToken authzToken, String airavataCredStoreToken, String gatewayId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException { try { if (csClient == null){ @@ -477,6 +530,23 @@ public class AiravataServerHandler implements Airavata.Iface { } } + @Override + public boolean deletePWDCredential(AuthzToken authzToken, String airavataCredStoreToken, String gatewayId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException { + try { + if (csClient == null){ + csClient = getCredentialStoreServiceClient(); + } + logger.debug("Airavata deleted PWD credential for gateway Id : " + gatewayId + " and with token id : " + airavataCredStoreToken); + return csClient.deletePWDCredential(airavataCredStoreToken, gatewayId); + }catch (Exception e){ + logger.error("Error occurred while deleting PWD credential", e); + AiravataSystemException exception = new AiravataSystemException(); + exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR); + exception.setMessage("Error occurred while deleting PWD credential. More info : " + e.getMessage()); + throw exception; + } + } + /** * Create a Project *
