Browse Source

Updated input parameters per feedback from @Neilpang. Also updated debugging statements to be consistently applied.

pull/5301/head
Gary McGregor 3 months ago
parent
commit
432f6ac4d7
No known key found for this signature in database GPG Key ID: D2A7E7C1C113901
  1. 160
      dnsapi/dns_omglol.sh

160
dnsapi/dns_omglol.sh

@ -6,10 +6,10 @@ Domains: omg.lol
Site: github.com/acmesh-official/acme.sh/wiki/DNS-API-Dev-Guide Site: github.com/acmesh-official/acme.sh/wiki/DNS-API-Dev-Guide
Docs: github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_duckdns Docs: github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_duckdns
Options: Options:
omglolapikey API Key from omg.lol. This is accesible from the bottom of the account page at https://home.omg.lol/account
omgloladdress This is your omg.lol address, without the preceding @ - you can see your list on your dashboard at https://home.omg.lol/dashboard
omg_apikey API Key from omg.lol. This is accesible from the bottom of the account page at https://home.omg.lol/account
omg_address This is your omg.lol address, without the preceding @ - you can see your list on your dashboard at https://home.omg.lol/dashboard
Issues: github.com/acmesh-official/acme.sh Issues: github.com/acmesh-official/acme.sh
Author: @Kholin <kholin+omglolapi@omg.lol>
Author: @Kholin <kholin+acme.omglolapi@omg.lol>
' '
#returns 0 means success, otherwise error. #returns 0 means success, otherwise error.
@ -22,33 +22,33 @@ Author: @Kholin <kholin+omglolapi@omg.lol>
dns_omglol_add() { dns_omglol_add() {
fulldomain=$1 fulldomain=$1
txtvalue=$2 txtvalue=$2
omglol_apikey="${omglol_apikey:-$(_readaccountconf_mutable omglol_apikey)}"
omglol_address="${omglol_address:-$(_readaccountconf_mutable omglol_address)}"
omg_apikey="${omg_apikey:-$(_readaccountconf_mutable omg_apikey)}"
omg_address="${omg_address:-$(_readaccountconf_mutable omg_address)}"
# As omg.lol includes a leading @ for their addresses, pre-strip this before save # As omg.lol includes a leading @ for their addresses, pre-strip this before save
omglol_address="$(echo "$omglol_address" | tr -d '@')"
omg_address="$(echo "$omg_address" | tr -d '@')"
_saveaccountconf_mutable omglol_apikey "$omglol_apikey"
_saveaccountconf_mutable omglol_address "$omglol_address"
_saveaccountconf_mutable omg_apikey "$omg_apikey"
_saveaccountconf_mutable omg_address "$omg_address"
_info "Using omg.lol." _info "Using omg.lol."
_debug "Function" "dns_omglol_add()" _debug "Function" "dns_omglol_add()"
_debug "Full Domain Name" "$fulldomain" _debug "Full Domain Name" "$fulldomain"
_debug "txt Record Value" "$txtvalue" _debug "txt Record Value" "$txtvalue"
_secure_debug "omg.lol API key" "$omglol_apikey"
_debug "omg.lol Address" "$omglol_address"
_secure_debug "omg.lol API key" "$omg_apikey"
_debug "omg.lol Address" "$omg_address"
omglol_validate "$omglol_apikey" "$omglol_address" "$fulldomain"
omg_validate "$omg_apikey" "$omg_address" "$fulldomain"
if [ ! $? ]; then if [ ! $? ]; then
return 1 return 1
fi fi
dnsName=$(_getDnsRecordName "$fulldomain" "$omglol_address")
authHeader="$(_createAuthHeader "$omglol_apikey")"
dnsName=$(_getDnsRecordName "$fulldomain" "$omg_address")
authHeader="$(_createAuthHeader "$omg_apikey")"
_debug2 "dns_omglol_add(): Address" "$dnsName" _debug2 "dns_omglol_add(): Address" "$dnsName"
omglol_add "$omglol_address" "$authHeader" "$dnsName" "$txtvalue"
omg_add "$omg_address" "$authHeader" "$dnsName" "$txtvalue"
} }
@ -57,41 +57,48 @@ dns_omglol_add() {
dns_omglol_rm() { dns_omglol_rm() {
fulldomain=$1 fulldomain=$1
txtvalue=$2 txtvalue=$2
omglol_apikey="${omglol_apikey:-$(_readaccountconf_mutable omglol_apikey)}"
omglol_address="${omglol_address:-$(_readaccountconf_mutable omglol_address)}"
omg_apikey="${omg_apikey:-$(_readaccountconf_mutable omg_apikey)}"
omg_address="${omg_address:-$(_readaccountconf_mutable omg_address)}"
# As omg.lol includes a leading @ for their addresses, strip this in case provided # As omg.lol includes a leading @ for their addresses, strip this in case provided
omglol_address="$(echo "$omglol_address" | tr -d '@')"
omg_address="$(echo "$omg_address" | tr -d '@')"
_info "Using omg.lol" _info "Using omg.lol"
_debug fulldomain "$fulldomain"
_secure_debug ApiKey "$omglol_apikey"
_debug address "$omglol_address"
_debug "Function" "dns_omglol_rm()"
_debug "Full Domain Name" "$fulldomain"
_debug "txt Record Value" "$txtvalue"
_secure_debug "omg.lol API key" "$omg_apikey"
_debug "omg.lol Address" "$omg_address"
omglol_validate "$omglol_apikey" "$omglol_address" "$fulldomain"
omg_validate "$omg_apikey" "$omg_address" "$fulldomain"
if [ ! $? ]; then if [ ! $? ]; then
return 1 return 1
fi fi
dnsName=$(_getDnsRecordName "$fulldomain" "$omglol_address")
authHeader="$(_createAuthHeader "$omglol_apikey")"
dnsName=$(_getDnsRecordName "$fulldomain" "$omg_address")
authHeader="$(_createAuthHeader "$omg_apikey")"
omglol_delete "$omglol_address" "$authHeader" "$dnsName" "$txtvalue"
omg_delete "$omg_address" "$authHeader" "$dnsName" "$txtvalue"
} }
#################### Private functions below ################################## #################### Private functions below ##################################
# Check that the minimum requirements are present. Close ungracefully if not # Check that the minimum requirements are present. Close ungracefully if not
omglol_validate() {
omglol_apikey=$1
omglol_address=$2
omg_validate() {
omg_apikey=$1
omg_address=$2
fulldomain=$3 fulldomain=$3
if [ "" = "$omglol_address" ]; then
_debug2 "Function" "dns_validate()"
_secure_debug2 "omg.lol API key" "$omg_apikey"
_debug2 "omg.lol Address" "$omg_address"
_debug2 "Full Domain Name" "$fulldomain"
if [ "" = "$omg_address" ]; then
_err "omg.lol base address not provided. Exiting" _err "omg.lol base address not provided. Exiting"
return 1 return 1
fi fi
if [ "" = "$omglol_apikey" ]; then
if [ "" = "$omg_apikey" ]; then
_err "omg.lol API key not provided. Exiting" _err "omg.lol API key not provided. Exiting"
return 1 return 1
fi fi
@ -102,24 +109,24 @@ omglol_validate() {
return 1 return 1
fi fi
_endswith "$fulldomain" "$omglol_address.omg.lol"
_endswith "$fulldomain" "$omg_address.omg.lol"
if [ ! $? ]; then if [ ! $? ]; then
_err "Domain name is not a subdomain of provided omg.lol address $omglol_address"
_err "Domain name is not a subdomain of provided omg.lol address $omg_address"
return 1 return 1
fi fi
_debug "omglol_validate(): Required environment parameters are all present"
_debug "Required environment parameters are all present"
} }
# Add (or modify) an entry for a new ACME query # Add (or modify) an entry for a new ACME query
omglol_add() {
omg_add() {
address=$1 address=$1
authHeader=$2 authHeader=$2
dnsName=$3 dnsName=$3
txtvalue=$4 txtvalue=$4
_info "Creating DNS entry for $dnsName" _info "Creating DNS entry for $dnsName"
_debug2 " omglol_add()"
_debug2 "omg_add()"
_debug2 "omg.lol Address: " "$address" _debug2 "omg.lol Address: " "$address"
_secure_debug2 "omg.lol authorization header: " "$authHeader" _secure_debug2 "omg.lol authorization header: " "$authHeader"
_debug2 "Full Domain name:" "$dnsName.$address.omg.lol" _debug2 "Full Domain name:" "$dnsName.$address.omg.lol"
@ -128,26 +135,26 @@ omglol_add() {
export _H1="$authHeader" export _H1="$authHeader"
endpoint="https://api.omg.lol/address/$address/dns" endpoint="https://api.omg.lol/address/$address/dns"
_debug2 " Endpoint" "$endpoint"
_debug3 "Endpoint" "$endpoint"
payload='{"type": "TXT", "name":"'"$dnsName"'", "data":"'"$txtvalue"'", "ttl":30}' payload='{"type": "TXT", "name":"'"$dnsName"'", "data":"'"$txtvalue"'", "ttl":30}'
_debug2 " Payload" "$payload"
_debug3 "Payload" "$payload"
response=$(_post "$payload" "$endpoint" "" "POST" "application/json") response=$(_post "$payload" "$endpoint" "" "POST" "application/json")
omglol_validate_add "$response" "$dnsName.$address" "$txtvalue"
omg_validate_add "$response" "$dnsName.$address" "$txtvalue"
} }
omglol_validate_add() {
omg_validate_add() {
response=$1 response=$1
name=$2 name=$2
content=$3 content=$3
_info " Validating DNS record addition"
_debug2 " omglol_validate_add()"
_debug2 " Response" "$response"
_debug2 " DNS Name" "$name"
_debug2 " DNS value" "$content"
_debug "Validating DNS record addition"
_debug2 "omg_validate_add()"
_debug3 "Response" "$response"
_debug3 "DNS Name" "$name"
_debug3 "DNS value" "$content"
_jsonResponseCheck "$response" "success" "true" _jsonResponseCheck "$response" "success" "true"
if [ "1" = "$?" ]; then if [ "1" = "$?" ]; then
@ -173,30 +180,30 @@ omglol_validate_add() {
return 1 return 1
fi fi
_debug " Record Created successfully"
_info "Record Created successfully"
return 0 return 0
} }
omglol_getRecords() {
omg_getRecords() {
address=$1 address=$1
authHeader=$2 authHeader=$2
dnsName=$3 dnsName=$3
txtValue=$4 txtValue=$4
_debug2 " omglol_getRecords()"
_debug2 " omg.lol Address: " "$address"
_secure_debug2 " omg.lol Auth Header: " "$authHeader"
_debug2 " omg.lol DNS name:" "$dnsName"
_debug2 " txt Value" "$txtValue"
_debug2 "omg_getRecords()"
_debug3 "omg.lol Address: " "$address"
_secure_debug3 "omg.lol Auth Header: " "$authHeader"
_debug3 "omg.lol DNS name:" "$dnsName"
_debug3 "txt Value" "$txtValue"
export _H1="$authHeader" export _H1="$authHeader"
endpoint="https://api.omg.lol/address/$address/dns" endpoint="https://api.omg.lol/address/$address/dns"
_debug2 " Endpoint" "$endpoint"
_debug3 "Endpoint" "$endpoint"
payload=$(_get "$endpoint") payload=$(_get "$endpoint")
_debug2 " Received Payload:" "$payload"
_debug3 "Received Payload:" "$payload"
# Reformat the JSON to be more parseable # Reformat the JSON to be more parseable
recordID=$(echo "$payload" | _stripWhitespace) recordID=$(echo "$payload" | _stripWhitespace)
@ -207,41 +214,45 @@ omglol_getRecords() {
_getJsonElement "$recordID" "id" _getJsonElement "$recordID" "id"
} }
omglol_delete() {
omg_delete() {
address=$1 address=$1
authHeader=$2 authHeader=$2
dnsName=$3 dnsName=$3
txtValue=$4 txtValue=$4
_info "Deleting DNS entry for $dnsName with value $txtValue" _info "Deleting DNS entry for $dnsName with value $txtValue"
_debug2 " omglol_delete()"
_debug2 " omg.lol Address: " "$address"
_secure_debug2 " omg.lol Auth Header: " "$authHeader"
_debug2 " Full Domain name:" "$dnsName.$address.omg.lol"
_debug2 " txt Value" "$txtValue"
record=$(omglol_getRecords "$address" "$authHeader" "$dnsName" "$txtvalue")
_debug3 "omg_delete()"
_debug3 "omg.lol Address: " "$address"
_secure_debug3 "omg.lol Auth Header: " "$authHeader"
_debug3 "Full Domain name:" "$dnsName.$address.omg.lol"
_debug3 "txt Value" "$txtValue"
record=$(omg_getRecords "$address" "$authHeader" "$dnsName" "$txtvalue")
if [ "" = "$record" ]; then
_err "DNS record $address not found!"
return 1
fi
endpoint="https://api.omg.lol/address/$address/dns/$record" endpoint="https://api.omg.lol/address/$address/dns/$record"
_debug2 " Endpoint" "$endpoint"
_debug3 "Endpoint" "$endpoint"
export _H1="$authHeader" export _H1="$authHeader"
output=$(_post "" "$endpoint" "" "DELETE") output=$(_post "" "$endpoint" "" "DELETE")
_debug2 " Response" "$output"
_debug3 "Response" "$output"
omglol_validate_delete "$output"
omg_validate_delete "$output"
} }
# Validate the response on request to delete. Confirm stastus is success and # Validate the response on request to delete. Confirm stastus is success and
# Message indicates deletion was successful # Message indicates deletion was successful
# Input: Response - HTTP response received from delete request # Input: Response - HTTP response received from delete request
omglol_validate_delete() {
omg_validate_delete() {
response=$1 response=$1
_info "Validating DNS record deletion" _info "Validating DNS record deletion"
_debug2 " omglol_validate_delete()"
_debug " Response" "$response"
_debug3 "omg_validate_delete()"
_debug3 "Response" "$response"
_jsonResponseCheck "$output" "success" "true" _jsonResponseCheck "$output" "success" "true"
if [ "1" = "$?" ]; then if [ "1" = "$?" ]; then
@ -292,6 +303,7 @@ _jsonGetLastResponse() {
_debug3 "jsonGetLastResponse()" _debug3 "jsonGetLastResponse()"
_debug3 "Response provided" "$response" _debug3 "Response provided" "$response"
_debug3 "Field to get responses for" "$field" _debug3 "Field to get responses for" "$field"
responseValue=$(echo "$response" | grep -- "\"$field\"" | cut -f2 -d":") responseValue=$(echo "$response" | grep -- "\"$field\"" | cut -f2 -d":")
_debug3 "Response lines found:" "$responseValue" _debug3 "Response lines found:" "$responseValue"
@ -318,6 +330,10 @@ _getJsonElement() {
content=$1 content=$1
field=$2 field=$2
_debug3 "_getJsonElement()"
_debug3 "Input JSON element" "$content"
_debug3 "JSON element to isolate" "$field"
# With a single JSON entry to parse, convert commas to newlines puts each element on # With a single JSON entry to parse, convert commas to newlines puts each element on
# its own line - which then allows us to just grep teh name, remove the key, and # its own line - which then allows us to just grep teh name, remove the key, and
# isolate the value # isolate the value
@ -331,8 +347,11 @@ _getJsonElement() {
_createAuthHeader() { _createAuthHeader() {
apikey=$1 apikey=$1
_debug3 "_createAuthHeader()"
_secure_debug3 "Provided API Key" "$apikey"
authheader="Authorization: Bearer $apikey" authheader="Authorization: Bearer $apikey"
_secure_debug2 " Authorization Header" "$authheader"
_secure_debug3 "Authorization Header" "$authheader"
echo "$authheader" echo "$authheader"
} }
@ -340,6 +359,10 @@ _getDnsRecordName() {
fqdn=$1 fqdn=$1
address=$2 address=$2
_debug3 "_getDnsRecordName()"
_debug3 "FQDN" "$fqdn"
_debug3 "omg.lol Address" "$address"
echo "$fqdn" | sed 's/\.omg\.lol//g' | sed 's/\.'"$address"'$//g' echo "$fqdn" | sed 's/\.omg\.lol//g' | sed 's/\.'"$address"'$//g'
} }
@ -347,6 +370,9 @@ _unquoteString() {
output=$1 output=$1
quotes=0 quotes=0
_debug3 "_unquoteString()"
_debug3 "Possibly quoted string" "$output"
_startswith "$output" "\"" _startswith "$output" "\""
if [ $? ]; then if [ $? ]; then
quotes=$((quotes + 1)) quotes=$((quotes + 1))

Loading…
Cancel
Save