Qortal Core - Main Code Repository Decentralized Data Network - Blockchain - TRUE Cross-Chain Trading - Application and Website Hosting - Much More - Qortal is the future internet infrastructure for the global digital world.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

129 lines
3.7 KiB

#!/usr/bin/env bash
# Qortal defaults
host="localhost"
port=12393
if [ -z "$*" ]; then
echo "Usage:"
echo
echo "Host/update data:"
echo "qdata POST [service] [name] PATH [dirpath] <identifier>"
echo "qdata POST [service] [name] STRING [data-string] <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 use '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}" == "POST" ]]; then
type=$4
data=$5
identifier=$6
if [ -z "${data}" ]; then
if [[ "${type}" == "PATH" ]]; then
echo "Error: missing directory"; exit
elif [[ "${type}" == "STRING" ]]; then
echo "Error: missing data string"; exit
else
echo "Error: unrecognized type"; exit
fi
fi
if [ -z "${QORTAL_PRIVKEY}" ]; then
echo "Error: missing private key. Set it by running: export QORTAL_PRIVKEY=privkeyhere"; exit
fi
# Create identifier component in URL
if [[ -z "${identifier}" || "${identifier}" == "default" ]]; then
identifier_component=""
else
identifier_component="/${identifier}"
fi
# Create type component in URL
if [[ "${type}" == "PATH" ]]; then
type_component=""
elif [[ "${type}" == "STRING" ]]; then
type_component="/string"
fi
echo "Creating transaction - this can take a while..."
tx_data=$(curl --silent --insecure -X ${method} "http://${host}:${port}/arbitrary/${service}/${name}${identifier_component}${type_component}" -d "${data}")
if [[ "${tx_data}" == *"error"* || "${tx_data}" == *"ERROR"* ]]; then
echo "${tx_data}"; exit
elif [ -z "${tx_data}" ]; then
echo "Error: no transaction data returned"; 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