From 1b21a39a73672f904377196ea2e4a64e995be37d Mon Sep 17 00:00:00 2001 From: Slava <20563034+veaceslavdoina@users.noreply.github.com> Date: Tue, 12 Nov 2024 21:45:20 +0200 Subject: [PATCH] Fix key file permissions on Windows (msys2) (#17) --- generate.sh | 71 ++++++++++++++++++++++++++++++++--------------------- run.sh | 37 +++++++++++++++++++--------- 2 files changed, 69 insertions(+), 39 deletions(-) diff --git a/generate.sh b/generate.sh index cab7d69..30f073a 100644 --- a/generate.sh +++ b/generate.sh @@ -57,38 +57,53 @@ show_start "Generate Ethereum private key..." # Generate remote generate_remote() { -message="Generating key using \e[31mremote\e[0m ${URL}" -show_progress "${message}" -response=$(curl -m 5 --fail -s ${URL} || true) -[[ -n "${response}" ]] && show_pass "${message}" || show_fail "${message}" "Failed to connect to ${URL}" - -message="Saving private key to file" -show_progress "${message}" -if ! (awk -F ': ' '/private/ {print $2}' <<<"${response}" >"${key_file}") >/dev/null 2>&1; then - show_fail "${message}" "Failed to save address to file" -fi -show_pass "${message}" - -message="Saving address to file" -show_progress "${message}" -if ! (awk -F ': ' '/address/ {print $2}' <<<"${response}" >"${address_file}") >/dev/null 2>&1; then - show_fail "${message}" "Failed to save private key to file" -fi -show_pass "${message}" - -# Permissions - message="Setting private key file permissions" + message="Generating key using \e[31mremote\e[0m ${URL}" show_progress "${message}" - if ! (chmod 600 "${key_file}") >/dev/null 2>&1; then - show_fail "${message}" "Failed to set private key file permissions" + response=$(curl -m 5 --fail -s ${URL} || true) + [[ -n "${response}" ]] && show_pass "${message}" || show_fail "${message}" "Failed to connect to ${URL}" + + message="Saving private key to file" + show_progress "${message}" + if ! (awk -F ': ' '/private/ {print $2}' <<<"${response}" >"${key_file}") >/dev/null 2>&1; then + show_fail "${message}" "Failed to save address to file" fi show_pass "${message}" -# Show -address=$(cat ${address_file}) -echo -echo -e " - private key - \e[90m${PWD}/\e[0m\e[94m${key_file}\e[0m" -echo -e " - address - \e[90m${PWD}/\e[0m\e[94m${address_file}\e[0m - \e[94m${address}\e[0m\n" + message="Saving address to file" + show_progress "${message}" + if ! (awk -F ': ' '/address/ {print $2}' <<<"${response}" >"${address_file}") >/dev/null 2>&1; then + show_fail "${message}" "Failed to save private key to file" + fi + show_pass "${message}" + + # Permissions + message="Setting private key file permissions" + show_progress "${message}" + case "$(uname -s)" in + Linux*) OS="linux" ;; + Darwin*) OS="darwin" ;; + CYGWIN*|MINGW*|MSYS*) OS="windows" ;; + *) show_fail "${message}" "Unsupported OS: $(uname)" ;; + esac + + if [[ $OS == "windows" ]]; then + if ! (icacls "${key_file}" /inheritance:r /grant:r `whoami`:F) >/dev/null 2>&1; then + show_fail "${message}" "Failed to set private key file permissions" + fi + show_pass "Setting private key file permissions" + else + if ! (chmod 600 "${key_file}") >/dev/null 2>&1; then + show_fail "${message}" "Failed to set private key file permissions" + fi + show_pass "${message}" + fi + + # Show + address=$(cat ${address_file}) + echo + echo -e " - private key file - \e[90m${PWD}/\e[0m\e[94m${key_file}\e[0m" + echo -e " - address file - \e[90m${PWD}/\e[0m\e[94m${address_file}\e[0m" + echo -e " - address - \e[0m\e[94m${address}\e[0m\n" } # Generate locally diff --git a/run.sh b/run.sh index 26af21a..4d20d21 100644 --- a/run.sh +++ b/run.sh @@ -11,6 +11,9 @@ PASS_MARK="\033[0;32m\u2714\033[0m" FAIL_MARK="\033[0;31m\u2718\033[0m" NETWORK="${NETWORK:-testnet}" +# Disable argument conversion to Windows path +export MSYS_NO_PATHCONV=1 + export CODEX_DATA_DIR="${CODEX_DATA_DIR:-./codex-data}" export CODEX_STORAGE_QUOTA="${CODEX_STORAGE_QUOTA:-10g}" export CODEX_NAT="${CODEX_NAT:-$(curl -s https://ip.codex.storage)}" @@ -97,21 +100,33 @@ fi show_pass "${message}" # Check private key permissions -message="Checking private key permissions" +message="Checking private key file permissions" show_progress "${message}" - -case $(uname) in - Linux) permissions=$(stat -c %a ${CODEX_ETH_PRIVATE_KEY}) ;; - Darwin) permissions=$(stat -f "%OLp" ${CODEX_ETH_PRIVATE_KEY}) ;; - CYGWIN*|MINGW*|MSYS*) permissions=$(stat -c %a ${CODEX_ETH_PRIVATE_KEY}) ;; - *) show_fail "${message}" "Unsupported OS: $(uname)" ;; +case "$(uname -s)" in + Linux*) permissions=$(stat -c %a ${CODEX_ETH_PRIVATE_KEY}) ;; + Darwin*) permissions=$(stat -f "%OLp" ${CODEX_ETH_PRIVATE_KEY}) ;; + CYGWIN*|MINGW*|MSYS*) permissions=$(icacls ${CODEX_ETH_PRIVATE_KEY}); OS="windows" ;; + *) show_fail "${message}" "Unsupported OS: $(uname)" ;; esac -if [[ ${permissions} != "600" ]]; then - chmod 600 ${CODEX_ETH_PRIVATE_KEY} - show_pass "Setting private key permissions" +if [[ $OS == "windows" ]]; then + if ! grep "`whoami`:(F)" <<<"${permissions}" &> /dev/null; then + if ! (icacls "${CODEX_ETH_PRIVATE_KEY}" /inheritance:r /grant:r `whoami`:F) >/dev/null 2>&1; then + show_fail "${message}" "Failed to set private key file permissions" + fi + show_pass "Setting private key file permissions" + else + show_pass "${message}" + fi else - show_pass "${message}" + if [[ ${permissions} != "600" ]]; then + if ! (chmod 600 "${CODEX_ETH_PRIVATE_KEY}") >/dev/null 2>&1; then + show_fail "${message}" "Failed to set private key file permissions" + fi + show_pass "Setting private key file permissions" + else + show_pass "${message}" + fi fi # Network