forked from Qortal/qortal
qdata has reached the stage of needing parameterized arguments, but this is low priority now that we have data functionality within the UI itself.
106 lines
3.1 KiB
Bash
Executable File
106 lines
3.1 KiB
Bash
Executable File
#!/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] [dirpath] <identifier>"
|
|
echo
|
|
echo "Fetch data:"
|
|
echo "qdata GET [service] [name] <identifier-or-default> <filepath-or-default> <rebuild>"
|
|
echo
|
|
echo "Notes:"
|
|
echo "- When requesting a resource, please supply the relative path to a file within the data structure,"
|
|
echo " or 'default' to indicate a file with no identifier."
|
|
echo "- The same applies when specifying the relative path to a file within the data structure; use 'default'"
|
|
echo " to indicate a single file resource."
|
|
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
|
|
identifier=$5
|
|
|
|
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}/${identifier}" -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
|
|
identifier=$4
|
|
filepath=$5
|
|
rebuild=$6
|
|
|
|
if [ -z "${rebuild}" ]; then
|
|
rebuild="false"
|
|
fi
|
|
|
|
# Handle default
|
|
if [[ "${identifier}" == "default" ]]; then
|
|
identifier=""
|
|
fi
|
|
if [[ "${filepath}" == "default" ]]; then
|
|
filepath=""
|
|
fi
|
|
|
|
# We use a different API depending on whether or not an identifier is supplied
|
|
if [ -n "${identifier}" ]; then
|
|
response=$(curl --silent --insecure -X GET "http://${host}:${port}/arbitrary/${service}/${name}/${identifier}?rebuild=${rebuild}&filepath=${filepath}")
|
|
else
|
|
response=$(curl --silent --insecure -X GET "http://${host}:${port}/arbitrary/${service}/${name}?rebuild=${rebuild}&filepath=${filepath}")
|
|
fi
|
|
|
|
if [ -z "${response}" ]; then
|
|
echo "Empty response from ${host}:${port}"
|
|
fi
|
|
if [[ "${response}" == *"error"* || "${response}" == *"ERROR"* ]]; then
|
|
echo "${response}"; exit
|
|
fi
|
|
|
|
echo "${response}"
|
|
|
|
fi
|