From 0321187f4ca90667cbd0694842d8db94c2215ddc Mon Sep 17 00:00:00 2001 From: AYPfzU92g7M4aH39-ODVPzqxll48V Date: Mon, 21 Aug 2023 17:56:03 -0400 Subject: [PATCH 01/11] vault-scp --- python-cli/mft_cli/venv/pyvenv.cfg | 3 + scripts/start-vault.sh | 96 +++ scripts/stop-vault.sh | 33 + scripts/vault-config.hcl | 14 + services/secret-service/pom.xml | 7 + services/secret-service/server/pom.xml | 10 + .../backend/vault/VaultSecretBackend.java | 798 ++++++++++++++++++ .../backend/vault/entity/SCPSecretEntity.java | 50 ++ .../vault/repository/SCPSecretRepository.java | 5 + 9 files changed, 1016 insertions(+) create mode 100644 python-cli/mft_cli/venv/pyvenv.cfg create mode 100755 scripts/start-vault.sh create mode 100755 scripts/stop-vault.sh create mode 100644 scripts/vault-config.hcl create mode 100644 services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java create mode 100644 services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/entity/SCPSecretEntity.java create mode 100644 services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java diff --git a/python-cli/mft_cli/venv/pyvenv.cfg b/python-cli/mft_cli/venv/pyvenv.cfg new file mode 100644 index 00000000..740014e0 --- /dev/null +++ b/python-cli/mft_cli/venv/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /Library/Frameworks/Python.framework/Versions/3.10/bin +include-system-site-packages = false +version = 3.10.11 diff --git a/scripts/start-vault.sh b/scripts/start-vault.sh new file mode 100755 index 00000000..47359d91 --- /dev/null +++ b/scripts/start-vault.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +# 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. + +scriptdir="$(dirname "$0")" +cd "$scriptdir" + +PID_PATH_NAME="../airavata-mft/vault/vault-pid" +LOG_FILE="../airavata-mft/vault/vault.log" +VAULT_PATH_NAME="../airavata-mft/vault/vault" + +URL="" +ZIPFILE="" + +if [[ $OSTYPE == *"darwin"* ]]; +then + URL="https://releases.hashicorp.com/vault/1.14.1/vault_1.14.1_darwin_amd64.zip" + ZIPFILE="vault_1.14.1_darwin_amd64.zip" +elif [[ $OSTYPE == *"linux"* ]]; +then + URL="https://releases.hashicorp.com/vault/1.14.1/vault_1.14.1_linux_amd64.zip" + ZIPFILE="vault_1.14.1_linux_amd64.zip" +else + echo "As of now, airavata-mft only supports linux and mac" + exit 0 +fi + +if [ ! -f $PID_PATH_NAME ]; +then + mkdir -p ../airavata-mft/vault/keys +elif pgrep -x "vault" > /dev/null +then + # This is the condition where vault-pid file exists and + # vault is actually running + # Then this block will be executed + + # Reference: https://askubuntu.com/questions/157779/how-to-determine-whether-a-process-is-running-or-not-and-make-use-it-to-make-a-c + echo "Vault is already running ..." + exit 0 +fi + +# if vault-pid file exists or not but the vault executable itself does not exist +# then the following code will be executed +if [ ! -f $VAULT_PATH_NAME ] +then + curl -O $URL + unzip -o $ZIPFILE -d ../airavata-mft/vault + rm $ZIPFILE +fi + +# if the control structure reaches here, we have the vault executable ready to run +nohup ../airavata-mft/vault/vault server -config=../config.hcl > $LOG_FILE 2>&1 & +echo $! > $PID_PATH_NAME # $! contains the pid of the recently started background process +echo "Vault started" + + +# Reference: +# https://stackoverflow.com/a/3232433 + + +#while True; do +# if [ -f $LOG_FILE ]; then +# lineCount=$(wc -l < $LOG_FILE | tr -d ' ' | tr -d '\n') +# lineCount="$(echo -e "${lineCount}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" +# if [[ $lineCount -gt 4 ]]; then +# echo "Log file is being updated"; +# break; +# fi +# fi +#done +# +#while IFS=':' read -r Key Value; +#do +# Key="$(echo -e "${Key}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" +# Value="$(echo -e "${Value}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" +# if [ "$Key" == "Api Address" ]; then +# echo "cat $LOG_FILE" +# echo "export VAULT_ADDR='$Value'" +# fi +#done < $LOG_FILE + diff --git a/scripts/stop-vault.sh b/scripts/stop-vault.sh new file mode 100755 index 00000000..9744e76e --- /dev/null +++ b/scripts/stop-vault.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +# 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. + +scriptdir="$(dirname "$0")" +cd "$scriptdir" + +PID_PATH_NAME="../airavata-mft/vault/vault-pid" +LOG_PATH_NAME="../airavata-mft/vault/vault.log" +NEW_PATH_NAME="../airavata-mft/vault/backup.log" + +if [ -f $PID_PATH_NAME ]; then + PID=$(cat $PID_PATH_NAME); + kill $PID; + echo "Vault stopped" + rm -rf $PID_PATH_NAME + mv $LOG_PATH_NAME $NEW_PATH_NAME +fi \ No newline at end of file diff --git a/scripts/vault-config.hcl b/scripts/vault-config.hcl new file mode 100644 index 00000000..119642bb --- /dev/null +++ b/scripts/vault-config.hcl @@ -0,0 +1,14 @@ +storage "file" { + path = "../airavata-mft/vault/vault-data" +} + +listener "tcp" { + address = "127.0.0.1:8200" + tls_disable = "true" +} + +disable_mlock = true + +api_addr = "http://127.0.0.1:8200" +cluster_addr = "https://127.0.0.1:8201" +ui = true \ No newline at end of file diff --git a/services/secret-service/pom.xml b/services/secret-service/pom.xml index 9e772a57..b710af2a 100644 --- a/services/secret-service/pom.xml +++ b/services/secret-service/pom.xml @@ -35,6 +35,13 @@ client server + + + com.bettercloud + vault-java-driver + 5.1.0 + + mft-secret-service diff --git a/services/secret-service/server/pom.xml b/services/secret-service/server/pom.xml index f6dd4066..6ce49f51 100644 --- a/services/secret-service/server/pom.xml +++ b/services/secret-service/server/pom.xml @@ -74,6 +74,16 @@ dozer ${dozer} + + com.google.code.gson + gson + 2.10.1 + + + org.json + json + 20140107 + diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java new file mode 100644 index 00000000..f5cb4981 --- /dev/null +++ b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java @@ -0,0 +1,798 @@ +package org.apache.airavata.mft.secret.server.backend.vault; + +import com.bettercloud.vault.Vault; +import com.bettercloud.vault.VaultConfig; +import com.bettercloud.vault.VaultException; +import com.bettercloud.vault.api.Seal; +import com.bettercloud.vault.api.mounts.*; +import com.bettercloud.vault.response.LogicalResponse; +import com.bettercloud.vault.response.MountResponse; +import com.bettercloud.vault.response.SealResponse; +import com.google.gson.Gson; +import org.apache.airavata.mft.credential.stubs.azure.*; +import org.apache.airavata.mft.credential.stubs.box.*; +import org.apache.airavata.mft.credential.stubs.dropbox.*; +import org.apache.airavata.mft.credential.stubs.ftp.*; +import org.apache.airavata.mft.credential.stubs.gcs.*; +import org.apache.airavata.mft.credential.stubs.http.*; +import org.apache.airavata.mft.credential.stubs.odata.*; +import org.apache.airavata.mft.credential.stubs.s3.*; +import org.apache.airavata.mft.credential.stubs.scp.*; +import org.apache.airavata.mft.credential.stubs.swift.*; +import org.apache.airavata.mft.secret.server.backend.SecretBackend; +import org.apache.airavata.mft.secret.server.backend.vault.entity.SCPSecretEntity; +import org.dozer.DozerBeanMapper; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + + +public class VaultSecretBackend implements SecretBackend { + private Vault vault; + + private VaultInitData vaultGlobalCreds = null; + + private final Map pathMap = new HashMap<>(); + + private final String vaultCredsPath="./airavata-mft/vault/keys/unseal.keys"; + + private final String VAULT_ADDR = "http://127.0.0.1:8200"; + + + private final DozerBeanMapper mapper = new DozerBeanMapper(); + + // How to start vault server and initialize the vault through API + // Implement + + // Reference: https://stackoverflow.com/questions/1053467/how-do-i-save-a-string-to-a-text-file-using-java + + public VaultInitData setVaultInit(String body) { + VaultInitData vaultInitData = new VaultInitData(); + JSONObject field = new JSONObject(body); + JSONArray keysArray = field.getJSONArray("keys"); + JSONArray keysBase64Array = field.getJSONArray("keys_base64"); + String root_token = field.getString("root_token"); + + String[] keys = new String[keysArray.length()]; + for(int j=0; j mounts = response.getMounts(); + if (!mounts.containsKey("secret/")) { + mountPath(); + } + } catch (VaultException e) { + System.out.println("Error; Checking mounts failed"); + e.printStackTrace(); + throw new RuntimeException(e); + } + populatePathsToMap(); + } + + /** + * + */ + @Override + public void destroy() { + + } + + /** + * @param request + * @return + */ + @Override + public SCPSecret createSCPSecret(SCPSecretCreateRequest request) { + SCPSecretEntity entity = new SCPSecretEntity(); + Gson gson = new Gson(); + + // Generate UUID + String uuid = UUID.randomUUID().toString(); + entity.setSecretId(uuid); + entity.setPrivateKey(request.getPrivateKey()); + entity.setPublicKey(request.getPublicKey()); + entity.setPassphrase(request.getPassphrase()); + entity.setUser(request.getUser()); + + Map secrets = new HashMap<>(); + // SecretId is chosen as the key because SCPSecretGetRequest only has getters for SecretId + secrets.put(entity.getSecretId(), gson.toJson(entity)); + + try { + vault.logical().write(pathMap.get("scp"), secrets); + } catch (VaultException e) { + e.printStackTrace(); + System.out.println("Error while writing secrets to secret/scp "); + throw new RuntimeException(e); + } + + return mapper.map(entity, SCPSecret.newBuilder().getClass()).build(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getSCPSecret(SCPSecretGetRequest request) throws Exception { + String secretId = request.getSecretId(); + + String readString; + Gson gson = new Gson(); + + try { + readString = vault.withRetries(5, 1000) + .logical() + .read(pathMap.get("scp")) + .getData() + .get(secretId); + } catch (VaultException e) { + e.printStackTrace(); + System.out.println("Error in reading from vault in readWrite"); + throw new RuntimeException(e); + } + + if (readString == null) { + return Optional.empty(); + } + + SCPSecretEntity entity = gson.fromJson(readString, SCPSecretEntity.class); + SCPSecret scpSecret = mapper.map(entity, SCPSecret.newBuilder().getClass()).build(); + + return Optional.of(scpSecret); + } + + + + /** + * @param request + * @return + */ + @Override + public boolean updateSCPSecret(SCPSecretUpdateRequest request) { + Gson gson = new Gson(); + + Map readMap; + + try { + readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); + } catch (VaultException e) { + e.printStackTrace(); + System.out.println("Error while reading the secrets in the deleteSecrets() method"); + throw new RuntimeException(e); + } + + String value = readMap.get(request.getSecretId()); + SCPSecretEntity entity = gson.fromJson(value, SCPSecretEntity.class); + + // update & populate entity + entity.setSecretId(request.getSecretId()); + entity.setUser(request.getUser()); + entity.setPassphrase(request.getPassphrase()); + entity.setPrivateKey(request.getPrivateKey()); + entity.setPublicKey(request.getPublicKey()); + + // Modify the required kv pair in the read map + readMap.put(request.getSecretId(), gson.toJson(entity)); + + + // Copy it to new map with as + Map secrets = new HashMap<>(readMap); + + // write it again to vault + try { + vault.logical().write(pathMap.get("scp"), secrets); + } catch (VaultException e) { + e.printStackTrace(); + System.out.println("Error while writing secrets to secret/scp "); + throw new RuntimeException(e); + } + + return true; + } + + /** + * @param request + * @return + */ + @Override + public boolean deleteSCPSecret(SCPSecretDeleteRequest request) { + Map readMap; + + try { + readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); + } catch (VaultException e) { + e.printStackTrace(); + System.out.println("Error while reading the secrets in the deleteSecrets() method"); + throw new RuntimeException(e); + } + + if (readMap.keySet().size() <= 1) { + try { + vault.logical().delete(pathMap.get("scp")); + return true; + } catch (VaultException e) { + e.printStackTrace(); + System.out.println("Error while deleting the secrets in the deleteSecrets() method"); + throw new RuntimeException(e); + } + } + + readMap.remove(request.getSecretId()); + + Map secrets = new HashMap<>(readMap); + + try { + vault.logical().write(pathMap.get("scp"), secrets); + } catch (VaultException e) { + System.out.println("Error while writing secrets to secret/scp "); + } + + + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getS3Secret(S3SecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public S3Secret createS3Secret(S3SecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateS3Secret(S3SecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteS3Secret(S3SecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getBoxSecret(BoxSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public BoxSecret createBoxSecret(BoxSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateBoxSecret(BoxSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteBoxSecret(BoxSecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getAzureSecret(AzureSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public AzureSecret createAzureSecret(AzureSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateAzureSecret(AzureSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteAzureSecret(AzureSecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getGCSSecret(GCSSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public GCSSecret createGCSSecret(GCSSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateGCSSecret(GCSSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteGCSSecret(GCSSecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getDropboxSecret(DropboxSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public DropboxSecret createDropboxSecret(DropboxSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateDropboxSecret(DropboxSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteDropboxSecret(DropboxSecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getFTPSecret(FTPSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public FTPSecret createFTPSecret(FTPSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateFTPSecret(FTPSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteFTPSecret(FTPSecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getSwiftSecret(SwiftSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public SwiftSecret createSwiftSecret(SwiftSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateSwiftSecret(SwiftSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteSwiftSecret(SwiftSecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getODataSecret(ODataSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public ODataSecret createODataSecret(ODataSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateODataSecret(ODataSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteODataSecret(ODataSecretDeleteRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public Optional getHttpSecret(HTTPSecretGetRequest request) throws Exception { + return Optional.empty(); + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public HTTPSecret createHttpSecret(HTTPSecretCreateRequest request) throws Exception { + return null; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean updateHttpSecret(HTTPSecretUpdateRequest request) throws Exception { + return false; + } + + /** + * @param request + * @return + * @throws Exception + */ + @Override + public boolean deleteHttpSecret(HTTPSecretDeleteRequest request) throws Exception { + return false; + } +} + +class VaultInitData { + private String[] keys; + private String[] keys_base64; + private String root_token; + + public String[] getKeys() { + return keys; + } + + public String[] getKeys_base64() { + return keys_base64; + } + + public String getRoot_token() { + return root_token; + } + + public void setKeys(String[] keys) { + this.keys = keys; + } + + public void setKeys_base64(String[] keys_base64) { + this.keys_base64 = keys_base64; + } + + public void setRoot_token(String root_token) { + this.root_token = root_token; + } +} diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/entity/SCPSecretEntity.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/entity/SCPSecretEntity.java new file mode 100644 index 00000000..033977e5 --- /dev/null +++ b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/entity/SCPSecretEntity.java @@ -0,0 +1,50 @@ +package org.apache.airavata.mft.secret.server.backend.vault.entity; + + +public class SCPSecretEntity { + private String secretId; + private String privateKey; + private String publicKey; + private String passphrase; + private String user; + + public String getSecretId() { + return secretId; + } + + public void setSecretId(String secretId) { + this.secretId = secretId; + } + + public String getPrivateKey() { + return privateKey; + } + + public void setPrivateKey(String privateKey) { + this.privateKey = privateKey; + } + + public String getPublicKey() { + return publicKey; + } + + public void setPublicKey(String publicKey) { + this.publicKey = publicKey; + } + + public String getPassphrase() { + return passphrase; + } + + public void setPassphrase(String passphrase) { + this.passphrase = passphrase; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } +} diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java new file mode 100644 index 00000000..5b42bd28 --- /dev/null +++ b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java @@ -0,0 +1,5 @@ +package org.apache.airavata.mft.secret.server.backend.vault.repository; + +public interface SCPSecretRepository { + +} From 34c9b1f144fc8189fb0acf374bfaa35f0d9c2416 Mon Sep 17 00:00:00 2001 From: AYPfzU92g7M4aH39-ODVPzqxll48V Date: Mon, 21 Aug 2023 21:01:03 -0400 Subject: [PATCH 02/11] removing venv folder --- python-cli/mft_cli/venv/pyvenv.cfg | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 python-cli/mft_cli/venv/pyvenv.cfg diff --git a/python-cli/mft_cli/venv/pyvenv.cfg b/python-cli/mft_cli/venv/pyvenv.cfg deleted file mode 100644 index 740014e0..00000000 --- a/python-cli/mft_cli/venv/pyvenv.cfg +++ /dev/null @@ -1,3 +0,0 @@ -home = /Library/Frameworks/Python.framework/Versions/3.10/bin -include-system-site-packages = false -version = 3.10.11 From acb5e8caf69dd24b19a8b1b2a6c65e4b3aa20ced Mon Sep 17 00:00:00 2001 From: AYPfzU92g7M4aH39-ODVPzqxll48V Date: Mon, 21 Aug 2023 21:06:13 -0400 Subject: [PATCH 03/11] removing repository folder --- .../server/backend/vault/repository/SCPSecretRepository.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java deleted file mode 100644 index 5b42bd28..00000000 --- a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/repository/SCPSecretRepository.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.apache.airavata.mft.secret.server.backend.vault.repository; - -public interface SCPSecretRepository { - -} From 765830a1491158a3c4904010e714f4cbe4c42174 Mon Sep 17 00:00:00 2001 From: AYPfzU92g7M4aH39-ODVPzqxll48V Date: Mon, 21 Aug 2023 21:28:44 -0400 Subject: [PATCH 04/11] fixing access specifier --- .../mft/secret/server/backend/vault/VaultSecretBackend.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java index f5cb4981..366ec921 100644 --- a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java +++ b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java @@ -54,7 +54,7 @@ public class VaultSecretBackend implements SecretBackend { // Reference: https://stackoverflow.com/questions/1053467/how-do-i-save-a-string-to-a-text-file-using-java - public VaultInitData setVaultInit(String body) { + private VaultInitData setVaultInit(String body) { VaultInitData vaultInitData = new VaultInitData(); JSONObject field = new JSONObject(body); JSONArray keysArray = field.getJSONArray("keys"); From c11b24b73245926871622a6f400e72708874a77e Mon Sep 17 00:00:00 2001 From: AYPfzU92g7M4aH39-ODVPzqxll48V Date: Wed, 23 Aug 2023 09:42:06 -0400 Subject: [PATCH 05/11] logging --- .../backend/vault/VaultSecretBackend.java | 82 ++++++++++--------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java index 366ec921..f83c6f97 100644 --- a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java +++ b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java @@ -33,9 +33,12 @@ import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class VaultSecretBackend implements SecretBackend { + private static final Logger logger = LoggerFactory.getLogger(VaultSecretBackend.class); private Vault vault; private VaultInitData vaultGlobalCreds = null; @@ -49,9 +52,6 @@ public class VaultSecretBackend implements SecretBackend { private final DozerBeanMapper mapper = new DozerBeanMapper(); - // How to start vault server and initialize the vault through API - // Implement - // Reference: https://stackoverflow.com/questions/1053467/how-do-i-save-a-string-to-a-text-file-using-java private VaultInitData setVaultInit(String body) { @@ -101,8 +101,7 @@ private VaultInitData initializeVault() throws IOException { try (BufferedWriter writer = new BufferedWriter(new FileWriter(vaultCredsPath))) { writer.write(response.toString()); } catch (IOException e) { - System.out.println("Error while writing the key file"); - e.printStackTrace(); + logger.error("Error while writing the key file", e); throw new RuntimeException(e); } @@ -117,12 +116,10 @@ private VaultInitData readVaultCreds() { output.append(line); } } catch (FileNotFoundException e) { - System.out.println("Error: FileNotFoundException in reading the vault creds file"); - e.printStackTrace(); + logger.error("Error: FileNotFoundException in reading the vault creds file", e); throw new RuntimeException(e); } catch (IOException e) { - System.out.println("Error: IOException in reading vault creds file"); - e.printStackTrace(); + logger.error("Error: IOException in reading vault creds file", e); throw new RuntimeException(e); } return setVaultInit(output.toString()); @@ -133,9 +130,8 @@ private boolean unsealVault(Seal seal) { try { sealResponse = seal.unseal(vaultGlobalCreds.getKeys()[0]); } catch (VaultException ve) { - ve.printStackTrace(); - System.out.println("Error: Unsealing with Key 1 failed"); - throw new RuntimeException("Error: Unsealing with Key 1 failed"); + logger.error("Error: Unsealing with Key failed", ve); + throw new RuntimeException(ve); } return sealResponse.getSealed(); } @@ -152,8 +148,7 @@ private void mountPath() { try { mounts.enable("secret", MountType.KEY_VALUE_V2, payloadLocal); } catch (VaultException e) { - e.printStackTrace(); - System.out.println("Error: Unable to mount the path"); + logger.error("Error: Unable to mount the path", e); throw new RuntimeException(e); } @@ -175,6 +170,7 @@ private void populatePathsToMap() { */ @Override public void init() { + logger.info("Intializing the vault"); int VAULT_OPEN_TIMEOUT = 5; int VAULT_READ_TIMEOUT = 30; int VAULT_KV_VERSION = 2; @@ -187,7 +183,7 @@ public void init() { try { vaultGlobalCreds = initializeVault(); } catch (IOException e) { - System.out.println("Error in init function"); + logger.error("Error initializing vault", e); throw new RuntimeException(e); } } else { @@ -203,8 +199,7 @@ public void init() { .engineVersion(VAULT_KV_VERSION) .build(); } catch (VaultException ve) { - System.out.println("Error: Vault Exception, unable to config and build"); - ve.printStackTrace(); + logger.error("Error: Vault Exception, unable to config and build", ve); throw new RuntimeException(ve); } @@ -215,15 +210,14 @@ public void init() { try { sealResponse = sealLocal.sealStatus(); } catch (VaultException ve) { - System.out.println("Error: Cannot get seal response"); - ve.printStackTrace(); + logger.warn("Warning: Cannot get seal response", ve); throw new RuntimeException(ve); } if (sealResponse.getSealed()) { boolean sealStatus = unsealVault(sealLocal); if (sealStatus) { - System.out.println("Error: Unsealing vault failed"); + logger.error("Error: Unsealing vault failed"); throw new RuntimeException("Error: Unsealing vault failed"); } } @@ -235,11 +229,11 @@ public void init() { mountPath(); } } catch (VaultException e) { - System.out.println("Error; Checking mounts failed"); - e.printStackTrace(); + logger.error("Error while mounting the path", e); throw new RuntimeException(e); } populatePathsToMap(); + logger.info("Initializing the Vault Completed"); } /** @@ -256,6 +250,7 @@ public void destroy() { */ @Override public SCPSecret createSCPSecret(SCPSecretCreateRequest request) { + logger.info("Creating SCP secret"); SCPSecretEntity entity = new SCPSecretEntity(); Gson gson = new Gson(); @@ -274,11 +269,12 @@ public SCPSecret createSCPSecret(SCPSecretCreateRequest request) { try { vault.logical().write(pathMap.get("scp"), secrets); } catch (VaultException e) { - e.printStackTrace(); - System.out.println("Error while writing secrets to secret/scp "); + logger.error("Error while writing secrets to secret/scp", e); throw new RuntimeException(e); } + logger.info("Completed writing created SCP secret into the vault"); + return mapper.map(entity, SCPSecret.newBuilder().getClass()).build(); } @@ -289,6 +285,7 @@ public SCPSecret createSCPSecret(SCPSecretCreateRequest request) { */ @Override public Optional getSCPSecret(SCPSecretGetRequest request) throws Exception { + logger.info("Fetching the required SCP secret from the vault"); String secretId = request.getSecretId(); String readString; @@ -301,18 +298,20 @@ public Optional getSCPSecret(SCPSecretGetRequest request) throws Exce .getData() .get(secretId); } catch (VaultException e) { - e.printStackTrace(); - System.out.println("Error in reading from vault in readWrite"); + logger.error("Error in reading from vault in readWrite", e); throw new RuntimeException(e); } if (readString == null) { + logger.info("Unable to fetch the required SCP secret from the vault"); return Optional.empty(); } SCPSecretEntity entity = gson.fromJson(readString, SCPSecretEntity.class); SCPSecret scpSecret = mapper.map(entity, SCPSecret.newBuilder().getClass()).build(); + logger.info("Returning the required SCP secret from the vault"); + return Optional.of(scpSecret); } @@ -324,6 +323,7 @@ public Optional getSCPSecret(SCPSecretGetRequest request) throws Exce */ @Override public boolean updateSCPSecret(SCPSecretUpdateRequest request) { + logger.info("Updating the required SCP secret from the vault"); Gson gson = new Gson(); Map readMap; @@ -331,12 +331,17 @@ public boolean updateSCPSecret(SCPSecretUpdateRequest request) { try { readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); } catch (VaultException e) { - e.printStackTrace(); - System.out.println("Error while reading the secrets in the deleteSecrets() method"); + logger.error("Error while reading the secrets in the deleteSecrets() method", e); throw new RuntimeException(e); } String value = readMap.get(request.getSecretId()); + + if (value == null) { + logger.info("Secret ID does not exist in the vault"); + return false; + } + SCPSecretEntity entity = gson.fromJson(value, SCPSecretEntity.class); // update & populate entity @@ -357,11 +362,11 @@ public boolean updateSCPSecret(SCPSecretUpdateRequest request) { try { vault.logical().write(pathMap.get("scp"), secrets); } catch (VaultException e) { - e.printStackTrace(); - System.out.println("Error while writing secrets to secret/scp "); + logger.error("Error while writing secrets to secret/scp", e); throw new RuntimeException(e); } + logger.info("Updated the required secret successfully"); return true; } @@ -371,23 +376,23 @@ public boolean updateSCPSecret(SCPSecretUpdateRequest request) { */ @Override public boolean deleteSCPSecret(SCPSecretDeleteRequest request) { + logger.info("Deleting the required SCP secret from the vault"); Map readMap; try { readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); } catch (VaultException e) { - e.printStackTrace(); - System.out.println("Error while reading the secrets in the deleteSecrets() method"); + logger.error("Error while reading the secrets in the deleteSecrets() method", e); throw new RuntimeException(e); } - if (readMap.keySet().size() <= 1) { + if (readMap == null || readMap.keySet().size() <= 1) { try { vault.logical().delete(pathMap.get("scp")); + logger.info("Deleted the required SCP secret from the vault"); return true; } catch (VaultException e) { - e.printStackTrace(); - System.out.println("Error while deleting the secrets in the deleteSecrets() method"); + logger.error("Error while deleting the secrets in the deleteSecrets() method", e); throw new RuntimeException(e); } } @@ -399,11 +404,12 @@ public boolean deleteSCPSecret(SCPSecretDeleteRequest request) { try { vault.logical().write(pathMap.get("scp"), secrets); } catch (VaultException e) { - System.out.println("Error while writing secrets to secret/scp "); + logger.error("Error while writing secrets to secret/scp", e); + throw new RuntimeException(e); } - - return false; + logger.info("Deleted the required SCP secret from the vault"); + return true; } /** From 0315c944f6047a6dd61f73641ee18a101139871d Mon Sep 17 00:00:00 2001 From: Nagadarshan Nanjundaswamy <124709697+nandarshan@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:47:19 -0400 Subject: [PATCH 06/11] Update VaultSecretBackend.java --- .../backend/vault/VaultSecretBackend.java | 120 ++++++++++++++---- 1 file changed, 92 insertions(+), 28 deletions(-) diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java index f83c6f97..ecf2c957 100644 --- a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java +++ b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/backend/vault/VaultSecretBackend.java @@ -35,15 +35,16 @@ import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; - +@Component("VaultSecretBackend") public class VaultSecretBackend implements SecretBackend { private static final Logger logger = LoggerFactory.getLogger(VaultSecretBackend.class); - private Vault vault; + private static Vault vault; private VaultInitData vaultGlobalCreds = null; - private final Map pathMap = new HashMap<>(); + private static final Map pathMap = new HashMap<>(); private final String vaultCredsPath="./airavata-mft/vault/keys/unseal.keys"; @@ -80,12 +81,15 @@ private VaultInitData setVaultInit(String body) { private VaultInitData initializeVault() throws IOException { String body = "{\"secret_shares\": 1, \"secret_threshold\": 1}"; URL url = new URL(VAULT_ADDR + "/v1/sys/init"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); try (DataOutputStream dos = new DataOutputStream(connection.getOutputStream())) { dos.writeBytes(body); + } catch (IOException e) { + logger.error("Error while writing data to the POST body"); } StringBuilder response= new StringBuilder(); @@ -140,10 +144,9 @@ private void mountPath() { Mounts mounts = vault.mounts(); final MountPayload payloadLocal = new MountPayload() - .defaultLeaseTtl(TimeToLive.of(100, TimeUnit.HOURS)) - .maxLeaseTtl(TimeToLive.of(100, TimeUnit.HOURS)) - .maxLeaseTtl(TimeToLive.of(100, TimeUnit.HOURS)) - .description("Expiration time is set for 100 hours"); + .defaultLeaseTtl(TimeToLive.of(365*24, TimeUnit.HOURS)) + .maxLeaseTtl(TimeToLive.of(365*24, TimeUnit.HOURS)) + .description("Expiration time is set for 1 year"); try { mounts.enable("secret", MountType.KEY_VALUE_V2, payloadLocal); @@ -179,7 +182,9 @@ public void init() { String path="./airavata-mft/vault/vault-data"; File f = new File(path); + if (!f.isDirectory()) { + try { vaultGlobalCreds = initializeVault(); } catch (IOException e) { @@ -187,6 +192,7 @@ public void init() { throw new RuntimeException(e); } } else { + vaultGlobalCreds = readVaultCreds(); } @@ -233,6 +239,9 @@ public void init() { throw new RuntimeException(e); } populatePathsToMap(); + + + logger.info("Initializing the Vault Completed"); } @@ -254,6 +263,7 @@ public SCPSecret createSCPSecret(SCPSecretCreateRequest request) { SCPSecretEntity entity = new SCPSecretEntity(); Gson gson = new Gson(); + // Generate UUID String uuid = UUID.randomUUID().toString(); entity.setSecretId(uuid); @@ -262,14 +272,30 @@ public SCPSecret createSCPSecret(SCPSecretCreateRequest request) { entity.setPassphrase(request.getPassphrase()); entity.setUser(request.getUser()); - Map secrets = new HashMap<>(); + Map readMap; + + try { + readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); + } catch (VaultException e) { + logger.error("Error while reading the secrets in the deleteSecrets() method", e); + throw new RuntimeException(e); + } + + + + // Map secrets = new HashMap<>(); // SecretId is chosen as the key because SCPSecretGetRequest only has getters for SecretId - secrets.put(entity.getSecretId(), gson.toJson(entity)); + readMap.put(entity.getSecretId(), gson.toJson(entity)); + + // Copy it to new map with as + Map secrets = new HashMap<>(readMap); try { - vault.logical().write(pathMap.get("scp"), secrets); + vault.withRetries(5, 1000).logical().write(pathMap.get("scp"), secrets); } catch (VaultException e) { logger.error("Error while writing secrets to secret/scp", e); + + e.printStackTrace(); throw new RuntimeException(e); } @@ -291,17 +317,18 @@ public Optional getSCPSecret(SCPSecretGetRequest request) throws Exce String readString; Gson gson = new Gson(); + + Map readMap; + try { - readString = vault.withRetries(5, 1000) - .logical() - .read(pathMap.get("scp")) - .getData() - .get(secretId); + readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); } catch (VaultException e) { - logger.error("Error in reading from vault in readWrite", e); + logger.error("Error while reading the secrets in the deleteSecrets() method", e); throw new RuntimeException(e); } + readString = readMap.get(request.getSecretId()); + if (readString == null) { logger.info("Unable to fetch the required SCP secret from the vault"); return Optional.empty(); @@ -324,6 +351,15 @@ public Optional getSCPSecret(SCPSecretGetRequest request) throws Exce @Override public boolean updateSCPSecret(SCPSecretUpdateRequest request) { logger.info("Updating the required SCP secret from the vault"); + // https://protobuf.dev/reference/java/java-generated/ + // Not checking for null for protocol getters based on the above reference + + if (request.getSecretId().equals("")) { + // if secretId is null or empty + logger.warn("Secret ID cannot be null or empty"); + return false; + } + Gson gson = new Gson(); Map readMap; @@ -332,7 +368,7 @@ public boolean updateSCPSecret(SCPSecretUpdateRequest request) { readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); } catch (VaultException e) { logger.error("Error while reading the secrets in the deleteSecrets() method", e); - throw new RuntimeException(e); + return false; } String value = readMap.get(request.getSecretId()); @@ -342,17 +378,45 @@ public boolean updateSCPSecret(SCPSecretUpdateRequest request) { return false; } - SCPSecretEntity entity = gson.fromJson(value, SCPSecretEntity.class); + SCPSecretEntity existingEntity = null; - // update & populate entity - entity.setSecretId(request.getSecretId()); - entity.setUser(request.getUser()); - entity.setPassphrase(request.getPassphrase()); - entity.setPrivateKey(request.getPrivateKey()); - entity.setPublicKey(request.getPublicKey()); + // populate existing entity + int flag = 0; + for (String key: readMap.keySet()) { + if (key.equals(request.getSecretId())) { + flag = 1; + // Now populate the existing values to entity + existingEntity = gson.fromJson(readMap.get(key), SCPSecretEntity.class); + break; + } + } + + if (flag == 0) { + // if the sent secret id did not match with existing secret ids + // return false + logger.warn("Sent Secret ID did not match with existing secret IDs"); + return false; + } + + + if (!request.getUser().equals("")) { + existingEntity.setUser(request.getUser()); + } + + if (!request.getPassphrase().equals("")) { + existingEntity.setPassphrase(request.getPassphrase()); + } + + if (!request.getPrivateKey().equals("")) { + existingEntity.setPrivateKey(request.getPrivateKey()); + } + + if (!request.getPublicKey().equals("")) { + existingEntity.setPublicKey(request.getPublicKey()); + } // Modify the required kv pair in the read map - readMap.put(request.getSecretId(), gson.toJson(entity)); + readMap.put(request.getSecretId(), gson.toJson(existingEntity)); // Copy it to new map with as @@ -383,7 +447,7 @@ public boolean deleteSCPSecret(SCPSecretDeleteRequest request) { readMap = vault.withRetries(5, 1000).logical().read(pathMap.get("scp")).getData(); } catch (VaultException e) { logger.error("Error while reading the secrets in the deleteSecrets() method", e); - throw new RuntimeException(e); + return false; } if (readMap == null || readMap.keySet().size() <= 1) { @@ -393,7 +457,7 @@ public boolean deleteSCPSecret(SCPSecretDeleteRequest request) { return true; } catch (VaultException e) { logger.error("Error while deleting the secrets in the deleteSecrets() method", e); - throw new RuntimeException(e); + return false; } } @@ -405,7 +469,7 @@ public boolean deleteSCPSecret(SCPSecretDeleteRequest request) { vault.logical().write(pathMap.get("scp"), secrets); } catch (VaultException e) { logger.error("Error while writing secrets to secret/scp", e); - throw new RuntimeException(e); + return false; } logger.info("Deleted the required SCP secret from the vault"); From ac7bfc9475ecafd2c4ffbd96e595572fbd377592 Mon Sep 17 00:00:00 2001 From: Nagadarshan Nanjundaswamy <124709697+nandarshan@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:49:18 -0400 Subject: [PATCH 07/11] Update SCPServiceHandler.java --- .../airavata/mft/secret/server/handler/SCPServiceHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/handler/SCPServiceHandler.java b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/handler/SCPServiceHandler.java index e40e5112..9ecc475e 100644 --- a/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/handler/SCPServiceHandler.java +++ b/services/secret-service/server/src/main/java/org/apache/airavata/mft/secret/server/handler/SCPServiceHandler.java @@ -36,7 +36,7 @@ public class SCPServiceHandler extends SCPSecretServiceGrpc.SCPSecretServiceImpl private static final Logger logger = LoggerFactory.getLogger(SCPServiceHandler.class); @Autowired - @Qualifier("SQLSecretBackend") + @Qualifier("VaultSecretBackend") private SecretBackend backend; @Override From 8cfdc920bd65b0c599982865a01c24b7f3fa4029 Mon Sep 17 00:00:00 2001 From: Nagadarshan Nanjundaswamy <124709697+nandarshan@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:51:33 -0400 Subject: [PATCH 08/11] Update applicationContext.xml --- .../server/src/main/resources/applicationContext.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/secret-service/server/src/main/resources/applicationContext.xml b/services/secret-service/server/src/main/resources/applicationContext.xml index 3573f3f5..14199d1c 100644 --- a/services/secret-service/server/src/main/resources/applicationContext.xml +++ b/services/secret-service/server/src/main/resources/applicationContext.xml @@ -29,7 +29,7 @@ - - \ No newline at end of file + From a0e1a7294066c632999daff45d815856b7d7c33b Mon Sep 17 00:00:00 2001 From: Nagadarshan Nanjundaswamy <124709697+nandarshan@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:52:13 -0400 Subject: [PATCH 09/11] Update applicationContext.xml --- .../main/resources/distribution/conf/applicationContext.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/secret-service/server/src/main/resources/distribution/conf/applicationContext.xml b/services/secret-service/server/src/main/resources/distribution/conf/applicationContext.xml index 592ea62f..74bd27ae 100644 --- a/services/secret-service/server/src/main/resources/distribution/conf/applicationContext.xml +++ b/services/secret-service/server/src/main/resources/distribution/conf/applicationContext.xml @@ -29,7 +29,7 @@ - - \ No newline at end of file + From 82af2dee0bb190b796c159b63d4e0cd205b987f2 Mon Sep 17 00:00:00 2001 From: Nagadarshan Nanjundaswamy <124709697+nandarshan@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:53:36 -0400 Subject: [PATCH 10/11] Update start-vault.sh --- scripts/start-vault.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start-vault.sh b/scripts/start-vault.sh index 47359d91..dacb9aa5 100755 --- a/scripts/start-vault.sh +++ b/scripts/start-vault.sh @@ -64,7 +64,7 @@ then fi # if the control structure reaches here, we have the vault executable ready to run -nohup ../airavata-mft/vault/vault server -config=../config.hcl > $LOG_FILE 2>&1 & +nohup ../airavata-mft/vault/vault server -config=./vault-config.hcl > $LOG_FILE 2>&1 & echo $! > $PID_PATH_NAME # $! contains the pid of the recently started background process echo "Vault started" From 4865657f915f06fdcf08b990b94f7631a9d90867 Mon Sep 17 00:00:00 2001 From: Nagadarshan Nanjundaswamy <124709697+nandarshan@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:54:01 -0400 Subject: [PATCH 11/11] Update vault-config.hcl --- scripts/vault-config.hcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/vault-config.hcl b/scripts/vault-config.hcl index 119642bb..d6cd889e 100644 --- a/scripts/vault-config.hcl +++ b/scripts/vault-config.hcl @@ -10,5 +10,5 @@ listener "tcp" { disable_mlock = true api_addr = "http://127.0.0.1:8200" -cluster_addr = "https://127.0.0.1:8201" -ui = true \ No newline at end of file +cluster_addr = "http://127.0.0.1:8201" +ui = true