-
-
Save PresGas/163481c04a26732adb0aad4cb4333117 to your computer and use it in GitHub Desktop.
NearlyFreeSpeech.NET API request "library", in pure shell (requires sha1sum and curl)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env sh | |
# Copyright (c) 2015 Nathan Schulte | |
# set LOGIN and API_KEY below -- | |
# see bottom for example use, in this case, checking and updating the default DNS A RR for a domain | |
# 0: request URI, e.g. '/dns/example.com/listRRs' | |
# 1..n: parameters | |
make_request () { | |
LOGIN='' | |
TIMESTAMP=$(date +%s) | |
SALT=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 16) | |
API_KEY='' | |
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" "$LOGIN;$TIMESTAMP;$SALT;$API_KEY;$REQUEST_URI;$BODY_HASH") | |
HASH=$(printf "%s" "$HASH_STRING" | sha1sum | awk '{print $1}') | |
#echo "Hash String: $HASH_STRING" | |
#echo "Hash: $HASH" | |
#echo "Parameters: $PARAMETERS" | |
#echo "Body: $BODY" | |
#echo "Body Hash: $BODY_HASH" | |
#echo "Login: $LOGIN" | |
#echo "Timestamp: $TIMESTAMP" | |
#echo "Salt: $SALT" | |
#echo "API Key: $API_KEY" | |
#echo "Request URI: $REQUEST_URI" | |
#echo "requesting $REQUEST_URI with $BODY" | |
printf "%s" "$(curl -s -o - -k -X POST -H "X-NFSN-Authentication: $LOGIN;$TIMESTAMP;$SALT;$HASH" -d "$BODY" "https://api.nearlyfreespeech.net$REQUEST_URI")" | |
} | |
A_RECORD=$(make_request '/dns/example.com/listRRs' 'name=' 'type=A' | sed 's/.*"data":"\([0-9\.]*\)".*/\1/') | |
IP="127.0.0.1" #`ip -o addr show ppp0 | awk 'FNR == 2 {print $4}'` | |
echo "existing record: $A_RECORD" | |
echo "current address: $IP" | |
if [ "$IP" != "$A_RECORD" ]; then | |
make_request '/dns/example.com/removeRR' 'name=' 'type=A' "data=$A_RECORD" | |
make_request '/dns/example.com/addRR' 'name=' 'type=A' "data=$IP" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment