From a7ea9ce93c80abf458abd48ac59a879e1906895f Mon Sep 17 00:00:00 2001 From: kexkey Date: Mon, 26 Nov 2018 13:38:26 -0500 Subject: [PATCH] OTS stamping and upgrading fixes --- doc/INSTALL-MANUAL-STEPS.md | 6 ++++ doc/INSTALL.md | 7 ++++ proxy_docker/app/script/ots.sh | 25 ++++++++++---- proxy_docker/app/script/responsetoclient.sh | 38 ++++++++++----------- 4 files changed, 51 insertions(+), 25 deletions(-) diff --git a/doc/INSTALL-MANUAL-STEPS.md b/doc/INSTALL-MANUAL-STEPS.md index 8d51d49..5b228a4 100644 --- a/doc/INSTALL-MANUAL-STEPS.md +++ b/doc/INSTALL-MANUAL-STEPS.md @@ -145,6 +145,12 @@ id="003";h64=$(echo -n "{\"alg\":\"HS256\",\"typ\":\"JWT\"}" | base64);p64=$(ech id="003";h64=$(echo -n "{\"alg\":\"HS256\",\"typ\":\"JWT\"}" | base64);p64=$(echo -n "{\"id\":\"$id\",\"exp\":$((`date +"%s"`+10))}" | base64);k="b9b8d527a1a27af2ad1697db3521f883760c342fc386dbc42c4efbb1a4d5e0af";s=$(echo -n "$h64.$p64" | openssl dgst -hmac "$k" -sha256 -r | cut -sd ' ' -f1);token="$h64.$p64.$s";curl -v -H "Content-Type: application/json" -d '{"hash":"123","callbackUrl":"http://callback"}' -H "Authorization: Bearer $token" -k https://localhost/ots_stamp ``` +If you need the authorization header to copy/paste in another tool: + +```shell +id="003";h64=$(echo -n "{\"alg\":\"HS256\",\"typ\":\"JWT\"}" | base64);p64=$(echo -n "{\"id\":\"$id\",\"exp\":$((`date +"%s"`+30))}" | base64);k="b9b8d527a1a27af2ad1697db3521f883760c342fc386dbc42c4efbb1a4d5e0af";s=$(echo -n "$h64.$p64" | openssl dgst -hmac "$k" -sha256 -r | cut -sd ' ' -f1);token="$h64.$p64.$s";echo "Bearer $token" +``` + ```shell echo "GET /getbestblockinfo" | docker run --rm -i --network=cyphernodenet alpine nc proxy:8888 - echo "GET /getbalance" | docker run --rm -i --network=cyphernodenet alpine nc proxy:8888 - diff --git a/doc/INSTALL.md b/doc/INSTALL.md index 9bd13b3..d78cd6a 100644 --- a/doc/INSTALL.md +++ b/doc/INSTALL.md @@ -116,6 +116,13 @@ pi@SP-BTC01:~ $ docker network connect cyphernodenet btcnode ```shell id="001";h64=$(echo -n "{\"alg\":\"HS256\",\"typ\":\"JWT\"}" | base64);p64=$(echo -n "{\"id\":\"$id\",\"exp\":$((`date +"%s"`+10))}" | base64);k="2df1eeea370eacdc5cf7e96c2d82140d1568079a5d4d87006ec8718a98883b36";s=$(echo -n "$h64.$p64" | openssl dgst -hmac "$k" -sha256 -r | cut -sd ' ' -f1);token="$h64.$p64.$s";curl -H "Authorization: Bearer $token" -k https://localhost/getbestblockhash id="003";h64=$(echo -n "{\"alg\":\"HS256\",\"typ\":\"JWT\"}" | base64);p64=$(echo -n "{\"id\":\"$id\",\"exp\":$((`date +"%s"`+10))}" | base64);k="b9b8d527a1a27af2ad1697db3521f883760c342fc386dbc42c4efbb1a4d5e0af";s=$(echo -n "$h64.$p64" | openssl dgst -hmac "$k" -sha256 -r | cut -sd ' ' -f1);token="$h64.$p64.$s";curl -H "Authorization: Bearer $token" -k https://localhost/getbalance +id="003";h64=$(echo -n "{\"alg\":\"HS256\",\"typ\":\"JWT\"}" | base64);p64=$(echo -n "{\"id\":\"$id\",\"exp\":$((`date +"%s"`+10))}" | base64);k="b9b8d527a1a27af2ad1697db3521f883760c342fc386dbc42c4efbb1a4d5e0af";s=$(echo -n "$h64.$p64" | openssl dgst -hmac "$k" -sha256 -r | cut -sd ' ' -f1);token="$h64.$p64.$s";curl -v -H "Content-Type: application/json" -d '{"hash":"123","callbackUrl":"http://callback"}' -H "Authorization: Bearer $token" -k https://localhost/ots_stamp +``` + +If you need the authorization header to copy/paste in another tool: + +```shell +id="003";h64=$(echo -n "{\"alg\":\"HS256\",\"typ\":\"JWT\"}" | base64);p64=$(echo -n "{\"id\":\"$id\",\"exp\":$((`date +"%s"`+60))}" | base64);k="b9b8d527a1a27af2ad1697db3521f883760c342fc386dbc42c4efbb1a4d5e0af";s=$(echo -n "$h64.$p64" | openssl dgst -hmac "$k" -sha256 -r | cut -sd ' ' -f1);token="$h64.$p64.$s";echo "Bearer $token" ``` ## Test deployment from any host of the swarm diff --git a/proxy_docker/app/script/ots.sh b/proxy_docker/app/script/ots.sh index e55cf81..807cb5d 100644 --- a/proxy_docker/app/script/ots.sh +++ b/proxy_docker/app/script/ots.sh @@ -79,10 +79,12 @@ request_ots_stamp() if [ "${returncode}" -eq 0 ]; then # jq -e will have a return code of 1 if the supplied tag is null. - errorstring=$(echo "${result}" | tr '\r\n' ' ' | jq -e ".error" | tr -d '"') + errorstring=$(echo "${result}" | tr '\r\n' ' ' | jq -e ".error") if [ "$?" -eq "0" ]; then # Error tag not null, so there's an error + errorstring=$(echo "${errorstring}" | tr -d '"') + # If the error message is "Already exists" trace "[request_ots_stamp] grepping 'already exists'..." echo "${result}" | grep "already exists" > /dev/null @@ -161,12 +163,23 @@ serve_ots_backoffice() returncode=$? trace_rc ${returncode} trace "[serve_ots_backoffice] result=${result}" - if [ "${returncode}" -eq 0 ]; then - trace "[serve_ots_backoffice] just upgraded!" - sql "UPDATE stamp SET upgraded=1 WHERE hash=\"${hash}\"" - trace_rc $? - upgraded=1 + if [ "${returncode}" -eq 0 ]; then + # CURL success... let's see if error in response + errorstring=$(echo "${result}" | tr '\r\n' ' ' | jq -e ".error") + if [ "$?" -eq "0" ]; then + # Error tag not null, so there's an error + trace "[serve_ots_backoffice] not upgraded!" + + upgraded=0 + else + # No failure, upgraded + trace "[serve_ots_backoffice] just upgraded!" + sql "UPDATE stamp SET upgraded=1 WHERE hash=\"${hash}\"" + trace_rc $? + + upgraded=1 + fi fi fi if [ "${upgraded}" -eq "1" ]; then diff --git a/proxy_docker/app/script/responsetoclient.sh b/proxy_docker/app/script/responsetoclient.sh index 53f95ec..28121e5 100644 --- a/proxy_docker/app/script/responsetoclient.sh +++ b/proxy_docker/app/script/responsetoclient.sh @@ -4,37 +4,37 @@ response_to_client() { - trace "Entering response_to_client()..." + trace "Entering response_to_client()..." - local response=${1} - local returncode=${2} + local response=${1} + local returncode=${2} - ([ -z "${returncode}" ] || [ "${returncode}" -eq "0" ]) && echo -ne "HTTP/1.1 200 OK\r\n" - [ -n "${returncode}" ] && [ "${returncode}" -ne "0" ] && echo -ne "HTTP/1.1 400 Bad Request\r\n" + ([ -z "${returncode}" ] || [ "${returncode}" -eq "0" ]) && echo -ne "HTTP/1.1 200 OK\r\n" + [ -n "${returncode}" ] && [ "${returncode}" -ne "0" ] && echo -ne "HTTP/1.1 400 Bad Request\r\n" - echo -en "Content-Type: application/json\r\nContent-Length: ${#response}\r\n\r\n${response}" + echo -en "Content-Type: application/json\r\nContent-Length: ${#response}\r\n\r\n${response}" - # Small delay needed for the data to be processed correctly by peer - sleep 0.2s + # Small delay needed for the data to be processed correctly by peer + sleep 0.2s } file_response_to_client() { - trace "Entering bin_response_to_client()..." + trace "Entering file_response_to_client()..." - local path=${1} - local filename=${2} - local pathfile="${path}${filename}" - local returncode + local path=${1} + local filename=${2} + local pathfile="${path}${filename}" + local returncode - [ -r "${pathfile}" ] \ - && echo -ne "HTTP/1.1 200 OK\r\nContent-Disposition: inline; filename=\"${filename}\"\r\nContent-Length: $(stat -c'%s' ${pathfile})\r\n\r\n" \ - && cat ${pathfile} + [ -r "${pathfile}" ] \ + && echo -ne "HTTP/1.1 200 OK\r\nContent-Disposition: inline; filename=\"${filename}\"\r\nContent-Length: $(stat -c'%s' ${pathfile})\r\n\r\n" \ + && cat ${pathfile} - [ ! -r "${pathfile}" ] && echo -ne "HTTP/1.1 404 Not Found\r\n" + [ ! -r "${pathfile}" ] && echo -ne "HTTP/1.1 404 Not Found\r\n" - # Small delay needed for the data to be processed correctly by peer - sleep 0.2s + # Small delay needed for the data to be processed correctly by peer + sleep 0.2s } case "${0}" in *responsetoclient.sh) response_to_client $@;; esac