From e91affc365068b66ef1eeb23b568442c4c240fa9 Mon Sep 17 00:00:00 2001 From: Travis Neely <> Date: Tue, 19 Apr 2022 23:47:58 -0500 Subject: [PATCH 1/5] Add script for dns api with Nearly Free Speech --- dnsapi/dns_nfs.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 dnsapi/dns_nfs.sh diff --git a/dnsapi/dns_nfs.sh b/dnsapi/dns_nfs.sh new file mode 100755 index 00000000..f2b930f2 --- /dev/null +++ b/dnsapi/dns_nfs.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env sh + +# Nearly Free Speech DNS API (https://www.nearlyfreespeech.net) +# Author: Travis Neely (https://github.com/Travisivart) +# Created: 2022-04-19 + +# Expected environment variables as such: +# +# export NFS_ACCOUNT="your_nearly_free_speech_account" +# export NFS_API_KEY="your_nearly_free_speech_api_key" +# + +# Usage: dns_nfs_add _acme-challenge.domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" +dns_nfs_add() { + FULLDOMAIN=$1 + TXTVALUE=$2 + ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') + SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') + + if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then + unset SUBDOMAIN + fi + + _nfs_rest "/dns/$ROOTDOMAIN/addRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" +} + +# Usage: dns_nfs_rm domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" +dns_nfs_rm() { + FULLDOMAIN=$1 + TXTVALUE=$2 + ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') + SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') + + if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then + unset SUBDOMAIN + fi + + _nfs_rest "/dns/$ROOTDOMAIN/removeRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" +} + +#################### Private functions below ################################## +# Usage add: _nfs_rest "/dns/domain.com/addRR" "name=" 'type=TXT' "data=KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" +# remove: _nfs_rest "/dns/domain.com/removeRR" "name=www" 'type=TXT' "data=KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" +_nfs_rest () { + + # Make sure NFS_ACCOUNT is set else exit + if [ -z "$NFS_ACCOUNT" ]; then + echo "NFS_ACCOUNT is not set, run 'export NFS_ACCOUNT=\"your_nearly_free_speech_account\" and rerun." + exit 1 + fi + + # Make sure NFS_API_KEY is set else exit + if [ -z "$NFS_API_KEY" ]; then + echo "NFS_API_KEY is not set, run 'export NFS_API_KEY=\"your_nearly_free_speech_api_key\" and rerun." + exit 1 + fi + + TIMESTAMP=$(date +%s) + SALT=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 16) + REQUEST_URI="$1" + + if [ "$#" -gt "1" ]; then + PARAMETERS="$2" + fi + + COUNT=3 + while test $COUNT -le $# + do + eval "PARAMETER=\$$COUNT" + PARAMETERS="$PARAMETERS&$PARAMETER" + COUNT=$((COUNT + 1)) + done + + BODY=$PARAMETERS + BODY_HASH=$(printf "%s" "$BODY" | sha1sum | awk '{print $1}') + HASH_STRING=$(printf "%s" "$NFS_ACCOUNT;$TIMESTAMP;$SALT;$NFS_API_KEY;$REQUEST_URI;$BODY_HASH") + HASH=$(printf "%s" "$HASH_STRING" | sha1sum | awk '{print $1}') + + printf "%s" "$(curl -s -o - -k -X POST -H "X-NFSN-Authentication: $NFS_ACCOUNT;$TIMESTAMP;$SALT;$HASH" -d "$BODY" "https://api.nearlyfreespeech.net$REQUEST_URI")" +} \ No newline at end of file From 2578181f5200830afdc3997457f65b1e62433b86 Mon Sep 17 00:00:00 2001 From: Travis Neely Date: Fri, 1 Sep 2023 18:33:28 -0500 Subject: [PATCH 2/5] Remove unused lines --- dnsapi/dns_nfs.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/dnsapi/dns_nfs.sh b/dnsapi/dns_nfs.sh index f2b930f2..955438be 100755 --- a/dnsapi/dns_nfs.sh +++ b/dnsapi/dns_nfs.sh @@ -13,7 +13,6 @@ # Usage: dns_nfs_add _acme-challenge.domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" dns_nfs_add() { FULLDOMAIN=$1 - TXTVALUE=$2 ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') @@ -27,7 +26,6 @@ dns_nfs_add() { # Usage: dns_nfs_rm domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" dns_nfs_rm() { FULLDOMAIN=$1 - TXTVALUE=$2 ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') From e73df023ecd8eb59c5265155817d22b73022e2af Mon Sep 17 00:00:00 2001 From: Travis Neely Date: Fri, 1 Sep 2023 18:36:52 -0500 Subject: [PATCH 3/5] Add shellcheck ignore --- dnsapi/dns_nfs.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/dnsapi/dns_nfs.sh b/dnsapi/dns_nfs.sh index 955438be..bd930895 100755 --- a/dnsapi/dns_nfs.sh +++ b/dnsapi/dns_nfs.sh @@ -65,6 +65,7 @@ _nfs_rest () { while test $COUNT -le $# do eval "PARAMETER=\$$COUNT" + # shellcheck disable=SC2153 PARAMETERS="$PARAMETERS&$PARAMETER" COUNT=$((COUNT + 1)) done From 36a79c9ce26566fe0d14db5ae8f2f4ca21ea271d Mon Sep 17 00:00:00 2001 From: Travis Neely Date: Sat, 2 Sep 2023 02:11:24 -0500 Subject: [PATCH 4/5] Run shfmt --- dnsapi/dns_nfs.sh | 107 +++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/dnsapi/dns_nfs.sh b/dnsapi/dns_nfs.sh index bd930895..b07c6778 100755 --- a/dnsapi/dns_nfs.sh +++ b/dnsapi/dns_nfs.sh @@ -12,68 +12,67 @@ # Usage: dns_nfs_add _acme-challenge.domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" dns_nfs_add() { - FULLDOMAIN=$1 - ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') - SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') - - if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then - unset SUBDOMAIN - fi - - _nfs_rest "/dns/$ROOTDOMAIN/addRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" + FULLDOMAIN=$1 + ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') + SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') + + if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then + unset SUBDOMAIN + fi + + _nfs_rest "/dns/$ROOTDOMAIN/addRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" } # Usage: dns_nfs_rm domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" dns_nfs_rm() { - FULLDOMAIN=$1 - ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') - SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') + FULLDOMAIN=$1 + ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') + SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') - if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then - unset SUBDOMAIN - fi + if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then + unset SUBDOMAIN + fi - _nfs_rest "/dns/$ROOTDOMAIN/removeRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" + _nfs_rest "/dns/$ROOTDOMAIN/removeRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" } #################### Private functions below ################################## # Usage add: _nfs_rest "/dns/domain.com/addRR" "name=" 'type=TXT' "data=KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" # remove: _nfs_rest "/dns/domain.com/removeRR" "name=www" 'type=TXT' "data=KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" -_nfs_rest () { - - # Make sure NFS_ACCOUNT is set else exit - if [ -z "$NFS_ACCOUNT" ]; then - echo "NFS_ACCOUNT is not set, run 'export NFS_ACCOUNT=\"your_nearly_free_speech_account\" and rerun." - exit 1 - fi - - # Make sure NFS_API_KEY is set else exit - if [ -z "$NFS_API_KEY" ]; then - echo "NFS_API_KEY is not set, run 'export NFS_API_KEY=\"your_nearly_free_speech_api_key\" and rerun." - exit 1 - fi - - TIMESTAMP=$(date +%s) - SALT=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 16) - REQUEST_URI="$1" - - if [ "$#" -gt "1" ]; then - PARAMETERS="$2" - fi - - COUNT=3 - while test $COUNT -le $# - do - eval "PARAMETER=\$$COUNT" - # shellcheck disable=SC2153 - PARAMETERS="$PARAMETERS&$PARAMETER" - COUNT=$((COUNT + 1)) - done - - BODY=$PARAMETERS - BODY_HASH=$(printf "%s" "$BODY" | sha1sum | awk '{print $1}') - HASH_STRING=$(printf "%s" "$NFS_ACCOUNT;$TIMESTAMP;$SALT;$NFS_API_KEY;$REQUEST_URI;$BODY_HASH") - HASH=$(printf "%s" "$HASH_STRING" | sha1sum | awk '{print $1}') - - printf "%s" "$(curl -s -o - -k -X POST -H "X-NFSN-Authentication: $NFS_ACCOUNT;$TIMESTAMP;$SALT;$HASH" -d "$BODY" "https://api.nearlyfreespeech.net$REQUEST_URI")" -} \ No newline at end of file +_nfs_rest() { + + # Make sure NFS_ACCOUNT is set else exit + if [ -z "$NFS_ACCOUNT" ]; then + echo "NFS_ACCOUNT is not set, run 'export NFS_ACCOUNT=\"your_nearly_free_speech_account\" and rerun." + exit 1 + fi + + # Make sure NFS_API_KEY is set else exit + if [ -z "$NFS_API_KEY" ]; then + echo "NFS_API_KEY is not set, run 'export NFS_API_KEY=\"your_nearly_free_speech_api_key\" and rerun." + exit 1 + fi + + TIMESTAMP=$(date +%s) + SALT=$(tr -dc 'a-zA-Z0-9' Date: Sat, 2 Sep 2023 02:13:13 -0500 Subject: [PATCH 5/5] shfmt again --- dnsapi/dns_nfs.sh | 96 +++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/dnsapi/dns_nfs.sh b/dnsapi/dns_nfs.sh index b07c6778..ddd60c95 100755 --- a/dnsapi/dns_nfs.sh +++ b/dnsapi/dns_nfs.sh @@ -12,28 +12,28 @@ # Usage: dns_nfs_add _acme-challenge.domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" dns_nfs_add() { - FULLDOMAIN=$1 - ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') - SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') + FULLDOMAIN=$1 + ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') + SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') - if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then - unset SUBDOMAIN - fi + if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then + unset SUBDOMAIN + fi - _nfs_rest "/dns/$ROOTDOMAIN/addRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" + _nfs_rest "/dns/$ROOTDOMAIN/addRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" } # Usage: dns_nfs_rm domain.com "KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" dns_nfs_rm() { - FULLDOMAIN=$1 - ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') - SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') + FULLDOMAIN=$1 + ROOTDOMAIN=$(echo "$FULLDOMAIN" | awk -F '.' '{print $(NF-1)"."$NF}') + SUBDOMAIN=$(echo "$FULLDOMAIN" | sed 's/.'"$ROOTDOMAIN"'//g') - if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then - unset SUBDOMAIN - fi + if [ "$SUBDOMAIN" = "$FULLDOMAIN" ]; then + unset SUBDOMAIN + fi - _nfs_rest "/dns/$ROOTDOMAIN/removeRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" + _nfs_rest "/dns/$ROOTDOMAIN/removeRR" "name=$SUBDOMAIN" 'type=TXT' "data=$2" } #################### Private functions below ################################## @@ -41,38 +41,38 @@ dns_nfs_rm() { # remove: _nfs_rest "/dns/domain.com/removeRR" "name=www" 'type=TXT' "data=KjiayTfXPHmnHmOdevsOtJyzsU9AHw2T6R0lNVCl_oi" _nfs_rest() { - # Make sure NFS_ACCOUNT is set else exit - if [ -z "$NFS_ACCOUNT" ]; then - echo "NFS_ACCOUNT is not set, run 'export NFS_ACCOUNT=\"your_nearly_free_speech_account\" and rerun." - exit 1 - fi - - # Make sure NFS_API_KEY is set else exit - if [ -z "$NFS_API_KEY" ]; then - echo "NFS_API_KEY is not set, run 'export NFS_API_KEY=\"your_nearly_free_speech_api_key\" and rerun." - exit 1 - fi - - TIMESTAMP=$(date +%s) - SALT=$(tr -dc 'a-zA-Z0-9'