mirror of
https://github.com/plantroon/acme.sh.git
synced 2024-11-14 02:11:45 +00:00
commit
4daef52991
14
acme.sh
14
acme.sh
@ -188,28 +188,28 @@ _dlg_versions() {
|
|||||||
if _exists "${ACME_OPENSSL_BIN:-openssl}"; then
|
if _exists "${ACME_OPENSSL_BIN:-openssl}"; then
|
||||||
${ACME_OPENSSL_BIN:-openssl} version 2>&1
|
${ACME_OPENSSL_BIN:-openssl} version 2>&1
|
||||||
else
|
else
|
||||||
echo "$ACME_OPENSSL_BIN doesn't exists."
|
echo "$ACME_OPENSSL_BIN doesn't exist."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "apache:"
|
echo "apache:"
|
||||||
if [ "$_APACHECTL" ] && _exists "$_APACHECTL"; then
|
if [ "$_APACHECTL" ] && _exists "$_APACHECTL"; then
|
||||||
$_APACHECTL -V 2>&1
|
$_APACHECTL -V 2>&1
|
||||||
else
|
else
|
||||||
echo "apache doesn't exists."
|
echo "apache doesn't exist."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "nginx:"
|
echo "nginx:"
|
||||||
if _exists "nginx"; then
|
if _exists "nginx"; then
|
||||||
nginx -V 2>&1
|
nginx -V 2>&1
|
||||||
else
|
else
|
||||||
echo "nginx doesn't exists."
|
echo "nginx doesn't exist."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "socat:"
|
echo "socat:"
|
||||||
if _exists "socat"; then
|
if _exists "socat"; then
|
||||||
socat -V 2>&1
|
socat -V 2>&1
|
||||||
else
|
else
|
||||||
_debug "socat doesn't exists."
|
_debug "socat doesn't exist."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2801,10 +2801,10 @@ _setApache() {
|
|||||||
|
|
||||||
apacheVer="$($_APACHECTL -V | grep "Server version:" | cut -d : -f 2 | cut -d " " -f 2 | cut -d '/' -f 2)"
|
apacheVer="$($_APACHECTL -V | grep "Server version:" | cut -d : -f 2 | cut -d " " -f 2 | cut -d '/' -f 2)"
|
||||||
_debug "apacheVer" "$apacheVer"
|
_debug "apacheVer" "$apacheVer"
|
||||||
apacheMajer="$(echo "$apacheVer" | cut -d . -f 1)"
|
apacheMajor="$(echo "$apacheVer" | cut -d . -f 1)"
|
||||||
apacheMinor="$(echo "$apacheVer" | cut -d . -f 2)"
|
apacheMinor="$(echo "$apacheVer" | cut -d . -f 2)"
|
||||||
|
|
||||||
if [ "$apacheVer" ] && [ "$apacheMajer$apacheMinor" -ge "24" ]; then
|
if [ "$apacheVer" ] && [ "$apacheMajor$apacheMinor" -ge "24" ]; then
|
||||||
echo "
|
echo "
|
||||||
Alias /.well-known/acme-challenge $ACME_DIR
|
Alias /.well-known/acme-challenge $ACME_DIR
|
||||||
|
|
||||||
@ -5519,7 +5519,7 @@ revoke() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
_info "Domain key file doesn't exists."
|
_info "Domain key file doesn't exist."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_info "Try account key."
|
_info "Try account key."
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
# If certificate already exist it will update only cert and key not touching other parameter
|
# If certificate already exists it will update only cert and key, not touching other parameters
|
||||||
# If certificate doesn't exist it will only upload cert and key and not set other parameter
|
# If certificate doesn't exist it will only upload cert and key, and not set other parameters
|
||||||
# Note that we deploy full chain
|
# Note that we deploy full chain
|
||||||
# Written by Geoffroi Genot <ggenot@voxbone.com>
|
# Written by Geoffroi Genot <ggenot@voxbone.com>
|
||||||
|
|
||||||
|
@ -181,6 +181,7 @@ _describe_records_query() {
|
|||||||
|
|
||||||
_clean() {
|
_clean() {
|
||||||
_check_exist_query "$_domain" "$_sub_domain"
|
_check_exist_query "$_domain" "$_sub_domain"
|
||||||
|
# do not correct grammar here
|
||||||
if ! _ali_rest "Check exist records" "ignore"; then
|
if ! _ali_rest "Check exist records" "ignore"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
@ -22,7 +22,7 @@ dns_dgon_add() {
|
|||||||
txtvalue=$2
|
txtvalue=$2
|
||||||
|
|
||||||
DO_API_KEY="${DO_API_KEY:-$(_readaccountconf_mutable DO_API_KEY)}"
|
DO_API_KEY="${DO_API_KEY:-$(_readaccountconf_mutable DO_API_KEY)}"
|
||||||
# Check if API Key Exist
|
# Check if API Key Exists
|
||||||
if [ -z "$DO_API_KEY" ]; then
|
if [ -z "$DO_API_KEY" ]; then
|
||||||
DO_API_KEY=""
|
DO_API_KEY=""
|
||||||
_err "You did not specify DigitalOcean API key."
|
_err "You did not specify DigitalOcean API key."
|
||||||
@ -77,7 +77,7 @@ dns_dgon_rm() {
|
|||||||
txtvalue=$2
|
txtvalue=$2
|
||||||
|
|
||||||
DO_API_KEY="${DO_API_KEY:-$(_readaccountconf_mutable DO_API_KEY)}"
|
DO_API_KEY="${DO_API_KEY:-$(_readaccountconf_mutable DO_API_KEY)}"
|
||||||
# Check if API Key Exist
|
# Check if API Key Exists
|
||||||
if [ -z "$DO_API_KEY" ]; then
|
if [ -z "$DO_API_KEY" ]; then
|
||||||
DO_API_KEY=""
|
DO_API_KEY=""
|
||||||
_err "You did not specify DigitalOcean API key."
|
_err "You did not specify DigitalOcean API key."
|
||||||
|
@ -91,13 +91,12 @@ dns_duckdns_rm() {
|
|||||||
|
|
||||||
#################### Private functions below ##################################
|
#################### Private functions below ##################################
|
||||||
|
|
||||||
#fulldomain=_acme-challenge.domain.duckdns.org
|
# fulldomain may be 'domain.duckdns.org' (if using --domain-alias) or '_acme-challenge.domain.duckdns.org'
|
||||||
#returns
|
# either way, return 'domain'. (duckdns does not allow further subdomains and restricts domains to [a-z0-9-].)
|
||||||
# _duckdns_domain=domain
|
|
||||||
_duckdns_get_domain() {
|
_duckdns_get_domain() {
|
||||||
|
|
||||||
# We'll extract the domain/username from full domain
|
# We'll extract the domain/username from full domain
|
||||||
_duckdns_domain="$(printf "%s" "$fulldomain" | _lower_case | _egrep_o '[.][^.][^.]*[.]duckdns.org' | cut -d . -f 2)"
|
_duckdns_domain="$(printf "%s" "$fulldomain" | _lower_case | _egrep_o '^(_acme-challenge\.)?[a-z0-9-]*\.duckdns\.org' | sed 's/^\(_acme-challenge\.\)\?\([a-z0-9-]*\)\.duckdns\.org/\2/')"
|
||||||
|
|
||||||
if [ -z "$_duckdns_domain" ]; then
|
if [ -z "$_duckdns_domain" ]; then
|
||||||
_err "Error extracting the domain."
|
_err "Error extracting the domain."
|
||||||
|
@ -18,7 +18,7 @@ dns_dynv6_add() {
|
|||||||
if ! _contains "$_your_hosts" "$_host"; then
|
if ! _contains "$_your_hosts" "$_host"; then
|
||||||
_debug "The host is $_host and the record $_record"
|
_debug "The host is $_host and the record $_record"
|
||||||
_debug "Dynv6 returned $_your_hosts"
|
_debug "Dynv6 returned $_your_hosts"
|
||||||
_err "The host $_host does not exists on your dynv6 account"
|
_err "The host $_host does not exist on your dynv6 account"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
_debug "found host on your account"
|
_debug "found host on your account"
|
||||||
@ -49,7 +49,7 @@ dns_dynv6_rm() {
|
|||||||
if ! _contains "$_your_hosts" "$_host"; then
|
if ! _contains "$_your_hosts" "$_host"; then
|
||||||
_debug "The host is $_host and the record $_record"
|
_debug "The host is $_host and the record $_record"
|
||||||
_debug "Dynv6 returned $_your_hosts"
|
_debug "Dynv6 returned $_your_hosts"
|
||||||
_err "The host $_host does not exists on your dynv6 account"
|
_err "The host $_host does not exist on your dynv6 account"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
_debug "found host on your account"
|
_debug "found host on your account"
|
||||||
|
@ -91,7 +91,7 @@ dns_gd_rm() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if ! _contains "$response" "$txtvalue"; then
|
if ! _contains "$response" "$txtvalue"; then
|
||||||
_info "The record is not existing, skip"
|
_info "The record does not exist, skip"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ _get_root() {
|
|||||||
if [ "$HETZNER_Zone_ID" ]; then
|
if [ "$HETZNER_Zone_ID" ]; then
|
||||||
_debug "Found, using: $HETZNER_Zone_ID"
|
_debug "Found, using: $HETZNER_Zone_ID"
|
||||||
if ! _hetzner_rest GET "zones/${HETZNER_Zone_ID}"; then
|
if ! _hetzner_rest GET "zones/${HETZNER_Zone_ID}"; then
|
||||||
_debug "Zone with id '$HETZNER_Zone_ID' not exists."
|
_debug "Zone with id '$HETZNER_Zone_ID' does not exist."
|
||||||
_cleardomainconf "$domain_param_name"
|
_cleardomainconf "$domain_param_name"
|
||||||
unset HETZNER_Zone_ID
|
unset HETZNER_Zone_ID
|
||||||
else
|
else
|
||||||
|
@ -42,7 +42,7 @@ dns_hexonet_add() {
|
|||||||
_debug _domain "$_domain"
|
_debug _domain "$_domain"
|
||||||
|
|
||||||
_debug "Getting txt records"
|
_debug "Getting txt records"
|
||||||
_hexonet_rest "&command=QueryDNSZoneRRList&dnszone=${h}.&RRTYPE=TXT"
|
_hexonet_rest "command=QueryDNSZoneRRList&dnszone=${h}.&RRTYPE=TXT"
|
||||||
|
|
||||||
if ! _contains "$response" "CODE=200"; then
|
if ! _contains "$response" "CODE=200"; then
|
||||||
_err "Error"
|
_err "Error"
|
||||||
@ -88,7 +88,7 @@ dns_hexonet_rm() {
|
|||||||
_debug _domain "$_domain"
|
_debug _domain "$_domain"
|
||||||
|
|
||||||
_debug "Getting txt records"
|
_debug "Getting txt records"
|
||||||
_hexonet_rest "&command=QueryDNSZoneRRList&dnszone=${h}.&RRTYPE=TXT&RR=${txtvalue}"
|
_hexonet_rest "command=QueryDNSZoneRRList&dnszone=${h}.&RRTYPE=TXT&RR=${_sub_domain}%20IN%20TXT%20\"${txtvalue}\""
|
||||||
|
|
||||||
if ! _contains "$response" "CODE=200"; then
|
if ! _contains "$response" "CODE=200"; then
|
||||||
_err "Error"
|
_err "Error"
|
||||||
@ -100,7 +100,7 @@ dns_hexonet_rm() {
|
|||||||
if [ "$count" = "0" ]; then
|
if [ "$count" = "0" ]; then
|
||||||
_info "Don't need to remove."
|
_info "Don't need to remove."
|
||||||
else
|
else
|
||||||
if ! _hexonet_rest "&command=UpdateDNSZone&dnszone=${_domain}.&delrr0='${_sub_domain}%20IN%20TXT%20\"${txtvalue}\""; then
|
if ! _hexonet_rest "command=UpdateDNSZone&dnszone=${_domain}.&delrr0=${_sub_domain}%20IN%20TXT%20\"${txtvalue}\""; then
|
||||||
_err "Delete record error."
|
_err "Delete record error."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@ -126,7 +126,7 @@ _get_root() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! _hexonet_rest "&command=QueryDNSZoneRRList&dnszone=${h}."; then
|
if ! _hexonet_rest "command=QueryDNSZoneRRList&dnszone=${h}."; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ dns_kinghost_add() {
|
|||||||
_debug "Getting txt records"
|
_debug "Getting txt records"
|
||||||
_kinghost_rest GET "dns" "name=$fulldomain&content=$txtvalue"
|
_kinghost_rest GET "dns" "name=$fulldomain&content=$txtvalue"
|
||||||
|
|
||||||
#This API call returns "status":"ok" if dns record does not exists
|
#This API call returns "status":"ok" if dns record does not exist
|
||||||
#We are creating a new txt record here, so we expect the "ok" status
|
#We are creating a new txt record here, so we expect the "ok" status
|
||||||
if ! echo "$response" | grep '"status":"ok"' >/dev/null; then
|
if ! echo "$response" | grep '"status":"ok"' >/dev/null; then
|
||||||
_err "Error"
|
_err "Error"
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
#
|
#
|
||||||
# REGRU_API_Password="test"
|
# REGRU_API_Password="test"
|
||||||
#
|
#
|
||||||
_domain=$_domain
|
|
||||||
|
|
||||||
REGRU_API_URL="https://api.reg.ru/api/regru2"
|
REGRU_API_URL="https://api.reg.ru/api/regru2"
|
||||||
|
|
||||||
@ -27,10 +26,17 @@ dns_regru_add() {
|
|||||||
_saveaccountconf_mutable REGRU_API_Username "$REGRU_API_Username"
|
_saveaccountconf_mutable REGRU_API_Username "$REGRU_API_Username"
|
||||||
_saveaccountconf_mutable REGRU_API_Password "$REGRU_API_Password"
|
_saveaccountconf_mutable REGRU_API_Password "$REGRU_API_Password"
|
||||||
|
|
||||||
_info "Adding TXT record to ${fulldomain}"
|
_debug "First detect the root zone"
|
||||||
response="$(_get "$REGRU_API_URL/zone/add_txt?input_data={%22username%22:%22${REGRU_API_Username}%22,%22password%22:%22${REGRU_API_Password}%22,%22domains%22:[{%22dname%22:%22${_domain}%22}],%22subdomain%22:%22_acme-challenge%22,%22text%22:%22${txtvalue}%22,%22output_content_type%22:%22plain%22}&input_format=json")"
|
if ! _get_root "$fulldomain"; then
|
||||||
|
_err "invalid domain"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
_debug _domain "$_domain"
|
||||||
|
|
||||||
if _contains "${response}" 'success'; then
|
_info "Adding TXT record to ${fulldomain}"
|
||||||
|
_regru_rest POST "zone/add_txt" "input_data={%22username%22:%22${REGRU_API_Username}%22,%22password%22:%22${REGRU_API_Password}%22,%22domains%22:[{%22dname%22:%22${_domain}%22}],%22subdomain%22:%22_acme-challenge%22,%22text%22:%22${txtvalue}%22,%22output_content_type%22:%22plain%22}&input_format=json"
|
||||||
|
|
||||||
|
if ! _contains "${response}" 'error'; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
_err "Could not create resource record, check logs"
|
_err "Could not create resource record, check logs"
|
||||||
@ -51,13 +57,64 @@ dns_regru_rm() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_info "Deleting resource record $fulldomain"
|
_debug "First detect the root zone"
|
||||||
response="$(_get "$REGRU_API_URL/zone/remove_record?input_data={%22username%22:%22${REGRU_API_Username}%22,%22password%22:%22${REGRU_API_Password}%22,%22domains%22:[{%22dname%22:%22${_domain}%22}],%22subdomain%22:%22_acme-challenge%22,%22content%22:%22${txtvalue}%22,%22record_type%22:%22TXT%22,%22output_content_type%22:%22plain%22}&input_format=json")"
|
if ! _get_root "$fulldomain"; then
|
||||||
|
_err "invalid domain"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
_debug _domain "$_domain"
|
||||||
|
|
||||||
if _contains "${response}" 'success'; then
|
_info "Deleting resource record $fulldomain"
|
||||||
|
_regru_rest POST "zone/remove_record" "input_data={%22username%22:%22${REGRU_API_Username}%22,%22password%22:%22${REGRU_API_Password}%22,%22domains%22:[{%22dname%22:%22${_domain}%22}],%22subdomain%22:%22_acme-challenge%22,%22content%22:%22${txtvalue}%22,%22record_type%22:%22TXT%22,%22output_content_type%22:%22plain%22}&input_format=json"
|
||||||
|
|
||||||
|
if ! _contains "${response}" 'error'; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
_err "Could not delete resource record, check logs"
|
_err "Could not delete resource record, check logs"
|
||||||
_err "${response}"
|
_err "${response}"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#################### Private functions below ##################################
|
||||||
|
#_acme-challenge.www.domain.com
|
||||||
|
#returns
|
||||||
|
# _domain=domain.com
|
||||||
|
_get_root() {
|
||||||
|
domain=$1
|
||||||
|
|
||||||
|
_regru_rest POST "service/get_list" "username=${REGRU_API_Username}&password=${REGRU_API_Password}&output_format=xml&servtype=domain"
|
||||||
|
domains_list=$(echo "${response}" | grep dname | sed -r "s/.*dname=\"([^\"]+)\".*/\\1/g")
|
||||||
|
|
||||||
|
for ITEM in ${domains_list}; do
|
||||||
|
case "${domain}" in
|
||||||
|
*${ITEM}*)
|
||||||
|
_domain=${ITEM}
|
||||||
|
_debug _domain "${_domain}"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
#returns
|
||||||
|
# response
|
||||||
|
_regru_rest() {
|
||||||
|
m=$1
|
||||||
|
ep="$2"
|
||||||
|
data="$3"
|
||||||
|
_debug "$ep"
|
||||||
|
|
||||||
|
export _H1="Content-Type: application/x-www-form-urlencoded"
|
||||||
|
|
||||||
|
if [ "$m" != "GET" ]; then
|
||||||
|
_debug data "$data"
|
||||||
|
response="$(_post "$data" "$REGRU_API_URL/$ep" "" "$m")"
|
||||||
|
else
|
||||||
|
response="$(_get "$REGRU_API_URL/$ep?$data")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
_debug response "${response}"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
#UNO_User="UExxxxxx"
|
#UNO_User="UExxxxxx"
|
||||||
|
|
||||||
Uno_Api="https://api.unoeuro.com/1"
|
Uno_Api="https://api.simply.com/1"
|
||||||
|
|
||||||
######## Public functions #####################
|
######## Public functions #####################
|
||||||
|
|
||||||
@ -24,12 +24,6 @@ dns_unoeuro_add() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! _contains "$UNO_User" "UE"; then
|
|
||||||
_err "It seems that the UNO_User=$UNO_User is not a valid username."
|
|
||||||
_err "Please check and retry."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#save the api key and email to the account conf file.
|
#save the api key and email to the account conf file.
|
||||||
_saveaccountconf_mutable UNO_Key "$UNO_Key"
|
_saveaccountconf_mutable UNO_Key "$UNO_Key"
|
||||||
_saveaccountconf_mutable UNO_User "$UNO_User"
|
_saveaccountconf_mutable UNO_User "$UNO_User"
|
||||||
|
Loading…
Reference in New Issue
Block a user