mirror of
https://github.com/logos-storage/get.codex.storage.git
synced 2026-01-02 13:13:07 +00:00
152 lines
4.4 KiB
Bash
152 lines
4.4 KiB
Bash
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# Generate private key for Ethereum wallet
|
|
|
|
# Variables
|
|
key_file="eth.key"
|
|
address_file="eth.address"
|
|
URL=${URL:-https://key.codex.storage}
|
|
MODE=${MODE:-remote}
|
|
PROGRESS_MARK="\033[0;36m\u2022\033[0m"
|
|
PASS_MARK="\033[0;32m\u2714\033[0m"
|
|
FAIL_MARK="\033[0;31m\u2718\033[0m"
|
|
|
|
# Help
|
|
if [[ $1 == *"h"* ]] ; then
|
|
COMMAND="curl -s https://get.codex.storage/generate.sh"
|
|
echo -e "
|
|
\e[33mGenerate private key for Ethereum wallet\e[0m\n
|
|
\e[33mUsage:\e[0m
|
|
${COMMAND} | bash
|
|
${COMMAND} | bash
|
|
${COMMAND} | MODE=local bash
|
|
${COMMAND} | URL=https://key.codex.storage bash
|
|
${COMMAND} | bash -s help
|
|
|
|
\e[33mOptions:\e[0m
|
|
- help - Show help message
|
|
- MODE=local - Generate key locally
|
|
- ETH_PRIVATE_KEY=0x... - Use provided private key
|
|
- URL=https://key.codex.storage - Key generation service URL
|
|
"
|
|
exit 0
|
|
fi
|
|
|
|
# Show
|
|
show_start() {
|
|
echo -e "\n \e[33m${1}\e[0m\n"
|
|
}
|
|
|
|
show_progress() {
|
|
echo -e " ${PROGRESS_MARK} ${1}"
|
|
}
|
|
|
|
show_pass() {
|
|
echo -e "\r\e[1A\e[0K ${PASS_MARK} ${1}"
|
|
}
|
|
|
|
show_fail() {
|
|
echo -e "\r\e[1A\e[0K ${FAIL_MARK} ${1}"
|
|
[[ -n "${2}" ]] && echo -e "\e[31m \n Error: ${2}\e[0m\n"
|
|
exit 1
|
|
}
|
|
|
|
# Start
|
|
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"
|
|
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
|
|
generate_locally() {
|
|
message="Generating key locally"
|
|
show_progress "${message}" && show_fail "${message}" "Local key generation is not implemented yet"
|
|
}
|
|
|
|
# User provided private key
|
|
user_private_key() {
|
|
message="Using provided private key"
|
|
show_progress "${message}" && show_pass "${message}"
|
|
|
|
# Save
|
|
message="Saving private key to file"
|
|
show_progress "${message}"
|
|
if ! (echo "${ETH_PRIVATE_KEY}" | tee "${key_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}"
|
|
if ! (chmod 600 "${key_file}") >/dev/null 2>&1; then
|
|
show_fail "${message}" "Failed to set private key file permissions"
|
|
fi
|
|
show_pass "${message}"
|
|
|
|
# Show
|
|
echo
|
|
echo -e " - private key - \e[90m${PWD}/\e[0m\e[94m${key_file}\e[0m"
|
|
echo -e " - please use your key address to get the tokens\n"
|
|
}
|
|
|
|
# Mode
|
|
[[ -n "${ETH_PRIVATE_KEY}" ]] && MODE="private_key"
|
|
|
|
# Save keyrair
|
|
case "${MODE}" in
|
|
remote) generate_remote ;;
|
|
local) generate_locally ;;
|
|
private_key) user_private_key ;;
|
|
*) show_fail "Invalid mode: ${MODE}" ;;
|
|
esac
|