Implemented Orchestrator side improvements of AIRAVATA-1426
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/9a138b54 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/9a138b54 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/9a138b54 Branch: refs/heads/orchestratorJobThrottleFeature Commit: 9a138b5414f57c323855f7d32b3d42c8ebd2130d Parents: d7bb140 Author: shamrath <[email protected]> Authored: Thu Sep 18 11:36:29 2014 -0400 Committer: shamrath <[email protected]> Committed: Thu Sep 18 11:36:29 2014 -0400 ---------------------------------------------------------------------- .../server/handler/AiravataServerHandler.java | 6 +- .../java/org/apache/airavata/api/Airavata.java | 125 +++++++- .../main/resources/lib/airavata/Airavata.cpp | 28 +- .../src/main/resources/lib/airavata/Airavata.h | 24 +- .../lib/airavata/Airavata_server.skeleton.cpp | 2 +- .../resources/lib/Airavata/API/Airavata.php | 29 +- .../airavataAPI.thrift | 2 +- .../airavata/common/utils/AiravataUtils.java | 100 +++++- .../airavata/common/utils/AiravataZKUtils.java | 2 - .../apache/airavata/common/utils/Constants.java | 9 + .../airavata/common/utils/RequestData.java | 148 +++++++++ .../airavata/common/utils/ServerSettings.java | 6 + .../credential-store/pom.xml | 20 ++ .../store/util/AuthenticationInfo.java | 32 ++ .../store/util/GSIAuthenticationInfo.java | 43 +++ .../store/util/TokenizedMyProxyAuthInfo.java | 283 +++++++++++++++++ .../airavata/credential/store/util/Utility.java | 17 ++ .../gfac/bes/security/GSISecurityContext.java | 4 +- .../airavata/gfac/AbstractSecurityContext.java | 2 +- .../org/apache/airavata/gfac/Constants.java | 8 +- .../org/apache/airavata/gfac/RequestData.java | 148 --------- .../airavata/gfac/core/utils/GFacUtils.java | 10 - .../gfac/gram/security/GSISecurityContext.java | 8 +- .../impl/GFacBaseTestWithMyProxyAuth.java | 2 +- .../gsissh/security/GSISecurityContext.java | 21 +- .../security/TokenizedMyProxyAuthInfo.java | 302 ------------------- .../gfac/gsissh/util/GFACGSISSHUtils.java | 4 +- .../impl/GSISSHProviderTestWithMyProxyAuth.java | 2 +- .../GSISecurityContextTestWithMyProxyAuth.java | 5 +- .../airavata/gfac/monitor/HPCMonitorID.java | 4 +- .../handlers/GridPullMonitorHandler.java | 2 +- .../handlers/GridPushMonitorHandler.java | 2 +- .../monitor/impl/pull/qstat/HPCPullMonitor.java | 2 +- .../impl/pull/qstat/ResourceConnection.java | 2 +- .../apache/airavata/job/AMQPMonitorTest.java | 2 +- .../job/QstatMonitorTestWithMyProxyAuth.java | 2 +- .../ssh/handler/AdvancedSCPInputHandler.java | 3 +- .../ssh/handler/AdvancedSCPOutputHandler.java | 3 +- .../gfac/ssh/security/TokenizedSSHAuthInfo.java | 5 +- .../airavata/gfac/ssh/util/GFACSSHUtils.java | 8 +- .../services/impl/BigRed2TestWithSSHAuth.java | 2 +- .../gfac/services/impl/CredentialStoreTest.java | 2 +- .../orchestrator/cpi/OrchestratorService.java | 125 +++++++- .../cpi/orchestrator_cpi_serviceConstants.java | 2 +- .../server/OrchestratorServerHandler.java | 4 +- .../core/validator/JobMetadataValidator.java | 3 +- .../impl/ExperimentStatusValidator.java | 3 +- .../core/validator/impl/JobCountValidator.java | 158 ++++++++++ .../validator/impl/SimpleAppDataValidator.java | 3 +- .../airavata/orchestrator/cpi/Orchestrator.java | 3 +- .../cpi/impl/SimpleOrchestratorImpl.java | 84 +++--- .../orchestrator/core/util/SecondValidator.java | 3 +- .../orchestrator/core/util/TestValidator.java | 3 +- .../orchestrator.cpi.service.thrift | 2 +- .../xbaya/invoker/EmbeddedGFacInvoker.java | 2 +- tools/gsissh/pom.xml | 7 +- .../java/com/jcraft/jsch/ExtendedSession.java | 3 +- .../UserAuthGSSAPIWithMICGSSCredentials.java | 2 +- .../airavata/gsi/ssh/api/CommandExecutor.java | 2 + .../api/authentication/AuthenticationInfo.java | 32 -- .../authentication/GSIAuthenticationInfo.java | 43 --- .../authentication/SSHKeyAuthentication.java | 2 + .../SSHPasswordAuthentication.java | 2 + .../gsi/ssh/impl/GSISSHAbstractCluster.java | 2 + .../airavata/gsi/ssh/impl/PBSCluster.java | 3 +- .../DefaultPasswordAuthenticationInfo.java | 2 - .../MyProxyAuthenticationInfo.java | 2 +- .../airavata/gsi/ssh/jsch/ExtendedJSch.java | 2 +- .../apache/airavata/gsi/ssh/util/SSHUtils.java | 2 +- .../impl/DefaultSSHApiTestWithMyProxyAuth.java | 11 +- .../gsi/ssh/impl/VanilaTestWithSSHAuth.java | 3 +- 71 files changed, 1225 insertions(+), 721 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/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 1051654..707bf96 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 @@ -915,7 +915,7 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher { * @param airavataExperimentId */ @Override - public boolean validateExperiment(String airavataExperimentId) throws InvalidRequestException, ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException { + public boolean validateExperiment(String airavataExperimentId, String airavataCredStoreToken) throws InvalidRequestException, ExperimentNotFoundException, AiravataClientException, AiravataSystemException, TException { try { registry = RegistryFactory.getDefaultRegistry(); if (!registry.isExist(RegistryModelType.EXPERIMENT, airavataExperimentId)){ @@ -929,7 +929,7 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher { throw exception; } - if (getOrchestratorClient().validateExperiment(airavataExperimentId)) { + if (getOrchestratorClient().validateExperiment(airavataExperimentId, airavataCredStoreToken)) { return true; } else { return false; @@ -1164,7 +1164,7 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher { if (executionType==ExecutionType.SINGLE_APP){ //its an single application execution experiment final OrchestratorService.Client orchestratorClient = getOrchestratorClient(); - if (orchestratorClient.validateExperiment(expID)) { + if (orchestratorClient.validateExperiment(expID,airavataCredStoreToken)) { thread = new Thread() { public void run() { try { http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java index 26c48f6..377944f 100644 --- a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java +++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java @@ -305,8 +305,9 @@ import org.slf4j.LoggerFactory; * * * * @param airavataExperimentId + * @param airavataCredStoreToken */ - public boolean validateExperiment(String airavataExperimentId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.ExperimentNotFoundException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException; + public boolean validateExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.ExperimentNotFoundException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException; /** * Launch a previously created and configured experiment. Airavata Server will then start processing the request and appropriate @@ -1315,7 +1316,7 @@ import org.slf4j.LoggerFactory; public void updateResourceScheduleing(String airavataExperimentId, org.apache.airavata.model.workspace.experiment.ComputationalResourceScheduling resourceScheduling, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException; - public void validateExperiment(String airavataExperimentId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException; + public void validateExperiment(String airavataExperimentId, String airavataCredStoreToken, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException; public void launchExperiment(String airavataExperimentId, String airavataCredStoreToken, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException; @@ -2059,16 +2060,17 @@ import org.slf4j.LoggerFactory; return; } - public boolean validateExperiment(String airavataExperimentId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.ExperimentNotFoundException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException + public boolean validateExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.ExperimentNotFoundException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException { - send_validateExperiment(airavataExperimentId); + send_validateExperiment(airavataExperimentId, airavataCredStoreToken); return recv_validateExperiment(); } - public void send_validateExperiment(String airavataExperimentId) throws org.apache.thrift.TException + public void send_validateExperiment(String airavataExperimentId, String airavataCredStoreToken) throws org.apache.thrift.TException { validateExperiment_args args = new validateExperiment_args(); args.setAiravataExperimentId(airavataExperimentId); + args.setAiravataCredStoreToken(airavataCredStoreToken); sendBase("validateExperiment", args); } @@ -4660,24 +4662,27 @@ import org.slf4j.LoggerFactory; } } - public void validateExperiment(String airavataExperimentId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException { + public void validateExperiment(String airavataExperimentId, String airavataCredStoreToken, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException { checkReady(); - validateExperiment_call method_call = new validateExperiment_call(airavataExperimentId, resultHandler, this, ___protocolFactory, ___transport); + validateExperiment_call method_call = new validateExperiment_call(airavataExperimentId, airavataCredStoreToken, resultHandler, this, ___protocolFactory, ___transport); this.___currentMethod = method_call; ___manager.call(method_call); } public static class validateExperiment_call extends org.apache.thrift.async.TAsyncMethodCall { private String airavataExperimentId; - public validateExperiment_call(String airavataExperimentId, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException { + private String airavataCredStoreToken; + public validateExperiment_call(String airavataExperimentId, String airavataCredStoreToken, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException { super(client, protocolFactory, transport, resultHandler, false); this.airavataExperimentId = airavataExperimentId; + this.airavataCredStoreToken = airavataCredStoreToken; } public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException { prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("validateExperiment", org.apache.thrift.protocol.TMessageType.CALL, 0)); validateExperiment_args args = new validateExperiment_args(); args.setAiravataExperimentId(airavataExperimentId); + args.setAiravataCredStoreToken(airavataCredStoreToken); args.write(prot); prot.writeMessageEnd(); } @@ -7274,7 +7279,7 @@ import org.slf4j.LoggerFactory; public validateExperiment_result getResult(I iface, validateExperiment_args args) throws org.apache.thrift.TException { validateExperiment_result result = new validateExperiment_result(); try { - result.success = iface.validateExperiment(args.airavataExperimentId); + result.success = iface.validateExperiment(args.airavataExperimentId, args.airavataCredStoreToken); result.setSuccessIsSet(true); } catch (org.apache.airavata.model.error.InvalidRequestException ire) { result.ire = ire; @@ -10387,7 +10392,7 @@ import org.slf4j.LoggerFactory; } public void start(I iface, validateExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException { - iface.validateExperiment(args.airavataExperimentId,resultHandler); + iface.validateExperiment(args.airavataExperimentId, args.airavataCredStoreToken,resultHandler); } } @@ -34613,6 +34618,7 @@ import org.slf4j.LoggerFactory; private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("validateExperiment_args"); private static final org.apache.thrift.protocol.TField AIRAVATA_EXPERIMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("airavataExperimentId", org.apache.thrift.protocol.TType.STRING, (short)1); + private static final org.apache.thrift.protocol.TField AIRAVATA_CRED_STORE_TOKEN_FIELD_DESC = new org.apache.thrift.protocol.TField("airavataCredStoreToken", org.apache.thrift.protocol.TType.STRING, (short)2); private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>(); static { @@ -34621,10 +34627,12 @@ import org.slf4j.LoggerFactory; } public String airavataExperimentId; // required + public String airavataCredStoreToken; // 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 { - AIRAVATA_EXPERIMENT_ID((short)1, "airavataExperimentId"); + AIRAVATA_EXPERIMENT_ID((short)1, "airavataExperimentId"), + AIRAVATA_CRED_STORE_TOKEN((short)2, "airavataCredStoreToken"); private static final Map<String, _Fields> byName = new HashMap<String, _Fields>(); @@ -34641,6 +34649,8 @@ import org.slf4j.LoggerFactory; switch(fieldId) { case 1: // AIRAVATA_EXPERIMENT_ID return AIRAVATA_EXPERIMENT_ID; + case 2: // AIRAVATA_CRED_STORE_TOKEN + return AIRAVATA_CRED_STORE_TOKEN; default: return null; } @@ -34686,6 +34696,8 @@ import org.slf4j.LoggerFactory; Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); tmpMap.put(_Fields.AIRAVATA_EXPERIMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("airavataExperimentId", org.apache.thrift.TFieldRequirementType.REQUIRED, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); + tmpMap.put(_Fields.AIRAVATA_CRED_STORE_TOKEN, new org.apache.thrift.meta_data.FieldMetaData("airavataCredStoreToken", 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(validateExperiment_args.class, metaDataMap); } @@ -34694,10 +34706,12 @@ import org.slf4j.LoggerFactory; } public validateExperiment_args( - String airavataExperimentId) + String airavataExperimentId, + String airavataCredStoreToken) { this(); this.airavataExperimentId = airavataExperimentId; + this.airavataCredStoreToken = airavataCredStoreToken; } /** @@ -34707,6 +34721,9 @@ import org.slf4j.LoggerFactory; if (other.isSetAiravataExperimentId()) { this.airavataExperimentId = other.airavataExperimentId; } + if (other.isSetAiravataCredStoreToken()) { + this.airavataCredStoreToken = other.airavataCredStoreToken; + } } public validateExperiment_args deepCopy() { @@ -34716,6 +34733,7 @@ import org.slf4j.LoggerFactory; @Override public void clear() { this.airavataExperimentId = null; + this.airavataCredStoreToken = null; } public String getAiravataExperimentId() { @@ -34742,6 +34760,30 @@ import org.slf4j.LoggerFactory; } } + public String getAiravataCredStoreToken() { + return this.airavataCredStoreToken; + } + + public validateExperiment_args setAiravataCredStoreToken(String airavataCredStoreToken) { + this.airavataCredStoreToken = airavataCredStoreToken; + return this; + } + + public void unsetAiravataCredStoreToken() { + this.airavataCredStoreToken = null; + } + + /** Returns true if field airavataCredStoreToken is set (has been assigned a value) and false otherwise */ + public boolean isSetAiravataCredStoreToken() { + return this.airavataCredStoreToken != null; + } + + public void setAiravataCredStoreTokenIsSet(boolean value) { + if (!value) { + this.airavataCredStoreToken = null; + } + } + public void setFieldValue(_Fields field, Object value) { switch (field) { case AIRAVATA_EXPERIMENT_ID: @@ -34752,6 +34794,14 @@ import org.slf4j.LoggerFactory; } break; + case AIRAVATA_CRED_STORE_TOKEN: + if (value == null) { + unsetAiravataCredStoreToken(); + } else { + setAiravataCredStoreToken((String)value); + } + break; + } } @@ -34760,6 +34810,9 @@ import org.slf4j.LoggerFactory; case AIRAVATA_EXPERIMENT_ID: return getAiravataExperimentId(); + case AIRAVATA_CRED_STORE_TOKEN: + return getAiravataCredStoreToken(); + } throw new IllegalStateException(); } @@ -34773,6 +34826,8 @@ import org.slf4j.LoggerFactory; switch (field) { case AIRAVATA_EXPERIMENT_ID: return isSetAiravataExperimentId(); + case AIRAVATA_CRED_STORE_TOKEN: + return isSetAiravataCredStoreToken(); } throw new IllegalStateException(); } @@ -34799,6 +34854,15 @@ import org.slf4j.LoggerFactory; return false; } + boolean this_present_airavataCredStoreToken = true && this.isSetAiravataCredStoreToken(); + boolean that_present_airavataCredStoreToken = true && that.isSetAiravataCredStoreToken(); + if (this_present_airavataCredStoreToken || that_present_airavataCredStoreToken) { + if (!(this_present_airavataCredStoreToken && that_present_airavataCredStoreToken)) + return false; + if (!this.airavataCredStoreToken.equals(that.airavataCredStoreToken)) + return false; + } + return true; } @@ -34825,6 +34889,16 @@ import org.slf4j.LoggerFactory; return lastComparison; } } + lastComparison = Boolean.valueOf(isSetAiravataCredStoreToken()).compareTo(other.isSetAiravataCredStoreToken()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetAiravataCredStoreToken()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.airavataCredStoreToken, other.airavataCredStoreToken); + if (lastComparison != 0) { + return lastComparison; + } + } return 0; } @@ -34852,6 +34926,14 @@ import org.slf4j.LoggerFactory; sb.append(this.airavataExperimentId); } first = false; + if (!first) sb.append(", "); + sb.append("airavataCredStoreToken:"); + if (this.airavataCredStoreToken == null) { + sb.append("null"); + } else { + sb.append(this.airavataCredStoreToken); + } + first = false; sb.append(")"); return sb.toString(); } @@ -34861,6 +34943,9 @@ import org.slf4j.LoggerFactory; if (airavataExperimentId == null) { throw new org.apache.thrift.protocol.TProtocolException("Required field 'airavataExperimentId' was not present! Struct: " + toString()); } + if (airavataCredStoreToken == null) { + throw new org.apache.thrift.protocol.TProtocolException("Required field 'airavataCredStoreToken' was not present! Struct: " + toString()); + } // check for sub-struct validity } @@ -34906,6 +34991,14 @@ import org.slf4j.LoggerFactory; org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } break; + case 2: // AIRAVATA_CRED_STORE_TOKEN + if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { + struct.airavataCredStoreToken = iprot.readString(); + struct.setAiravataCredStoreTokenIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; default: org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); } @@ -34926,6 +35019,11 @@ import org.slf4j.LoggerFactory; oprot.writeString(struct.airavataExperimentId); oprot.writeFieldEnd(); } + if (struct.airavataCredStoreToken != null) { + oprot.writeFieldBegin(AIRAVATA_CRED_STORE_TOKEN_FIELD_DESC); + oprot.writeString(struct.airavataCredStoreToken); + oprot.writeFieldEnd(); + } oprot.writeFieldStop(); oprot.writeStructEnd(); } @@ -34944,6 +35042,7 @@ import org.slf4j.LoggerFactory; public void write(org.apache.thrift.protocol.TProtocol prot, validateExperiment_args struct) throws org.apache.thrift.TException { TTupleProtocol oprot = (TTupleProtocol) prot; oprot.writeString(struct.airavataExperimentId); + oprot.writeString(struct.airavataCredStoreToken); } @Override @@ -34951,6 +35050,8 @@ import org.slf4j.LoggerFactory; TTupleProtocol iprot = (TTupleProtocol) prot; struct.airavataExperimentId = iprot.readString(); struct.setAiravataExperimentIdIsSet(true); + struct.airavataCredStoreToken = iprot.readString(); + struct.setAiravataCredStoreTokenIsSet(true); } } http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp index 759b47e..8baa1ed 100644 --- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp +++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.cpp @@ -4716,6 +4716,7 @@ uint32_t Airavata_validateExperiment_args::read(::apache::thrift::protocol::TPro using ::apache::thrift::protocol::TProtocolException; bool isset_airavataExperimentId = false; + bool isset_airavataCredStoreToken = false; while (true) { @@ -4733,6 +4734,14 @@ uint32_t Airavata_validateExperiment_args::read(::apache::thrift::protocol::TPro xfer += iprot->skip(ftype); } break; + case 2: + if (ftype == ::apache::thrift::protocol::T_STRING) { + xfer += iprot->readString(this->airavataCredStoreToken); + isset_airavataCredStoreToken = true; + } else { + xfer += iprot->skip(ftype); + } + break; default: xfer += iprot->skip(ftype); break; @@ -4744,6 +4753,8 @@ uint32_t Airavata_validateExperiment_args::read(::apache::thrift::protocol::TPro if (!isset_airavataExperimentId) throw TProtocolException(TProtocolException::INVALID_DATA); + if (!isset_airavataCredStoreToken) + throw TProtocolException(TProtocolException::INVALID_DATA); return xfer; } @@ -4755,6 +4766,10 @@ uint32_t Airavata_validateExperiment_args::write(::apache::thrift::protocol::TPr xfer += oprot->writeString(this->airavataExperimentId); xfer += oprot->writeFieldEnd(); + xfer += oprot->writeFieldBegin("airavataCredStoreToken", ::apache::thrift::protocol::T_STRING, 2); + xfer += oprot->writeString(this->airavataCredStoreToken); + xfer += oprot->writeFieldEnd(); + xfer += oprot->writeFieldStop(); xfer += oprot->writeStructEnd(); return xfer; @@ -4768,6 +4783,10 @@ uint32_t Airavata_validateExperiment_pargs::write(::apache::thrift::protocol::TP xfer += oprot->writeString((*(this->airavataExperimentId))); xfer += oprot->writeFieldEnd(); + xfer += oprot->writeFieldBegin("airavataCredStoreToken", ::apache::thrift::protocol::T_STRING, 2); + xfer += oprot->writeString((*(this->airavataCredStoreToken))); + xfer += oprot->writeFieldEnd(); + xfer += oprot->writeFieldStop(); xfer += oprot->writeStructEnd(); return xfer; @@ -20424,19 +20443,20 @@ void AiravataClient::recv_updateResourceScheduleing() return; } -bool AiravataClient::validateExperiment(const std::string& airavataExperimentId) +bool AiravataClient::validateExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) { - send_validateExperiment(airavataExperimentId); + send_validateExperiment(airavataExperimentId, airavataCredStoreToken); return recv_validateExperiment(); } -void AiravataClient::send_validateExperiment(const std::string& airavataExperimentId) +void AiravataClient::send_validateExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) { int32_t cseqid = 0; oprot_->writeMessageBegin("validateExperiment", ::apache::thrift::protocol::T_CALL, cseqid); Airavata_validateExperiment_pargs args; args.airavataExperimentId = &airavataExperimentId; + args.airavataCredStoreToken = &airavataCredStoreToken; args.write(oprot_); oprot_->writeMessageEnd(); @@ -25659,7 +25679,7 @@ void AiravataProcessor::process_validateExperiment(int32_t seqid, ::apache::thri Airavata_validateExperiment_result result; try { - result.success = iface_->validateExperiment(args.airavataExperimentId); + result.success = iface_->validateExperiment(args.airavataExperimentId, args.airavataCredStoreToken); result.__isset.success = true; } catch ( ::apache::airavata::api::error::InvalidRequestException &ire) { result.ire = ire; http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h index 2028749..03b5fc2 100644 --- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h +++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata.h @@ -51,7 +51,7 @@ class AiravataIf { virtual void updateExperiment(const std::string& airavataExperimentId, const ::apache::airavata::model::workspace::experiment::Experiment& experiment) = 0; virtual void updateExperimentConfiguration(const std::string& airavataExperimentId, const ::apache::airavata::model::workspace::experiment::UserConfigurationData& userConfiguration) = 0; virtual void updateResourceScheduleing(const std::string& airavataExperimentId, const ::apache::airavata::model::workspace::experiment::ComputationalResourceScheduling& resourceScheduling) = 0; - virtual bool validateExperiment(const std::string& airavataExperimentId) = 0; + virtual bool validateExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) = 0; virtual void launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) = 0; virtual void getExperimentStatus( ::apache::airavata::model::workspace::experiment::ExperimentStatus& _return, const std::string& airavataExperimentId) = 0; virtual void getExperimentOutputs(std::vector< ::apache::airavata::model::workspace::experiment::DataObjectType> & _return, const std::string& airavataExperimentId) = 0; @@ -196,7 +196,7 @@ class AiravataNull : virtual public AiravataIf { void updateResourceScheduleing(const std::string& /* airavataExperimentId */, const ::apache::airavata::model::workspace::experiment::ComputationalResourceScheduling& /* resourceScheduling */) { return; } - bool validateExperiment(const std::string& /* airavataExperimentId */) { + bool validateExperiment(const std::string& /* airavataExperimentId */, const std::string& /* airavataCredStoreToken */) { bool _return = false; return _return; } @@ -2937,21 +2937,28 @@ class Airavata_updateResourceScheduleing_presult { class Airavata_validateExperiment_args { public: - Airavata_validateExperiment_args() : airavataExperimentId() { + Airavata_validateExperiment_args() : airavataExperimentId(), airavataCredStoreToken() { } virtual ~Airavata_validateExperiment_args() throw() {} std::string airavataExperimentId; + std::string airavataCredStoreToken; void __set_airavataExperimentId(const std::string& val) { airavataExperimentId = val; } + void __set_airavataCredStoreToken(const std::string& val) { + airavataCredStoreToken = val; + } + bool operator == (const Airavata_validateExperiment_args & rhs) const { if (!(airavataExperimentId == rhs.airavataExperimentId)) return false; + if (!(airavataCredStoreToken == rhs.airavataCredStoreToken)) + return false; return true; } bool operator != (const Airavata_validateExperiment_args &rhs) const { @@ -2973,6 +2980,7 @@ class Airavata_validateExperiment_pargs { virtual ~Airavata_validateExperiment_pargs() throw() {} const std::string* airavataExperimentId; + const std::string* airavataCredStoreToken; uint32_t write(::apache::thrift::protocol::TProtocol* oprot) const; @@ -11131,8 +11139,8 @@ class AiravataClient : virtual public AiravataIf { void updateResourceScheduleing(const std::string& airavataExperimentId, const ::apache::airavata::model::workspace::experiment::ComputationalResourceScheduling& resourceScheduling); void send_updateResourceScheduleing(const std::string& airavataExperimentId, const ::apache::airavata::model::workspace::experiment::ComputationalResourceScheduling& resourceScheduling); void recv_updateResourceScheduleing(); - bool validateExperiment(const std::string& airavataExperimentId); - void send_validateExperiment(const std::string& airavataExperimentId); + bool validateExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken); + void send_validateExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken); bool recv_validateExperiment(); void launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken); void send_launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken); @@ -11696,13 +11704,13 @@ class AiravataMultiface : virtual public AiravataIf { ifaces_[i]->updateResourceScheduleing(airavataExperimentId, resourceScheduling); } - bool validateExperiment(const std::string& airavataExperimentId) { + bool validateExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) { size_t sz = ifaces_.size(); size_t i = 0; for (; i < (sz - 1); ++i) { - ifaces_[i]->validateExperiment(airavataExperimentId); + ifaces_[i]->validateExperiment(airavataExperimentId, airavataCredStoreToken); } - return ifaces_[i]->validateExperiment(airavataExperimentId); + return ifaces_[i]->validateExperiment(airavataExperimentId, airavataCredStoreToken); } void launchExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) { http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp index 4f92b09..7aab0f8 100644 --- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp +++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/Airavata_server.skeleton.cpp @@ -134,7 +134,7 @@ class AiravataHandler : virtual public AiravataIf { printf("updateResourceScheduleing\n"); } - bool validateExperiment(const std::string& airavataExperimentId) { + bool validateExperiment(const std::string& airavataExperimentId, const std::string& airavataCredStoreToken) { // Your implementation goes here printf("validateExperiment\n"); } http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php index e7e9c75..4dd3b20 100644 --- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php +++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/API/Airavata.php @@ -36,7 +36,7 @@ interface AiravataIf { public function updateExperiment($airavataExperimentId, \Airavata\Model\Workspace\Experiment\Experiment $experiment); public function updateExperimentConfiguration($airavataExperimentId, \Airavata\Model\Workspace\Experiment\UserConfigurationData $userConfiguration); public function updateResourceScheduleing($airavataExperimentId, \Airavata\Model\Workspace\Experiment\ComputationalResourceScheduling $resourceScheduling); - public function validateExperiment($airavataExperimentId); + public function validateExperiment($airavataExperimentId, $airavataCredStoreToken); public function launchExperiment($airavataExperimentId, $airavataCredStoreToken); public function getExperimentStatus($airavataExperimentId); public function getExperimentOutputs($airavataExperimentId); @@ -1244,16 +1244,17 @@ class AiravataClient implements \Airavata\API\AiravataIf { return; } - public function validateExperiment($airavataExperimentId) + public function validateExperiment($airavataExperimentId, $airavataCredStoreToken) { - $this->send_validateExperiment($airavataExperimentId); + $this->send_validateExperiment($airavataExperimentId, $airavataCredStoreToken); return $this->recv_validateExperiment(); } - public function send_validateExperiment($airavataExperimentId) + public function send_validateExperiment($airavataExperimentId, $airavataCredStoreToken) { $args = new \Airavata\API\Airavata_validateExperiment_args(); $args->airavataExperimentId = $airavataExperimentId; + $args->airavataCredStoreToken = $airavataCredStoreToken; $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary'); if ($bin_accel) { @@ -9268,6 +9269,7 @@ class Airavata_validateExperiment_args { static $_TSPEC; public $airavataExperimentId = null; + public $airavataCredStoreToken = null; public function __construct($vals=null) { if (!isset(self::$_TSPEC)) { @@ -9276,12 +9278,19 @@ class Airavata_validateExperiment_args { 'var' => 'airavataExperimentId', 'type' => TType::STRING, ), + 2 => array( + 'var' => 'airavataCredStoreToken', + 'type' => TType::STRING, + ), ); } if (is_array($vals)) { if (isset($vals['airavataExperimentId'])) { $this->airavataExperimentId = $vals['airavataExperimentId']; } + if (isset($vals['airavataCredStoreToken'])) { + $this->airavataCredStoreToken = $vals['airavataCredStoreToken']; + } } } @@ -9311,6 +9320,13 @@ class Airavata_validateExperiment_args { $xfer += $input->skip($ftype); } break; + case 2: + if ($ftype == TType::STRING) { + $xfer += $input->readString($this->airavataCredStoreToken); + } else { + $xfer += $input->skip($ftype); + } + break; default: $xfer += $input->skip($ftype); break; @@ -9329,6 +9345,11 @@ class Airavata_validateExperiment_args { $xfer += $output->writeString($this->airavataExperimentId); $xfer += $output->writeFieldEnd(); } + if ($this->airavataCredStoreToken !== null) { + $xfer += $output->writeFieldBegin('airavataCredStoreToken', TType::STRING, 2); + $xfer += $output->writeString($this->airavataCredStoreToken); + $xfer += $output->writeFieldEnd(); + } $xfer += $output->writeFieldStop(); $xfer += $output->writeStructEnd(); return $xfer; http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/airavata-api/thrift-interface-descriptions/airavataAPI.thrift ---------------------------------------------------------------------- diff --git a/airavata-api/thrift-interface-descriptions/airavataAPI.thrift b/airavata-api/thrift-interface-descriptions/airavataAPI.thrift index e712d16..6e2b2a5 100644 --- a/airavata-api/thrift-interface-descriptions/airavataAPI.thrift +++ b/airavata-api/thrift-interface-descriptions/airavataAPI.thrift @@ -332,7 +332,7 @@ service Airavata { * @return sucess/failure * **/ - bool validateExperiment(1: required string airavataExperimentId) + bool validateExperiment(1: required string airavataExperimentId, 2: required string airavataCredStoreToken) throws (1: airavataErrors.InvalidRequestException ire, 2: airavataErrors.ExperimentNotFoundException enf, 3: airavataErrors.AiravataClientException ace, http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java ---------------------------------------------------------------------- diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java index 6c29313..5d47d10 100644 --- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java +++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java @@ -21,11 +21,30 @@ package org.apache.airavata.common.utils; +import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.WatchedEvent; +import org.apache.zookeeper.Watcher; +import org.apache.zookeeper.ZooDefs; +import org.apache.zookeeper.ZooKeeper; +import org.slf4j.LoggerFactory; + +import java.io.IOException; import java.sql.Timestamp; import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; public class AiravataUtils { - public static final String EXECUTION_MODE="application.execution.mode"; + private static final org.slf4j.Logger log = LoggerFactory.getLogger(AiravataUtils.class); + + private static Map<String, Integer> jobCountMap; + + private static final String statPath = "/" + Constants.STAT; + + + public static final String EXECUTION_MODE="application.execution.mode"; public static void setExecutionMode(ExecutionMode mode){ System.setProperty(EXECUTION_MODE, mode.name()); } @@ -66,4 +85,83 @@ public class AiravataUtils { } return new Timestamp(time); } + + public static Map<String, Integer> getJobCountMap(ZooKeeper zk) { + if (jobCountMap == null) { + try { + if (zk.exists(statPath, false) == null) { + zk.create(statPath, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); + } + byte[] byteData = zk.getData(statPath, new StatReader(zk), null); + jobCountMap = new HashMap<String, Integer>(); //initialize jobCountMap after register a watcher for stat znode + if (byteData != null) { + String data = new String(byteData); + populateJobCountMap(data, zk); + } else { + // nothing to populate , so ignore it + } + log.info("Successfully populated job count map by reading zookeeper stat znode"); + } catch (Exception e) { + log.error("Error while populating job count map by reading stat znode"); + } + } + return jobCountMap; + } + + /** + * This inner class is being used to populate the job count map. + */ + private static class StatReader implements Watcher { + private ZooKeeper zk; + + private StatReader(ZooKeeper zk) throws KeeperException, InterruptedException, ApplicationSettingsException, IOException { + this.zk = zk; + } + + @Override + public void process(WatchedEvent event) { + try { + if (event.getType() == Event.EventType.NodeDataChanged) { + byte[] statData = zk.getData(statPath, this, null); + if (statData != null) { + populateJobCountMap(new String(statData) , zk); + } else { + // all data has been cleaned in stat znode so nothing to do + } + } else if (event.getType() == Event.EventType.NodeChildrenChanged + || event.getType() == Event.EventType.None) { + zk.getData(statPath, this, null); + } else { + // we don't handle node delete or node create states + } + } catch (KeeperException e) { + log.error("Error while getting data from " + event.getPath(), e); + } catch (InterruptedException e) { + log.error("Error while getting data from " + event.getPath(), e); + } catch (ApplicationSettingsException e) { + log.error("Error while retrieving zookeeper connection string", e); + } catch (IOException e) { + log.error("Error while connecting to ZooKeeper server", e); + } + } + + + } + + private static void populateJobCountMap(String dataString , ZooKeeper zk) throws KeeperException, InterruptedException, ApplicationSettingsException, IOException { + if (dataString != null) { + String[] paths = dataString.split(":"); + String dataStr; + for (String path : paths) { + byte[] data = zk.getData(path, null, null); + if (data == null) { + log.error("No job count set for path " + path + ", it returned null for the data"); + } else { + dataStr = new String(data); + log.info("Update Path : " + path + " - " + dataStr); + jobCountMap.put(path, Integer.parseInt(dataStr)); + } + } + } + } } http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java ---------------------------------------------------------------------- diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java index f91fc3c..f0ec091 100644 --- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java +++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataZKUtils.java @@ -21,9 +21,7 @@ package org.apache.airavata.common.utils; import org.apache.airavata.common.exception.ApplicationSettingsException; -import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.ZooDefs; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.Stat; import org.apache.zookeeper.server.ServerCnxnFactory; http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/Constants.java ---------------------------------------------------------------------- diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/Constants.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/Constants.java index 8335e0c..3636193 100644 --- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/Constants.java +++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/Constants.java @@ -48,4 +48,13 @@ public final class Constants { public static final String ZOOKEEPER_API_SERVER_NAME = "api-server-name"; public static final String STAT = "stat"; public static final String JOB = "job"; + + public static final String TRUSTED_CERT_LOCATION = "trusted.cert.location"; + public static final String TRUSTED_CERTIFICATE_SYSTEM_PROPERTY = "X509_CERT_DIR"; + + public static final String MYPROXY_SERVER = "myproxy.server"; + public static final String MYPROXY_SERVER_PORT = "myproxy.port"; + public static final String MYPROXY_USER = "myproxy.username"; + public static final String MYPROXY_PASS = "myproxy.password"; + public static final String MYPROXY_LIFE = "myproxy.life"; } http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/RequestData.java ---------------------------------------------------------------------- diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/RequestData.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/RequestData.java new file mode 100644 index 0000000..33acf8f --- /dev/null +++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/RequestData.java @@ -0,0 +1,148 @@ +/* + * + * 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. + * + */ + +package org.apache.airavata.common.utils; + +/** + * User: AmilaJ ([email protected]) + * Date: 6/28/13 + * Time: 3:28 PM + */ + +import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.airavata.common.utils.ServerSettings; + +/** + * Encapsulates GFac specific data that are coming in the request. + */ +public class RequestData { + + private static final int DEFAULT_LIFE_TIME = 3600; + private static final int DEFAULT_MY_PROXY_PORT = 7512; + + private String tokenId; + private String requestUser; + private String gatewayId; + + private String myProxyServerUrl = null; + private int myProxyPort = 0; + private String myProxyUserName = null; + private String myProxyPassword = null; + private int myProxyLifeTime = DEFAULT_LIFE_TIME; + + + public RequestData() { + } + + public RequestData(String gatewayId) { + this.gatewayId = gatewayId; + } + + public RequestData(String tokenId, String requestUser, String gatewayId) { + this.tokenId = tokenId; + this.requestUser = requestUser; + this.gatewayId = gatewayId; + } + + public String getTokenId() { + return tokenId; + } + + public void setTokenId(String tokenId) { + this.tokenId = tokenId; + } + + public String getRequestUser() { + return requestUser; + } + + public void setRequestUser(String requestUser) { + this.requestUser = requestUser; + } + + public String getGatewayId() { + return gatewayId; + } + + public void setGatewayId(String gatewayId) { + this.gatewayId = gatewayId; + } + + public String getMyProxyServerUrl() throws ApplicationSettingsException { + if (myProxyServerUrl == null) { + myProxyServerUrl = ServerSettings.getSetting(Constants.MYPROXY_SERVER); + } + return myProxyServerUrl; + } + + public void setMyProxyServerUrl(String myProxyServerUrl) { + this.myProxyServerUrl = myProxyServerUrl; + } + + public int getMyProxyPort() { + + if (myProxyPort == 0) { + String sPort = ServerSettings.getSetting(Constants.MYPROXY_SERVER_PORT, Integer.toString(DEFAULT_MY_PROXY_PORT)); + myProxyPort = Integer.parseInt(sPort); + } + + return myProxyPort; + } + + public void setMyProxyPort(int myProxyPort) { + this.myProxyPort = myProxyPort; + } + + public String getMyProxyUserName() throws ApplicationSettingsException { + if (myProxyUserName == null) { + myProxyUserName = ServerSettings.getSetting(Constants.MYPROXY_USER); + } + + return myProxyUserName; + } + + public void setMyProxyUserName(String myProxyUserName) { + this.myProxyUserName = myProxyUserName; + } + + public String getMyProxyPassword() throws ApplicationSettingsException { + + if (myProxyPassword == null) { + myProxyPassword = ServerSettings.getSetting(Constants.MYPROXY_PASS); + } + + return myProxyPassword; + } + + public int getMyProxyLifeTime() { + String life = ServerSettings.getSetting(Constants.MYPROXY_LIFE,Integer.toString(myProxyLifeTime)); + myProxyLifeTime = Integer.parseInt(life); + return myProxyLifeTime; + } + + public void setMyProxyLifeTime(int myProxyLifeTime) { + this.myProxyLifeTime = myProxyLifeTime; + } + + public void setMyProxyPassword(String myProxyPassword) { + this.myProxyPassword = myProxyPassword; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java ---------------------------------------------------------------------- diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java index a7fc02d..e607cdc 100644 --- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java +++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java @@ -71,6 +71,8 @@ public class ServerSettings extends ApplicationSettings { private static final String MY_PROXY_LIFETIME = "myproxy.life"; private static final String ACTIVITY_LISTENERS = "activity.listeners"; + private static final String GLOBAL_MAX_JOB_COUNT = "global.max.job.count"; + private static boolean stopAllThreads = false; public static String getDefaultUser() throws ApplicationSettingsException { @@ -101,6 +103,10 @@ public class ServerSettings extends ApplicationSettings { return getSetting(SERVER_CONTEXT_ROOT, "axis2"); } + public static String getGlobalMaxJobCount() throws ApplicationSettingsException { + return getSetting(GLOBAL_MAX_JOB_COUNT); + } + public static String getCredentialStoreDBUser() throws ApplicationSettingsException { try { return getSetting(CREDENTIAL_STORE_DB_USER); http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/credential-store-service/credential-store/pom.xml ---------------------------------------------------------------------- diff --git a/modules/credential-store-service/credential-store/pom.xml b/modules/credential-store-service/credential-store/pom.xml index e3c8a4a..bd03b8d 100644 --- a/modules/credential-store-service/credential-store/pom.xml +++ b/modules/credential-store-service/credential-store/pom.xml @@ -115,6 +115,26 @@ <artifactId>commons-email</artifactId> <version>1.3.2</version> </dependency> + <dependency> + <groupId>org.jglobus</groupId> + <artifactId>ssl-proxies</artifactId> + <version>2.0.6</version> + </dependency> + <dependency> + <groupId>org.jglobus</groupId> + <artifactId>ssl-proxies</artifactId> + <version>2.0.6</version> + </dependency> + <dependency> + <groupId>org.jglobus</groupId> + <artifactId>gss</artifactId> + <version>2.0.6</version> + </dependency> + <dependency> + <groupId>org.jglobus</groupId> + <artifactId>myproxy</artifactId> + <version>2.0.6</version> + </dependency> </dependencies> <build> <plugins> http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/AuthenticationInfo.java ---------------------------------------------------------------------- diff --git a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/AuthenticationInfo.java b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/AuthenticationInfo.java new file mode 100644 index 0000000..fcf5b89 --- /dev/null +++ b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/AuthenticationInfo.java @@ -0,0 +1,32 @@ +package org.apache.airavata.credential.store.util;/* + * + * 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. + * + */ + +/** + * User: AmilaJ ([email protected]) + * Date: 10/4/13 + * Time: 11:25 AM + */ + +/** + * An empty interface that represents authentication data to the API. + */ +public interface AuthenticationInfo { +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/GSIAuthenticationInfo.java ---------------------------------------------------------------------- diff --git a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/GSIAuthenticationInfo.java b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/GSIAuthenticationInfo.java new file mode 100644 index 0000000..47d7bde --- /dev/null +++ b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/GSIAuthenticationInfo.java @@ -0,0 +1,43 @@ +package org.apache.airavata.credential.store.util;/* + * + * 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. + * + */ + +import org.ietf.jgss.GSSCredential; + +import java.util.Properties; + +/** + * Authentication data. Could be MyProxy user name, password, could be GSSCredentials + * or could be SSH keys. + */ +public abstract class GSIAuthenticationInfo implements AuthenticationInfo { + + public Properties properties = new Properties(); + + public abstract GSSCredential getCredentials() throws SecurityException; + + public Properties getProperties() { + return properties; + } + + public void setProperties(Properties properties) { + this.properties = properties; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/TokenizedMyProxyAuthInfo.java ---------------------------------------------------------------------- diff --git a/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/TokenizedMyProxyAuthInfo.java b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/TokenizedMyProxyAuthInfo.java new file mode 100644 index 0000000..02d8511 --- /dev/null +++ b/modules/credential-store-service/credential-store/src/main/java/org/apache/airavata/credential/store/util/TokenizedMyProxyAuthInfo.java @@ -0,0 +1,283 @@ +/* + * + * 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. + * +*/ +package org.apache.airavata.credential.store.util; + +import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.airavata.common.utils.ServerSettings; +import org.apache.airavata.credential.store.credential.Credential; +import org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential; +import org.apache.airavata.credential.store.store.CredentialReader; +import org.apache.airavata.common.utils.Constants; +import org.apache.airavata.common.utils.RequestData; +import org.globus.gsi.X509Credential; +import org.globus.gsi.gssapi.GlobusGSSCredentialImpl; +import org.globus.gsi.provider.GlobusProvider; +import org.globus.myproxy.GetParams; +import org.globus.myproxy.MyProxy; +import org.globus.myproxy.MyProxyException; +import org.gridforum.jgss.ExtendedGSSCredential; +import org.ietf.jgss.GSSCredential; +import org.ietf.jgss.GSSException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.security.Security; +import java.security.cert.X509Certificate; + +public class TokenizedMyProxyAuthInfo extends GSIAuthenticationInfo { + protected static final Logger log = LoggerFactory.getLogger(TokenizedMyProxyAuthInfo.class); + + public static int CREDENTIAL_RENEWING_THRESH_HOLD = 10 * 90; + + private GSSCredential gssCredentials = null; + + + private CredentialReader credentialReader; + + private RequestData requestData; + + public static final String X509_CERT_DIR = "X509_CERT_DIR"; + + + static { + Security.addProvider(new GlobusProvider()); + try { + setUpTrustedCertificatePath(); + } catch (ApplicationSettingsException e) { + log.error(e.getLocalizedMessage(), e); + } + } + + public static void setUpTrustedCertificatePath(String trustedCertificatePath) { + + File file = new File(trustedCertificatePath); + + if (!file.exists() || !file.canRead()) { + File f = new File("."); + log.info("Current directory " + f.getAbsolutePath()); + throw new RuntimeException("Cannot read trusted certificate path " + trustedCertificatePath); + } else { + System.setProperty(Constants.TRUSTED_CERTIFICATE_SYSTEM_PROPERTY, file.getAbsolutePath()); + } + } + + private static void setUpTrustedCertificatePath() throws ApplicationSettingsException { + + String trustedCertificatePath = ServerSettings.getSetting(Constants.TRUSTED_CERT_LOCATION); + + setUpTrustedCertificatePath(trustedCertificatePath); + } + + public TokenizedMyProxyAuthInfo(CredentialReader credentialReader, RequestData requestData) { + this.credentialReader = credentialReader; + this.requestData = requestData; + try { + properties.setProperty(X509_CERT_DIR, ServerSettings.getSetting(Constants.TRUSTED_CERT_LOCATION)); + } catch (ApplicationSettingsException e) { + e.printStackTrace(); + }; + } + + public TokenizedMyProxyAuthInfo(RequestData requestData) { + this.requestData = requestData; + try { + properties.setProperty(X509_CERT_DIR, ServerSettings.getSetting(Constants.TRUSTED_CERT_LOCATION)); + } catch (ApplicationSettingsException e) { + e.printStackTrace(); + }; + } + + public GSSCredential getCredentials() throws SecurityException { + + if (gssCredentials == null) { + + try { + gssCredentials = getCredentialsFromStore(); + } catch (Exception e) { + log.error("An exception occurred while retrieving credentials from the credential store. " + + "Will continue with my proxy user name and password. Provided TokenId:" + requestData.getTokenId(), e); + } + + if (gssCredentials == null) { + System.out.println("Authenticating with provided token failed, so falling back to authenticate with defaultCredentials"); + try { + gssCredentials = getDefaultCredentials(); + } catch (Exception e) { + throw new SecurityException("Error retrieving my proxy using username password"); + } + } + // if still null, throw an exception + if (gssCredentials == null) { + throw new SecurityException("Unable to retrieve my proxy credentials to continue operation."); + } + } else { + try { + if (gssCredentials.getRemainingLifetime() < CREDENTIAL_RENEWING_THRESH_HOLD) { + try { + return renewCredentials(); + } catch (Exception e) { + throw new SecurityException("Error renewing credentials", e); + } + } + } catch (GSSException e) { + throw new SecurityException("Unable to retrieve remaining life time from credentials.", e); + } + } + + return gssCredentials; + } + + + /** + * Reads the credentials from credential store. + * + * @return If token is found in the credential store, will return a valid credential. Else returns null. + * @throws Exception If an error occurred while retrieving credentials. + */ + public GSSCredential getCredentialsFromStore() throws Exception { + + if (getCredentialReader() == null) { + setCredentialReader(Utility.getCredentialReader()); + } + + Credential credential = getCredentialReader().getCredential(getRequestData().getGatewayId(), + getRequestData().getTokenId()); + + if (credential != null) { + if (credential instanceof CertificateCredential) { + + log.info("Successfully found credentials for token id - " + getRequestData().getTokenId() + + " gateway id - " + getRequestData().getGatewayId()); + + CertificateCredential certificateCredential = (CertificateCredential) credential; + + X509Certificate[] certificates = certificateCredential.getCertificates(); + X509Credential newCredential = new X509Credential(certificateCredential.getPrivateKey(), certificates); + + GlobusGSSCredentialImpl cred = new GlobusGSSCredentialImpl(newCredential, GSSCredential.INITIATE_AND_ACCEPT); + System.out.print(cred.export(ExtendedGSSCredential.IMPEXP_OPAQUE)); + return cred; + //return new GlobusGSSCredentialImpl(newCredential, + // GSSCredential.INITIATE_AND_ACCEPT); + } else { + log.info("Credential type is not CertificateCredential. Cannot create mapping globus credentials. " + + "Credential type - " + credential.getClass().getName()); + } + } else { + log.info("Could not find credentials for token - " + getRequestData().getTokenId() + " and " + + "gateway id - " + getRequestData().getGatewayId()); + } + + return null; + } + + /** + * Renew GSSCredentials. + * Before executing we need to add current host as a trusted renewer. Note to renew credentials + * we dont need user name and password. + * To do that execute following command + * > myproxy-logon -t <LIFETIME></LIFETIME> -s <MY PROXY SERVER> -l <USER NAME> + * E.g :- > myproxy-logon -t 264 -s myproxy.teragrid.org -l us3 + * Enter MyProxy pass phrase: + * A credential has been received for user us3 in /tmp/x509up_u501. + * > myproxy-init -A --cert /tmp/x509up_u501 --key /tmp/x509up_u501 -l ogce -s myproxy.teragrid.org + * + * @return Renewed credentials. + * @throws org.apache.airavata.common.exception.ApplicationSettingsException + */ + public GSSCredential renewCredentialsAsATrustedHost() throws ApplicationSettingsException, MyProxyException { + MyProxy myproxy = new MyProxy(getRequestData().getMyProxyServerUrl(), getRequestData().getMyProxyPort()); + GetParams getParams = new GetParams(); + getParams.setAuthzCreds(gssCredentials); + getParams.setUserName(getRequestData().getMyProxyUserName()); + getParams.setLifetime(getRequestData().getMyProxyLifeTime()); + return myproxy.get(gssCredentials, getParams); + } + + + /** + * Gets the default proxy certificate. + * + * @return Default my proxy credentials. + * @throws org.apache.airavata.common.exception.ApplicationSettingsException + */ + public GSSCredential getDefaultCredentials() throws ApplicationSettingsException, MyProxyException { + MyProxy myproxy = new MyProxy(getRequestData().getMyProxyServerUrl(), getRequestData().getMyProxyPort()); + return myproxy.get(getRequestData().getMyProxyUserName(), getRequestData().getMyProxyPassword(), + getRequestData().getMyProxyLifeTime()); + + } + + + /** + * Renews credentials. First try to renew credentials as a trusted renewer. If that failed + * use user name and password to renew credentials. + * + * @return Renewed credentials. + * @throws org.apache.airavata.common.exception.ApplicationSettingsException + */ + public GSSCredential renewCredentials() throws ApplicationSettingsException, MyProxyException { + + // First try to renew credentials as a trusted renewer + try { + gssCredentials = renewCredentialsAsATrustedHost(); + } catch (Exception e) { + log.warn("Renewing credentials as a trusted renewer failed", e); + gssCredentials = getProxyCredentials(); + } + + return gssCredentials; + } + + /** + * Gets a new proxy certificate given current credentials. + * + * @return The short lived GSSCredentials + * @throws org.apache.airavata.common.exception.ApplicationSettingsException + */ + public GSSCredential getProxyCredentials() throws ApplicationSettingsException, MyProxyException { + + MyProxy myproxy = new MyProxy(getRequestData().getMyProxyServerUrl(), getRequestData().getMyProxyPort()); + return myproxy.get(gssCredentials, getRequestData().getMyProxyUserName(), getRequestData().getMyProxyPassword(), + getRequestData().getMyProxyLifeTime()); + } + + public void setGssCredentials(GSSCredential gssCredentials) { + this.gssCredentials = gssCredentials; + } + + public CredentialReader getCredentialReader() { + return credentialReader; + } + + public void setCredentialReader(CredentialReader credentialReader) { + this.credentialReader = credentialReader; + } + + public RequestData getRequestData() { + return requestData; + } + + public void setRequestData(RequestData requestData) { + this.requestData = requestData; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/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..83be9df 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,6 +21,12 @@ package org.apache.airavata.credential.store.util; +import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.airavata.common.utils.DBUtil; +import org.apache.airavata.common.utils.ServerSettings; +import org.apache.airavata.credential.store.store.CredentialReader; +import org.apache.airavata.credential.store.store.impl.CredentialReaderImpl; + import java.io.FileInputStream; import java.security.KeyStore; import java.security.KeyStoreException; @@ -75,4 +81,15 @@ public class Utility { return new char[0]; } + + public static CredentialReader getCredentialReader() + throws ApplicationSettingsException, IllegalAccessException, + ClassNotFoundException, InstantiationException { + String jdbcUrl = ServerSettings.getCredentialStoreDBURL(); + String jdbcUsr = ServerSettings.getCredentialStoreDBUser(); + String jdbcPass = ServerSettings.getCredentialStoreDBPassword(); + String driver = ServerSettings.getCredentialStoreDBDriver(); + return new CredentialReaderImpl(new DBUtil(jdbcUrl, jdbcUsr, jdbcPass, + driver)); + } } http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/GSISecurityContext.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/GSISecurityContext.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/GSISecurityContext.java index 22d2e13..94c0549 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/GSISecurityContext.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/GSISecurityContext.java @@ -21,14 +21,14 @@ package org.apache.airavata.gfac.bes.security; import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.airavata.common.utils.Constants; import org.apache.airavata.common.utils.ServerSettings; import org.apache.airavata.credential.store.credential.Credential; import org.apache.airavata.credential.store.credential.impl.certificate.CertificateCredential; import org.apache.airavata.credential.store.store.CredentialReader; import org.apache.airavata.gfac.AbstractSecurityContext; -import org.apache.airavata.gfac.Constants; import org.apache.airavata.gfac.GFacException; -import org.apache.airavata.gfac.RequestData; +import org.apache.airavata.common.utils.RequestData; import org.apache.airavata.gsi.ssh.api.Cluster; import org.globus.gsi.X509Credential; import org.globus.gsi.gssapi.GlobusGSSCredentialImpl; http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/AbstractSecurityContext.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/AbstractSecurityContext.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/AbstractSecurityContext.java index 33b7846..ccd932f 100644 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/AbstractSecurityContext.java +++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/AbstractSecurityContext.java @@ -27,8 +27,8 @@ package org.apache.airavata.gfac; * Time: 4:33 PM */ +import org.apache.airavata.common.utils.RequestData; import org.apache.airavata.credential.store.store.CredentialReader; -import org.apache.airavata.gfac.SecurityContext; /** * Abstract implementation of the security context. http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java index b9ecdbe..da99517 100644 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java +++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java @@ -55,13 +55,7 @@ public class Constants { public static final int COMMAND_EXECUTION_TIMEOUT = 5; public static final String EXECUTABLE_NAME = "run.sh"; - public static final String TRUSTED_CERT_LOCATION = "trusted.cert.location"; - public static final String TRUSTED_CERTIFICATE_SYSTEM_PROPERTY = "X509_CERT_DIR"; - public static final String MYPROXY_SERVER = "myproxy.server"; - public static final String MYPROXY_SERVER_PORT = "myproxy.port"; - public static final String MYPROXY_USER = "myproxy.username"; - public static final String MYPROXY_PASS = "myproxy.password"; - public static final String MYPROXY_LIFE = "myproxy.life"; + /* * SSH properties */ http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/RequestData.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/RequestData.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/RequestData.java deleted file mode 100644 index 9f45ce6..0000000 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/RequestData.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * - * 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. - * - */ - -package org.apache.airavata.gfac; - -/** - * User: AmilaJ ([email protected]) - * Date: 6/28/13 - * Time: 3:28 PM - */ - -import org.apache.airavata.common.exception.ApplicationSettingsException; -import org.apache.airavata.common.utils.ServerSettings; - -/** - * Encapsulates GFac specific data that are coming in the request. - */ -public class RequestData { - - private static final int DEFAULT_LIFE_TIME = 3600; - private static final int DEFAULT_MY_PROXY_PORT = 7512; - - private String tokenId; - private String requestUser; - private String gatewayId; - - private String myProxyServerUrl = null; - private int myProxyPort = 0; - private String myProxyUserName = null; - private String myProxyPassword = null; - private int myProxyLifeTime = DEFAULT_LIFE_TIME; - - - public RequestData() { - } - - public RequestData(String gatewayId) { - this.gatewayId = gatewayId; - } - - public RequestData(String tokenId, String requestUser, String gatewayId) { - this.tokenId = tokenId; - this.requestUser = requestUser; - this.gatewayId = gatewayId; - } - - public String getTokenId() { - return tokenId; - } - - public void setTokenId(String tokenId) { - this.tokenId = tokenId; - } - - public String getRequestUser() { - return requestUser; - } - - public void setRequestUser(String requestUser) { - this.requestUser = requestUser; - } - - public String getGatewayId() { - return gatewayId; - } - - public void setGatewayId(String gatewayId) { - this.gatewayId = gatewayId; - } - - public String getMyProxyServerUrl() throws ApplicationSettingsException { - if (myProxyServerUrl == null) { - myProxyServerUrl = ServerSettings.getSetting(Constants.MYPROXY_SERVER); - } - return myProxyServerUrl; - } - - public void setMyProxyServerUrl(String myProxyServerUrl) { - this.myProxyServerUrl = myProxyServerUrl; - } - - public int getMyProxyPort() { - - if (myProxyPort == 0) { - String sPort = ServerSettings.getSetting(Constants.MYPROXY_SERVER_PORT, Integer.toString(DEFAULT_MY_PROXY_PORT)); - myProxyPort = Integer.parseInt(sPort); - } - - return myProxyPort; - } - - public void setMyProxyPort(int myProxyPort) { - this.myProxyPort = myProxyPort; - } - - public String getMyProxyUserName() throws ApplicationSettingsException { - if (myProxyUserName == null) { - myProxyUserName = ServerSettings.getSetting(Constants.MYPROXY_USER); - } - - return myProxyUserName; - } - - public void setMyProxyUserName(String myProxyUserName) { - this.myProxyUserName = myProxyUserName; - } - - public String getMyProxyPassword() throws ApplicationSettingsException { - - if (myProxyPassword == null) { - myProxyPassword = ServerSettings.getSetting(Constants.MYPROXY_PASS); - } - - return myProxyPassword; - } - - public int getMyProxyLifeTime() { - String life = ServerSettings.getSetting(Constants.MYPROXY_LIFE,Integer.toString(myProxyLifeTime)); - myProxyLifeTime = Integer.parseInt(life); - return myProxyLifeTime; - } - - public void setMyProxyLifeTime(int myProxyLifeTime) { - this.myProxyLifeTime = myProxyLifeTime; - } - - public void setMyProxyPassword(String myProxyPassword) { - this.myProxyPassword = myProxyPassword; - } -} http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java index 1582f62..52e6c49 100644 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java +++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java @@ -1204,15 +1204,5 @@ public class GFacUtils { return null; } - public static CredentialReader getCredentialReader() - throws ApplicationSettingsException, IllegalAccessException, - ClassNotFoundException, InstantiationException { - String jdbcUrl = ServerSettings.getCredentialStoreDBURL(); - String jdbcUsr = ServerSettings.getCredentialStoreDBUser(); - String jdbcPass = ServerSettings.getCredentialStoreDBPassword(); - String driver = ServerSettings.getCredentialStoreDBDriver(); - return new CredentialReaderImpl(new DBUtil(jdbcUrl, jdbcUsr, jdbcPass, - driver)); - } } http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/gfac/gfac-gram/src/main/java/org/apache/airavata/gfac/gram/security/GSISecurityContext.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gram/src/main/java/org/apache/airavata/gfac/gram/security/GSISecurityContext.java b/modules/gfac/gfac-gram/src/main/java/org/apache/airavata/gfac/gram/security/GSISecurityContext.java index 395b797..72287d3 100644 --- a/modules/gfac/gfac-gram/src/main/java/org/apache/airavata/gfac/gram/security/GSISecurityContext.java +++ b/modules/gfac/gfac-gram/src/main/java/org/apache/airavata/gfac/gram/security/GSISecurityContext.java @@ -28,7 +28,7 @@ import org.apache.airavata.credential.store.store.CredentialReader; import org.apache.airavata.gfac.AbstractSecurityContext; import org.apache.airavata.gfac.Constants; import org.apache.airavata.gfac.GFacException; -import org.apache.airavata.gfac.RequestData; +import org.apache.airavata.common.utils.RequestData; import org.globus.gsi.X509Credential; import org.globus.gsi.gssapi.GlobusGSSCredentialImpl; import org.globus.gsi.provider.GlobusProvider; @@ -79,13 +79,13 @@ public class GSISecurityContext extends AbstractSecurityContext { log.info("Current directory " + f.getAbsolutePath()); throw new RuntimeException("Cannot read trusted certificate path " + trustedCertificatePath); } else { - System.setProperty(Constants.TRUSTED_CERTIFICATE_SYSTEM_PROPERTY, file.getAbsolutePath()); + System.setProperty(org.apache.airavata.common.utils.Constants.TRUSTED_CERTIFICATE_SYSTEM_PROPERTY, file.getAbsolutePath()); } } private static void setUpTrustedCertificatePath() throws ApplicationSettingsException { - String trustedCertificatePath = ServerSettings.getSetting(Constants.TRUSTED_CERT_LOCATION); + String trustedCertificatePath = ServerSettings.getSetting(org.apache.airavata.common.utils.Constants.TRUSTED_CERT_LOCATION); setUpTrustedCertificatePath(trustedCertificatePath); } @@ -96,7 +96,7 @@ public class GSISecurityContext extends AbstractSecurityContext { * @return The trusted certificate path as a string. */ public static String getTrustedCertificatePath() { - return System.getProperty(Constants.TRUSTED_CERTIFICATE_SYSTEM_PROPERTY); + return System.getProperty(org.apache.airavata.common.utils.Constants.TRUSTED_CERTIFICATE_SYSTEM_PROPERTY); } http://git-wip-us.apache.org/repos/asf/airavata/blob/9a138b54/modules/gfac/gfac-gram/src/test/java/org/apache/airavata/core/gfac/services/impl/GFacBaseTestWithMyProxyAuth.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gram/src/test/java/org/apache/airavata/core/gfac/services/impl/GFacBaseTestWithMyProxyAuth.java b/modules/gfac/gfac-gram/src/test/java/org/apache/airavata/core/gfac/services/impl/GFacBaseTestWithMyProxyAuth.java index a5960d4..0741684 100644 --- a/modules/gfac/gfac-gram/src/test/java/org/apache/airavata/core/gfac/services/impl/GFacBaseTestWithMyProxyAuth.java +++ b/modules/gfac/gfac-gram/src/test/java/org/apache/airavata/core/gfac/services/impl/GFacBaseTestWithMyProxyAuth.java @@ -27,7 +27,7 @@ import org.apache.airavata.common.utils.DatabaseTestCases; import org.apache.airavata.common.utils.DerbyUtil; import org.apache.airavata.credential.store.store.CredentialReader; import org.apache.airavata.credential.store.store.impl.CredentialReaderImpl; -import org.apache.airavata.gfac.RequestData; +import org.apache.airavata.common.utils.RequestData; import org.apache.airavata.gfac.gram.security.GSISecurityContext; import org.apache.log4j.Logger; import org.junit.BeforeClass;
