Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
fa98d72f
Commit
fa98d72f
authored
Jun 27, 2017
by
RaidenII
Browse files
Added preliminary support for DuckDNS TXT record API, a free Dynamic DNS provider
parent
ccf04928
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_duckdns.sh
0 → 100755
View file @
fa98d72f
#!/usr/bin/env sh
#Created by RaidenII, to use DuckDNS's API to add/remove text records
#06/27/2017
# Currently only support single domain access
# DuckDNS uses StartSSL as their cert provider
# Seems not supported natively on Linux
# So I fall back to HTTP for API
DuckDNS_API
=
"http://www.duckdns.org/update"
######## Public functions #####################
#Usage: dns_duckdns_add _acme-challenge.domain.duckdns.org "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_duckdns_add
()
{
fulldomain
=
$1
txtvalue
=
$2
# We'll extract the domain/username from full domain
IFS
=
'.'
read
-r
-a
fqdn
<<<
"
$fulldomain
"
DuckDNS_domain
=
"
${
fqdn
[-3]
}
"
if
[
-z
"
$DuckDNS_domain
"
]
;
then
_err
"Error extracting the domain."
return
1
fi
if
[
-z
"
$DuckDNS_token
"
]
;
then
DuckDNS_token
=
""
_err
"The token for your DuckDNS account is necessary."
_err
"You can look it up in your DuckDNS account."
return
1
fi
# Now save the credentials.
_saveaccountconf DuckDNS_domain
"
$DuckDNS_domain
"
_saveaccountconf DuckDNS_token
"
$DuckDNS_token
"
# Unfortunately, DuckDNS does not seems to support lookup domain through API
# So I assume your credentials (which are your domain and token) are correct
# If something goes wrong, we will get a KO response from DuckDNS
# Now add the TXT record to DuckDNS
_info
"Trying to add TXT record"
if
_duckdns_rest GET
"domains=
$DuckDNS_domain
&token=
$DuckDNS_token
&txt=
$txtvalue
"
&&
[
$response
==
"OK"
]
;
then
_info
"TXT record has been successfully added to your DuckDNS domain."
_info
"Note that all subdomains under this domain uses the same TXT record."
return
0
else
_err
"Errors happened during adding the TXT record."
return
1
fi
}
#Usage: fulldomain txtvalue
#Remove the txt record after validation.
dns_duckdns_rm
()
{
fulldomain
=
$1
txtvalue
=
$2
# Now remove the TXT record from DuckDNS
_info
"Trying to from TXT record"
if
_duckdns_rest GET
"domains=
$DuckDNS_domain
&token=
$DuckDNS_token
&txt=''&clear=true"
&&
[
$response
==
"OK"
]
;
then
_info
"TXT record has been successfully removed from your DuckDNS domain."
return
0
else
_err
"Errors happened during removing the TXT record."
return
1
fi
}
#################### Private functions below ##################################
#Usage: method URI data
_duckdns_rest
()
{
method
=
$1
param
=
"
$2
"
_debug param
"
$param
"
url
=
"
$DuckDNS_API
?
$param
"
_debug url
"
$url
"
# DuckDNS uses GET to update domain info
if
[
$method
==
"GET"
]
;
then
response
=
"
$(
_get
"
$url
"
)
"
else
_err
"Unsupported method"
return
1
fi
_debug response
"
$response
"
return
0
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment