Repository: airavata Updated Branches: refs/heads/master f568594a1 -> 7f8988096
http://git-wip-us.apache.org/repos/asf/airavata/blob/7f898809/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/exception/CredentialStoreException.java ---------------------------------------------------------------------- diff --git a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/exception/CredentialStoreException.java b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/exception/CredentialStoreException.java new file mode 100644 index 0000000..7be01da --- /dev/null +++ b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/exception/CredentialStoreException.java @@ -0,0 +1,397 @@ + /* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Autogenerated by Thrift Compiler (0.9.1) + * + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * @generated + */ +package org.apache.airavata.credential.store.exception; + +import org.apache.thrift.scheme.IScheme; +import org.apache.thrift.scheme.SchemeFactory; +import org.apache.thrift.scheme.StandardScheme; + +import org.apache.thrift.scheme.TupleScheme; +import org.apache.thrift.protocol.TTupleProtocol; +import org.apache.thrift.protocol.TProtocolException; +import org.apache.thrift.EncodingUtils; +import org.apache.thrift.TException; +import org.apache.thrift.async.AsyncMethodCallback; +import org.apache.thrift.server.AbstractNonblockingServer.*; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.EnumMap; +import java.util.Set; +import java.util.HashSet; +import java.util.EnumSet; +import java.util.Collections; +import java.util.BitSet; +import java.nio.ByteBuffer; +import java.util.Arrays; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@SuppressWarnings("all") public class CredentialStoreException extends TException implements org.apache.thrift.TBase<CredentialStoreException, CredentialStoreException._Fields>, java.io.Serializable, Cloneable, Comparable<CredentialStoreException> { + private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("CredentialStoreException"); + + private static final org.apache.thrift.protocol.TField MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("message", org.apache.thrift.protocol.TType.STRING, (short)1); + + private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>(); + static { + schemes.put(StandardScheme.class, new CredentialStoreExceptionStandardSchemeFactory()); + schemes.put(TupleScheme.class, new CredentialStoreExceptionTupleSchemeFactory()); + } + + public String message; // required + + /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ + @SuppressWarnings("all") public enum _Fields implements org.apache.thrift.TFieldIdEnum { + MESSAGE((short)1, "message"); + + private static final Map<String, _Fields> byName = new HashMap<String, _Fields>(); + + static { + for (_Fields field : EnumSet.allOf(_Fields.class)) { + byName.put(field.getFieldName(), field); + } + } + + /** + * Find the _Fields constant that matches fieldId, or null if its not found. + */ + public static _Fields findByThriftId(int fieldId) { + switch(fieldId) { + case 1: // MESSAGE + return MESSAGE; + default: + return null; + } + } + + /** + * Find the _Fields constant that matches fieldId, throwing an exception + * if it is not found. + */ + public static _Fields findByThriftIdOrThrow(int fieldId) { + _Fields fields = findByThriftId(fieldId); + if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!"); + return fields; + } + + /** + * Find the _Fields constant that matches name, or null if its not found. + */ + public static _Fields findByName(String name) { + return byName.get(name); + } + + private final short _thriftId; + private final String _fieldName; + + _Fields(short thriftId, String fieldName) { + _thriftId = thriftId; + _fieldName = fieldName; + } + + public short getThriftFieldId() { + return _thriftId; + } + + public String getFieldName() { + return _fieldName; + } + } + + // isset id assignments + public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; + static { + Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); + tmpMap.put(_Fields.MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("message", org.apache.thrift.TFieldRequirementType.REQUIRED, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); + metaDataMap = Collections.unmodifiableMap(tmpMap); + org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(CredentialStoreException.class, metaDataMap); + } + + public CredentialStoreException() { + } + + public CredentialStoreException( + String message) + { + this(); + this.message = message; + } + + /** + * Performs a deep copy on <i>other</i>. + */ + public CredentialStoreException(CredentialStoreException other) { + if (other.isSetMessage()) { + this.message = other.message; + } + } + + public CredentialStoreException deepCopy() { + return new CredentialStoreException(this); + } + + @Override + public void clear() { + this.message = null; + } + + public String getMessage() { + return this.message; + } + + public CredentialStoreException setMessage(String message) { + this.message = message; + return this; + } + + public void unsetMessage() { + this.message = null; + } + + /** Returns true if field message is set (has been assigned a value) and false otherwise */ + public boolean isSetMessage() { + return this.message != null; + } + + public void setMessageIsSet(boolean value) { + if (!value) { + this.message = null; + } + } + + public void setFieldValue(_Fields field, Object value) { + switch (field) { + case MESSAGE: + if (value == null) { + unsetMessage(); + } else { + setMessage((String)value); + } + break; + + } + } + + public Object getFieldValue(_Fields field) { + switch (field) { + case MESSAGE: + return getMessage(); + + } + throw new IllegalStateException(); + } + + /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ + public boolean isSet(_Fields field) { + if (field == null) { + throw new IllegalArgumentException(); + } + + switch (field) { + case MESSAGE: + return isSetMessage(); + } + throw new IllegalStateException(); + } + + @Override + public boolean equals(Object that) { + if (that == null) + return false; + if (that instanceof CredentialStoreException) + return this.equals((CredentialStoreException)that); + return false; + } + + public boolean equals(CredentialStoreException that) { + if (that == null) + return false; + + boolean this_present_message = true && this.isSetMessage(); + boolean that_present_message = true && that.isSetMessage(); + if (this_present_message || that_present_message) { + if (!(this_present_message && that_present_message)) + return false; + if (!this.message.equals(that.message)) + return false; + } + + return true; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + public int compareTo(CredentialStoreException other) { + if (!getClass().equals(other.getClass())) { + return getClass().getName().compareTo(other.getClass().getName()); + } + + int lastComparison = 0; + + lastComparison = Boolean.valueOf(isSetMessage()).compareTo(other.isSetMessage()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetMessage()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.message, other.message); + if (lastComparison != 0) { + return lastComparison; + } + } + return 0; + } + + public _Fields fieldForId(int fieldId) { + return _Fields.findByThriftId(fieldId); + } + + public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { + schemes.get(iprot.getScheme()).getScheme().read(iprot, this); + } + + public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { + schemes.get(oprot.getScheme()).getScheme().write(oprot, this); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("CredentialStoreException("); + boolean first = true; + + sb.append("message:"); + if (this.message == null) { + sb.append("null"); + } else { + sb.append(this.message); + } + first = false; + sb.append(")"); + return sb.toString(); + } + + public void validate() throws org.apache.thrift.TException { + // check for required fields + if (message == null) { + throw new org.apache.thrift.protocol.TProtocolException("Required field 'message' was not present! Struct: " + toString()); + } + // check for sub-struct validity + } + + private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { + try { + write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { + try { + read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private static class CredentialStoreExceptionStandardSchemeFactory implements SchemeFactory { + public CredentialStoreExceptionStandardScheme getScheme() { + return new CredentialStoreExceptionStandardScheme(); + } + } + + private static class CredentialStoreExceptionStandardScheme extends StandardScheme<CredentialStoreException> { + + public void read(org.apache.thrift.protocol.TProtocol iprot, CredentialStoreException struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TField schemeField; + iprot.readStructBegin(); + while (true) + { + schemeField = iprot.readFieldBegin(); + if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { + break; + } + switch (schemeField.id) { + case 1: // MESSAGE + if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { + struct.message = iprot.readString(); + struct.setMessageIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + default: + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + iprot.readFieldEnd(); + } + iprot.readStructEnd(); + + // check for required fields of primitive type, which can't be checked in the validate method + struct.validate(); + } + + public void write(org.apache.thrift.protocol.TProtocol oprot, CredentialStoreException struct) throws org.apache.thrift.TException { + struct.validate(); + + oprot.writeStructBegin(STRUCT_DESC); + if (struct.message != null) { + oprot.writeFieldBegin(MESSAGE_FIELD_DESC); + oprot.writeString(struct.message); + oprot.writeFieldEnd(); + } + oprot.writeFieldStop(); + oprot.writeStructEnd(); + } + + } + + private static class CredentialStoreExceptionTupleSchemeFactory implements SchemeFactory { + public CredentialStoreExceptionTupleScheme getScheme() { + return new CredentialStoreExceptionTupleScheme(); + } + } + + private static class CredentialStoreExceptionTupleScheme extends TupleScheme<CredentialStoreException> { + + @Override + public void write(org.apache.thrift.protocol.TProtocol prot, CredentialStoreException struct) throws org.apache.thrift.TException { + TTupleProtocol oprot = (TTupleProtocol) prot; + oprot.writeString(struct.message); + } + + @Override + public void read(org.apache.thrift.protocol.TProtocol prot, CredentialStoreException struct) throws org.apache.thrift.TException { + TTupleProtocol iprot = (TTupleProtocol) prot; + struct.message = iprot.readString(); + struct.setMessageIsSet(true); + } + } + +} + http://git-wip-us.apache.org/repos/asf/airavata/blob/7f898809/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 56c9ffd..ce54319 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,44 +1,117 @@ 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.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.util.TokenGenerator; import org.apache.thrift.TException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.SQLException; public class CredentialStoreServerHandler implements CredentialStoreService.Iface { + protected static Logger log = LoggerFactory.getLogger(CredentialStoreServerHandler.class); + private DBUtil dbUtil; + private CredentialsDAO credentialsDAO; + + public CredentialStoreServerHandler() throws ApplicationSettingsException, IllegalAccessException, ClassNotFoundException, InstantiationException { + String jdbcUrl = ServerSettings.getCredentialStoreDBURL(); + String userName = ServerSettings.getCredentialStoreDBUser(); + String password = ServerSettings.getCredentialStoreDBPassword(); + String driverName = ServerSettings.getCredentialStoreDBDriver(); + + 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()); + } + @Override public String getCSServiceVersion() throws TException { - return null; + return cs_cpi_serviceConstants.CS_CPI_VERSION; } @Override - public String addSSHCredential(SSHCredential sshCredential) throws TException { - return null; + 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(); + } + return token; + + } catch (SQLException e) { + if (connection != null) { + try { + connection.rollback(); + } catch (SQLException e1) { + log.error("Unable to rollback transaction", e1); + } + } + log.error("Unable to retrieve database connection.", e); + throw new org.apache.airavata.credential.store.exception.CredentialStoreException("Unable to retrieve database connection."); + } 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); + } } @Override - public String addCertificateCredential(CertificateCredential certificateCredential) throws TException { + public String addCertificateCredential(CertificateCredential certificateCredential) throws org.apache.airavata.credential.store.exception.CredentialStoreException, TException { return null; } @Override - public String addPasswordCredential(PasswordCredential passwordCredential) throws TException { + public String addPasswordCredential(PasswordCredential passwordCredential) throws org.apache.airavata.credential.store.exception.CredentialStoreException, TException { return null; } @Override - public SSHCredential getSSHCredential(String tokenId) throws TException { + public SSHCredential getSSHCredential(String tokenId) throws org.apache.airavata.credential.store.exception.CredentialStoreException, TException { return null; } @Override - public CertificateCredential getCertificateCredential(String tokenId) throws TException { + public CertificateCredential getCertificateCredential(String tokenId) throws org.apache.airavata.credential.store.exception.CredentialStoreException, TException { return null; } @Override - public PasswordCredential getPasswordCredential(String tokenId) throws TException { + public PasswordCredential getPasswordCredential(String tokenId) throws org.apache.airavata.credential.store.exception.CredentialStoreException, TException { return null; } + + } http://git-wip-us.apache.org/repos/asf/airavata/blob/7f898809/modules/credential-store-service/cs-thrift-description/credentialStoreErrors.thrift ---------------------------------------------------------------------- diff --git a/modules/credential-store-service/cs-thrift-description/credentialStoreErrors.thrift b/modules/credential-store-service/cs-thrift-description/credentialStoreErrors.thrift new file mode 100644 index 0000000..148d7f2 --- /dev/null +++ b/modules/credential-store-service/cs-thrift-description/credentialStoreErrors.thrift @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +/* +* This file describes the definitions of the Error Messages that can occur +* when invoking Apache Airavata Services through the API. In addition Thrift provides +* built in funcationality to raise TApplicationException for all internal server errors. +*/ + +namespace java org.apache.airavata.credential.store.exception +namespace php Airavata.Credential.Store.Error + +exception CredentialStoreException { + 1: required string message +} http://git-wip-us.apache.org/repos/asf/airavata/blob/7f898809/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 859b6f5..9191bd2 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 @@ -24,7 +24,7 @@ */ include "csDataModel.thrift" -include "airavataErrors.thrift" +include "credentialStoreErrors.thrift" namespace java org.apache.airavata.credential.store.cpi @@ -38,12 +38,12 @@ service CredentialStoreService { /** * This method is to add SSHCredential which will return the token Id in success **/ - string addSSHCredential (1: required csDataModel.SSHCredential sshCredential) ; - string addCertificateCredential (1: required csDataModel.CertificateCredential certificateCredential); - string addPasswordCredential (1: required csDataModel.PasswordCredential passwordCredential); - csDataModel.SSHCredential getSSHCredential (1: required string tokenId); - csDataModel.CertificateCredential getCertificateCredential (1: required string tokenId); - csDataModel.PasswordCredential getPasswordCredential (1: required string tokenId); + 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);
