mirror of
https://github.com/plantroon/acme.sh.git
synced 2024-12-27 07:21:53 +00:00
Merge branch 'dev' of https://github.com/Neilpang/acme.sh into dev
This commit is contained in:
commit
e46b392a8d
60
acme.sh
60
acme.sh
@ -3238,11 +3238,6 @@ _on_issue_success() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateaccount() {
|
|
||||||
_initpath
|
|
||||||
_regAccount
|
|
||||||
}
|
|
||||||
|
|
||||||
registeraccount() {
|
registeraccount() {
|
||||||
_reg_length="$1"
|
_reg_length="$1"
|
||||||
_initpath
|
_initpath
|
||||||
@ -3340,6 +3335,61 @@ _regAccount() {
|
|||||||
_info "ACCOUNT_THUMBPRINT" "$ACCOUNT_THUMBPRINT"
|
_info "ACCOUNT_THUMBPRINT" "$ACCOUNT_THUMBPRINT"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#implement updateaccount
|
||||||
|
updateaccount() {
|
||||||
|
_initpath
|
||||||
|
|
||||||
|
if [ ! -f "$ACCOUNT_KEY_PATH" ] && [ -f "$_OLD_ACCOUNT_KEY" ]; then
|
||||||
|
_info "mv $_OLD_ACCOUNT_KEY to $ACCOUNT_KEY_PATH"
|
||||||
|
mv "$_OLD_ACCOUNT_KEY" "$ACCOUNT_KEY_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$ACCOUNT_JSON_PATH" ] && [ -f "$_OLD_ACCOUNT_JSON" ]; then
|
||||||
|
_info "mv $_OLD_ACCOUNT_JSON to $ACCOUNT_JSON_PATH"
|
||||||
|
mv "$_OLD_ACCOUNT_JSON" "$ACCOUNT_JSON_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$ACCOUNT_KEY_PATH" ]; then
|
||||||
|
_err "Account key is not found at: $ACCOUNT_KEY_PATH"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_accUri=$(_readcaconf "ACCOUNT_URL")
|
||||||
|
_debug _accUri "$_accUri"
|
||||||
|
|
||||||
|
if [ -z "$_accUri" ]; then
|
||||||
|
_err "The account url is empty, please run '--update-account' first to update the account info first,"
|
||||||
|
_err "Then try again."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! _calcjwk "$ACCOUNT_KEY_PATH"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
_initAPI
|
||||||
|
|
||||||
|
if [ "$ACME_VERSION" = "2" ]; then
|
||||||
|
if [ "$ACCOUNT_EMAIL" ]; then
|
||||||
|
updjson='{"contact": ["mailto: '$ACCOUNT_EMAIL'"]}'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# ACMEv1: Updates happen the same way a registration is done.
|
||||||
|
# https://tools.ietf.org/html/draft-ietf-acme-acme-01#section-6.3
|
||||||
|
_regAccount
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# this part handles ACMEv2 account updates.
|
||||||
|
_send_signed_request "$_accUri" "$updjson"
|
||||||
|
|
||||||
|
if [ "$code" = '200' ]; then
|
||||||
|
_info "account update success for $_accUri."
|
||||||
|
else
|
||||||
|
_info "Error. The account was not updated."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
#Implement deactivate account
|
#Implement deactivate account
|
||||||
deactivateaccount() {
|
deactivateaccount() {
|
||||||
_initpath
|
_initpath
|
||||||
|
@ -182,8 +182,11 @@ _cf_rest() {
|
|||||||
data="$3"
|
data="$3"
|
||||||
_debug "$ep"
|
_debug "$ep"
|
||||||
|
|
||||||
export _H1="X-Auth-Email: $CF_Email"
|
email_trimmed=$(echo $CF_Email | tr -d '"')
|
||||||
export _H2="X-Auth-Key: $CF_Key"
|
key_trimmed=$(echo $CF_Key | tr -d '"')
|
||||||
|
|
||||||
|
export _H1="X-Auth-Email: $email_trimmed"
|
||||||
|
export _H2="X-Auth-Key: $key_trimmed"
|
||||||
export _H3="Content-Type: application/json"
|
export _H3="Content-Type: application/json"
|
||||||
|
|
||||||
if [ "$m" != "GET" ]; then
|
if [ "$m" != "GET" ]; then
|
||||||
|
130
dnsapi/dns_ddnss.sh
Normal file
130
dnsapi/dns_ddnss.sh
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
#Created by RaidenII, to use DuckDNS's API to add/remove text records
|
||||||
|
#modified by helbgd @ 03/13/2018 to support ddnss.de
|
||||||
|
#modified by mod242 @ 04/24/2018 to support different ddnss domains
|
||||||
|
#Please note: the Wildcard Feature must be turned on for the Host record
|
||||||
|
#and the checkbox for TXT needs to be enabled
|
||||||
|
|
||||||
|
# Pass credentials before "acme.sh --issue --dns dns_ddnss ..."
|
||||||
|
# --
|
||||||
|
# export DDNSS_Token="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
|
||||||
|
# --
|
||||||
|
#
|
||||||
|
|
||||||
|
DDNSS_DNS_API="https://ddnss.de/upd.php"
|
||||||
|
|
||||||
|
######## Public functions #####################
|
||||||
|
|
||||||
|
#Usage: dns_ddnss_add _acme-challenge.domain.ddnss.de "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
|
||||||
|
dns_ddnss_add() {
|
||||||
|
fulldomain=$1
|
||||||
|
txtvalue=$2
|
||||||
|
|
||||||
|
DDNSS_Token="${DDNSS_Token:-$(_readaccountconf_mutable DDNSS_Token)}"
|
||||||
|
if [ -z "$DDNSS_Token" ]; then
|
||||||
|
_err "You must export variable: DDNSS_Token"
|
||||||
|
_err "The token for your DDNSS account is necessary."
|
||||||
|
_err "You can look it up in your DDNSS account."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Now save the credentials.
|
||||||
|
_saveaccountconf_mutable DDNSS_Token "$DDNSS_Token"
|
||||||
|
|
||||||
|
# Unfortunately, DDNSS 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 DDNSS
|
||||||
|
|
||||||
|
if ! _ddnss_get_domain; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Now add the TXT record to DDNSS DNS
|
||||||
|
_info "Trying to add TXT record"
|
||||||
|
if _ddnss_rest GET "key=$DDNSS_Token&host=$_ddnss_domain&txtm=1&txt=$txtvalue"; then
|
||||||
|
if [ "$response" = "Updated 1 hostname." ]; then
|
||||||
|
_info "TXT record has been successfully added to your DDNSS 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, response=$response"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
_err "Errors happened during adding the TXT record."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#Usage: fulldomain txtvalue
|
||||||
|
#Remove the txt record after validation.
|
||||||
|
dns_ddnss_rm() {
|
||||||
|
fulldomain=$1
|
||||||
|
txtvalue=$2
|
||||||
|
|
||||||
|
DDNSS_Token="${DDNSS_Token:-$(_readaccountconf_mutable DDNSS_Token)}"
|
||||||
|
if [ -z "$DDNSS_Token" ]; then
|
||||||
|
_err "You must export variable: DDNSS_Token"
|
||||||
|
_err "The token for your DDNSS account is necessary."
|
||||||
|
_err "You can look it up in your DDNSS account."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! _ddnss_get_domain; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Now remove the TXT record from DDNS DNS
|
||||||
|
_info "Trying to remove TXT record"
|
||||||
|
if _ddnss_rest GET "key=$DDNSS_Token&host=$_ddnss_domain&txtm=1&txt=."; then
|
||||||
|
if [ "$response" = "Updated 1 hostname." ]; then
|
||||||
|
_info "TXT record has been successfully removed from your DDNSS domain."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
_err "Errors happened during removing the TXT record, response=$response"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
_err "Errors happened during removing the TXT record."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#################### Private functions below ##################################
|
||||||
|
|
||||||
|
#fulldomain=_acme-challenge.domain.ddnss.de
|
||||||
|
#returns
|
||||||
|
# _ddnss_domain=domain
|
||||||
|
_ddnss_get_domain() {
|
||||||
|
|
||||||
|
# We'll extract the domain/username from full domain
|
||||||
|
_ddnss_domain="$(echo "$fulldomain" | _lower_case | _egrep_o '[.][^.][^.]*[.](ddnss|dyn-ip24|dyndns|dyn|dyndns1|home-webserver|myhome-server|dynip)\..*' | cut -d . -f 2-)"
|
||||||
|
|
||||||
|
if [ -z "$_ddnss_domain" ]; then
|
||||||
|
_err "Error extracting the domain."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#Usage: method URI
|
||||||
|
_ddnss_rest() {
|
||||||
|
method=$1
|
||||||
|
param="$2"
|
||||||
|
_debug param "$param"
|
||||||
|
url="$DDNSS_DNS_API?$param"
|
||||||
|
_debug url "$url"
|
||||||
|
|
||||||
|
# DDNSS uses GET to update domain info
|
||||||
|
if [ "$method" = "GET" ]; then
|
||||||
|
response="$(_get "$url" | sed 's/<[^>]*>//g;/</N;//ba' | _tail_n 1)"
|
||||||
|
else
|
||||||
|
_err "Unsupported method"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_debug2 response "$response"
|
||||||
|
return 0
|
||||||
|
}
|
@ -53,6 +53,18 @@ _hostingde_parse() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_hostingde_parse_no_strip_whitespace() {
|
||||||
|
find="${1}"
|
||||||
|
if [ "${2}" ]; then
|
||||||
|
notfind="${2}"
|
||||||
|
fi
|
||||||
|
if [ "${notfind}" ]; then
|
||||||
|
_egrep_o \""${find}\":.*" | grep -v "${notfind}" | cut -d ':' -f 2 | cut -d ',' -f 1
|
||||||
|
else
|
||||||
|
_egrep_o \""${find}\":.*" | cut -d ':' -f 2 | cut -d ',' -f 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
_hostingde_getZoneConfig() {
|
_hostingde_getZoneConfig() {
|
||||||
_info "Getting ZoneConfig"
|
_info "Getting ZoneConfig"
|
||||||
curZone="${fulldomain#*.}"
|
curZone="${fulldomain#*.}"
|
||||||
@ -85,6 +97,22 @@ _hostingde_getZoneConfig() {
|
|||||||
zoneConfigDnsServerGroupId=$(echo "${curResult}" | _hostingde_parse "dnsServerGroupId")
|
zoneConfigDnsServerGroupId=$(echo "${curResult}" | _hostingde_parse "dnsServerGroupId")
|
||||||
zoneConfigEmailAddress=$(echo "${curResult}" | _hostingde_parse "emailAddress")
|
zoneConfigEmailAddress=$(echo "${curResult}" | _hostingde_parse "emailAddress")
|
||||||
zoneConfigDnsSecMode=$(echo "${curResult}" | _hostingde_parse "dnsSecMode")
|
zoneConfigDnsSecMode=$(echo "${curResult}" | _hostingde_parse "dnsSecMode")
|
||||||
|
zoneConfigTemplateValues=$(echo "${curResult}" | _hostingde_parse_no_strip_whitespace "templateValues")
|
||||||
|
|
||||||
|
if [ "$zoneConfigTemplateValues" != "null" ]; then
|
||||||
|
_debug "Zone is tied to a template."
|
||||||
|
zoneConfigTemplateValuesTemplateId=$(echo "${curResult}" | _hostingde_parse "templateId")
|
||||||
|
zoneConfigTemplateValuesTemplateName=$(echo "${curResult}" | _hostingde_parse_no_strip_whitespace "templateName")
|
||||||
|
zoneConfigTemplateValuesTemplateReplacementsIPv4=$(echo "${curResult}" | _hostingde_parse "ipv4Replacement")
|
||||||
|
zoneConfigTemplateValuesTemplateReplacementsIPv6=$(echo "${curResult}" | _hostingde_parse "ipv6Replacement")
|
||||||
|
zoneConfigTemplateValuesTemplateReplacementsMailIPv4=$(echo "${curResult}" | _hostingde_parse "mailIpv4Replacement")
|
||||||
|
zoneConfigTemplateValuesTemplateReplacementsMailIPv6=$(echo "${curResult}" | _hostingde_parse "mailIpv6Replacement")
|
||||||
|
zoneConfigTemplateValuesTemplateTieToTemplate=$(echo "${curResult}" | _hostingde_parse "tieToTemplate")
|
||||||
|
|
||||||
|
zoneConfigTemplateValues="{\"templateId\":${zoneConfigTemplateValuesTemplateId},\"templateName\":${zoneConfigTemplateValuesTemplateName},\"templateReplacements\":{\"ipv4Replacement\":${zoneConfigTemplateValuesTemplateReplacementsIPv4},\"ipv6Replacement\":${zoneConfigTemplateValuesTemplateReplacementsIPv6},\"mailIpv4Replacement\":${zoneConfigTemplateValuesTemplateReplacementsMailIPv4},\"mailIpv6Replacement\":${zoneConfigTemplateValuesTemplateReplacementsMailIPv6}},\"tieToTemplate\":${zoneConfigTemplateValuesTemplateTieToTemplate}}"
|
||||||
|
_debug "Template values: '{$zoneConfigTemplateValues}'"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "${zoneConfigType}" != "\"NATIVE\"" ]; then
|
if [ "${zoneConfigType}" != "\"NATIVE\"" ]; then
|
||||||
_err "Zone is not native"
|
_err "Zone is not native"
|
||||||
returnCode=1
|
returnCode=1
|
||||||
@ -122,7 +150,7 @@ _hostingde_addRecord() {
|
|||||||
_hostingde_getZoneStatus
|
_hostingde_getZoneStatus
|
||||||
_debug "Result of zoneStatus: '${zoneStatus}'"
|
_debug "Result of zoneStatus: '${zoneStatus}'"
|
||||||
done
|
done
|
||||||
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":${zoneConfigId},\"name\":${zoneConfigName},\"type\":${zoneConfigType},\"dnsServerGroupId\":${zoneConfigDnsServerGroupId},\"dnsSecMode\":${zoneConfigDnsSecMode},\"emailAddress\":${zoneConfigEmailAddress},\"soaValues\":{\"expire\":${zoneConfigExpire},\"negativeTtl\":${zoneConfigNegativeTtl},\"refresh\":${zoneConfigRefresh},\"retry\":${zoneConfigRetry},\"ttl\":${zoneConfigTtl}}},\"recordsToAdd\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\",\"ttl\":3600}]}"
|
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":${zoneConfigId},\"name\":${zoneConfigName},\"type\":${zoneConfigType},\"dnsServerGroupId\":${zoneConfigDnsServerGroupId},\"dnsSecMode\":${zoneConfigDnsSecMode},\"emailAddress\":${zoneConfigEmailAddress},\"soaValues\":{\"expire\":${zoneConfigExpire},\"negativeTtl\":${zoneConfigNegativeTtl},\"refresh\":${zoneConfigRefresh},\"retry\":${zoneConfigRetry},\"ttl\":${zoneConfigTtl}},\"templateValues\":${zoneConfigTemplateValues}},\"recordsToAdd\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\",\"ttl\":3600}]}"
|
||||||
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
||||||
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
||||||
_debug "Result of zoneUpdate: '$curResult'"
|
_debug "Result of zoneUpdate: '$curResult'"
|
||||||
@ -146,7 +174,7 @@ _hostingde_removeRecord() {
|
|||||||
_hostingde_getZoneStatus
|
_hostingde_getZoneStatus
|
||||||
_debug "Result of zoneStatus: '$zoneStatus'"
|
_debug "Result of zoneStatus: '$zoneStatus'"
|
||||||
done
|
done
|
||||||
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":${zoneConfigId},\"name\":${zoneConfigName},\"type\":${zoneConfigType},\"dnsServerGroupId\":${zoneConfigDnsServerGroupId},\"dnsSecMode\":${zoneConfigDnsSecMode},\"emailAddress\":${zoneConfigEmailAddress},\"soaValues\":{\"expire\":${zoneConfigExpire},\"negativeTtl\":${zoneConfigNegativeTtl},\"refresh\":${zoneConfigRefresh},\"retry\":${zoneConfigRetry},\"ttl\":${zoneConfigTtl}}},\"recordsToDelete\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\"}]}"
|
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":${zoneConfigId},\"name\":${zoneConfigName},\"type\":${zoneConfigType},\"dnsServerGroupId\":${zoneConfigDnsServerGroupId},\"dnsSecMode\":${zoneConfigDnsSecMode},\"emailAddress\":${zoneConfigEmailAddress},\"soaValues\":{\"expire\":${zoneConfigExpire},\"negativeTtl\":${zoneConfigNegativeTtl},\"refresh\":${zoneConfigRefresh},\"retry\":${zoneConfigRetry},\"ttl\":${zoneConfigTtl}},\"templateValues\":${zoneConfigTemplateValues}},\"recordsToDelete\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\"}]}"
|
||||||
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
||||||
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
||||||
_debug "Result of zoneUpdate: '$curResult'"
|
_debug "Result of zoneUpdate: '$curResult'"
|
||||||
|
Loading…
Reference in New Issue
Block a user