forked from Qortal/qortal
d0aafaee60
This will be useful for metadata, playlists, etc, as well as some types of data published by Qortal apps.
130 lines
3.7 KiB
Bash
Executable File
130 lines
3.7 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 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
|