#!/usr/bin/env bash # Qortal defaults host="localhost" port=12393 if [ -z "$*" ]; then echo "Usage:" echo echo "Host/update data:" echo "qdata [PUT/PATCH] [service] [name] [directory] [privkey]" echo echo "Fetch data:" echo "qdata GET [service] [name] [filename] " echo exit fi method=$1 service=$2 name=$3 if [ -z "${method}" ]; then echo "Error: missing method"; exit fi if [ -z "${service}" ]; then echo "Error: missing service"; exit fi if [ -z "${name}" ]; then echo "Error: missing name"; exit fi if [[ "${method}" == "PUT" || "${method}" == "PATCH" ]]; then directory=$4 if [ -z "${directory}" ]; then echo "Error: missing directory"; exit fi if [ -z "${QORTAL_PRIVKEY}" ]; then echo "Error: missing private key. Set it by running: export QORTAL_PRIVKEY=privkeyhere"; exit fi echo "Creating transaction - this can take a while..." tx_data=$(curl --silent --insecure -X ${method} "http://${host}:${port}/arbitrary/${service}/${name}" -d "${directory}") if [[ "${tx_data}" == *"error"* || "${tx_data}" == *"ERROR"* ]]; then echo "${tx_data}"; exit fi echo "Signing..." signed_tx_data=$(curl --silent --insecure -X POST "http://${host}:${port}/transactions/sign" -H "Content-Type: application/json" -d "{\"privateKey\":\"${QORTAL_PRIVKEY}\",\"transactionBytes\":\"${tx_data}\"}") if [[ "${signed_tx_data}" == *"error"* || "${signed_tx_data}" == *"ERROR"* ]]; then echo "${signed_tx_data}"; exit fi echo "Broadcasting..." success=$(curl --silent --insecure -X POST "http://${host}:${port}/transactions/process" -H "Content-Type: text/plain" -d "${signed_tx_data}") if [[ "${success}" == "true" ]]; then echo "Transaction broadcast successfully" else echo "Error when broadcasting transaction. Please try again." echo "Response: ${success}" fi elif [[ "${method}" == "GET" ]]; then filename=$4 rebuild=$5 if [ -z "${filename}" ]; then filename="index.html" fi if [ -z "${rebuild}" ]; then rebuild="false" fi response=$(curl --silent --insecure -X GET "http://${host}:${port}/arbitrary/${service}/${name}?rebuild=${rebuild}" -H "Content-Type: application/json" -d "{\"privateKey\":\"${private_key}\",\"transactionBytes\":\"${tx_data}\"}") if [[ "${response}" == *"error"* || "${response}" == *"ERROR"* ]]; then echo "${response}"; exit fi # Parse the successful response output_path="${response}/${filename}" if [ ! -f "${output_path}" ] && [ ! -d "${output_path}" ]; then echo "Error: file not found at path: ${output_path}" echo "Please ensure you have supplied a valid filename. The default is: index.html" exit fi cat "${output_path}" fi