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
37b04986
Unverified
Commit
37b04986
authored
Sep 24, 2023
by
neil
Committed by
GitHub
Sep 24, 2023
Browse files
Merge pull request #4805 from acmesh-official/dev
sync
parents
b8447fca
59f976dc
Changes
7
Show whitespace changes
Inline
Side-by-side
acme.sh
View file @
37b04986
...
...
@@ -2118,12 +2118,7 @@ _tail_n() {
}
_tail_c
()
{
if
_is_solaris
;
then
#fix for solaris
tail
-
"
$1
"
c
else
tail
-c
"
$1
"
fi
tail
-c
"
$1
"
2>/dev/null
||
tail
-
"
$1
"
c
}
# url payload needbase64 keyfile
...
...
@@ -5993,6 +5988,7 @@ installcronjob() {
fi
_t
=
$(
_time
)
random_minute
=
$(
_math
$_t
% 60
)
random_hour
=
$(
_math
$_t
/ 60 % 24
)
if
!
_exists
"
$_CRONTAB
"
&&
_exists
"fcrontab"
;
then
_CRONTAB
=
"fcrontab"
...
...
@@ -6017,16 +6013,14 @@ installcronjob() {
_info
"Installing cron job"
if
!
$_CRONTAB
-l
|
grep
"
$PROJECT_ENTRY
--cron"
;
then
if
_exists
uname
&&
uname
-a
|
grep
SunOS
>
/dev/null
;
then
$_CRONTAB
-l
|
{
cat
echo
"
$random_minute
0 * * *
$lesh
--cron --home
\"
$LE_WORKING_DIR
\"
$_c_entry
> /dev/null"
}
|
$_CRONTAB
--
_CRONTAB_STDIN
=
"
$_CRONTAB
--"
else
_CRONTAB_STDIN
=
"
$_CRONTAB
-"
fi
$_CRONTAB
-l
|
{
cat
echo
"
$random_minute
0 * * *
$lesh
--cron --home
\"
$LE_WORKING_DIR
\"
$_c_entry
> /dev/null"
}
|
$_CRONTAB
-
fi
echo
"
$random_minute
$random_hour
* * *
$lesh
--cron --home
\"
$LE_WORKING_DIR
\"
$_c_entry
> /dev/null"
}
|
$_CRONTAB_STDIN
fi
if
[
"
$?
"
!=
"0"
]
;
then
_err
"Install cron job failed. You need to manually renew your certs."
...
...
deploy/synology_dsm.sh
View file @
37b04986
...
...
@@ -91,8 +91,10 @@ synology_dsm_deploy() {
_debug
"Getting API version"
response
=
$(
_get
"
$_base_url
/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=SYNO.API.Auth"
)
api_path
=
$(
echo
"
$response
"
|
grep
"SYNO.API.Auth"
|
sed
-n
's/.*"path" *: *"\([0-9]*\)".*/\1/p'
)
api_version
=
$(
echo
"
$response
"
|
grep
"SYNO.API.Auth"
|
sed
-n
's/.*"maxVersion" *: *\([0-9]*\).*/\1/p'
)
_debug3 response
"
$response
"
_debug3 api_path
"
$api_path
"
_debug3 api_version
"
$api_version
"
# Login, get the session ID & SynoToken from JSON
...
...
@@ -133,12 +135,15 @@ synology_dsm_deploy() {
[
-n
"
${
SYNO_Device_Name
}
"
]
||
SYNO_Device_Name
=
"CertRenewal"
fi
response
=
$(
_get
"
$_base_url
/webapi/entry.cgi?api=SYNO.API.Auth&version=
$api_version
&method=login&format=sid&account=
$encoded_username
&passwd=
$encoded_password
&otp_code=
$otp_code
&enable_syno_token=yes&enable_device_token=yes&device_name=
$SYNO_Device_Name
"
)
_debug3 response
"
$response
"
SYNO_Device_ID
=
$(
echo
"
$response
"
|
grep
"device_id"
|
sed
-n
's/.*"device_id" *: *"\([^"]*\).*/\1/p'
)
response
=
$(
_get
"
$_base_url
/webapi/
$api_path
?api=SYNO.API.Auth&version=
$api_version
&method=login&format=sid&account=
$encoded_username
&passwd=
$encoded_password
&otp_code=
$otp_code
&enable_syno_token=yes&enable_device_token=yes&device_name=
$SYNO_Device_Name
"
)
_secure_debug3 response
"
$response
"
id_property
=
'device_id'
[
"
${
api_version
}
"
-gt
'6'
]
||
id_property
=
'did'
SYNO_Device_ID
=
$(
echo
"
$response
"
|
grep
"
$id_property
"
|
sed
-n
's/.*"'
$id_property
'" *: *"\([^"]*\).*/\1/p'
)
_secure_debug2 SYNO_Device_ID
"
$SYNO_Device_ID
"
else
response
=
$(
_get
"
$_base_url
/webapi/
entry.cgi
?api=SYNO.API.Auth&version=
$api_version
&method=login&format=sid&account=
$encoded_username
&passwd=
$encoded_password
&enable_syno_token=yes&device_name=
$SYNO_Device_Name
&device_id=
$SYNO_Device_ID
"
)
response
=
$(
_get
"
$_base_url
/webapi/
$api_path
?api=SYNO.API.Auth&version=
$api_version
&method=login&format=sid&account=
$encoded_username
&passwd=
$encoded_password
&enable_syno_token=yes&device_name=
$SYNO_Device_Name
&device_id=
$SYNO_Device_ID
"
)
_debug3 response
"
$response
"
fi
...
...
dnsapi/dns_ali.sh
View file @
37b04986
...
...
@@ -117,7 +117,7 @@ _ali_urlencode() {
_ali_nonce
()
{
#_head_n 1 </dev/urandom | _digest "sha256" hex | cut -c 1-31
#Not so good...
date
+
"%s%N"
date
+
"%s%N"
|
sed
's/%N//g'
}
_check_exist_query
()
{
...
...
dnsapi/dns_artfiles.sh
0 → 100644
View file @
37b04986
#!/usr/bin/env sh
################################################################################
# ACME.sh 3rd party DNS API plugin for ArtFiles.de
################################################################################
# Author: Martin Arndt, https://troublezone.net/
# Released: 2022-02-27
# Issues: https://github.com/acmesh-official/acme.sh/issues/4718
################################################################################
# Usage:
# 1. export AF_API_USERNAME='api12345678'
# 2. export AF_API_PASSWORD='apiPassword'
# 3. acme.sh --issue -d example.com --dns dns_artfiles
################################################################################
########## API configuration ###################################################
AF_API_SUCCESS
=
'status":"OK'
AF_URL_DCP
=
'https://dcp.c.artfiles.de/api/'
AF_URL_DNS
=
${
AF_URL_DCP
}
'dns/{*}_dns.html?domain='
AF_URL_DOMAINS
=
${
AF_URL_DCP
}
'domain/get_domains.html'
########## Public functions ####################################################
# Adds a new TXT record for given ACME challenge value & domain.
# Usage: dns_artfiles_add _acme-challenge.www.example.com "ACME challenge value"
dns_artfiles_add
()
{
domain
=
"
$1
"
txtValue
=
"
$2
"
_info
'Using ArtFiles.de DNS addition API…'
_debug
'Domain'
"
$domain
"
_debug
'txtValue'
"
$txtValue
"
_set_credentials
_saveaccountconf_mutable
'AF_API_USERNAME'
"
$AF_API_USERNAME
"
_saveaccountconf_mutable
'AF_API_PASSWORD'
"
$AF_API_PASSWORD
"
_set_headers
_get_zone
"
$domain
"
_dns
'GET'
if
!
_contains
"
$response
"
'TXT'
;
then
_err
'Retrieving TXT records failed.'
return
1
fi
_clean_records
_dns
'SET'
"
$(
printf
--
'%s\n_acme-challenge "%s"'
"
$response
"
"
$txtValue
"
)
"
if
!
_contains
"
$response
"
"
$AF_API_SUCCESS
"
;
then
_err
'Adding ACME challenge value failed.'
return
1
fi
}
# Removes the existing TXT record for given ACME challenge value & domain.
# Usage: dns_artfiles_rm _acme-challenge.www.example.com "ACME challenge value"
dns_artfiles_rm
()
{
domain
=
"
$1
"
txtValue
=
"
$2
"
_info
'Using ArtFiles.de DNS removal API…'
_debug
'Domain'
"
$domain
"
_debug
'txtValue'
"
$txtValue
"
_set_credentials
_set_headers
_get_zone
"
$domain
"
if
!
_dns
'GET'
;
then
return
1
fi
if
!
_contains
"
$response
"
"
$txtValue
"
;
then
_err
'Retrieved TXT records are missing given ACME challenge value.'
return
1
fi
_clean_records
response
=
"
$(
printf
--
'%s'
"
$response
"
|
sed
'/_acme-challenge "'
"
$txtValue
"
'"/d'
)
"
_dns
'SET'
"
$response
"
if
!
_contains
"
$response
"
"
$AF_API_SUCCESS
"
;
then
_err
'Removing ACME challenge value failed.'
return
1
fi
}
########## Private functions ###################################################
# Cleans awful TXT records response of ArtFiles's API & pretty prints it.
# Usage: _clean_records
_clean_records
()
{
_info
'Cleaning TXT records…'
# Extract TXT part, strip trailing quote sign (ACME.sh API guidelines forbid
# usage of SED's GNU extensions, hence couldn't omit it via regex), strip '\'
# from '\"' & turn '\n' into real LF characters.
# Yup, awful API to use - but that's all we got to get this working, so… ;)
_debug2
'Raw '
"
$response
"
response
=
"
$(
printf
--
'%s'
"
$response
"
|
sed
's/^.*TXT":"\([^}]*\).*$/\1/;s/,".*$//;s/.$//;s/\\"/"/g;s/\\n/\n/g'
)
"
_debug2
'Clean'
"
$response
"
}
# Executes an HTTP GET or POST request for getting or setting DNS records,
# containing given payload upon POST.
# Usage: _dns [GET | SET] [payload]
_dns
()
{
_info
'Executing HTTP request…'
action
=
"
$1
"
payload
=
"
$(
printf
--
'%s'
"
$2
"
| _url_encode
)
"
url
=
"
$(
printf
--
'%s%s'
"
$AF_URL_DNS
"
"
$domain
"
|
sed
's/{\*}/'
"
$(
printf
--
'%s'
"
$action
"
| _lower_case
)
"
'/'
)
"
if
[
"
$action
"
=
'SET'
]
;
then
_debug2
'Payload'
"
$payload
"
response
=
"
$(
_post
''
"
$url
&TXT=
$payload
"
''
'POST'
'application/x-www-form-urlencoded'
)
"
else
response
=
"
$(
_get
"
$url
"
''
10
)
"
fi
if
!
_contains
"
$response
"
"
$AF_API_SUCCESS
"
;
then
_err
"DNS API error:
$response
"
return
1
fi
_debug
'Response'
"
$response
"
return
0
}
# Gets the root domain zone for given domain.
# Usage: _get_zone _acme-challenge.www.example.com
_get_zone
()
{
fqdn
=
"
$1
"
domains
=
"
$(
_get
"
$AF_URL_DOMAINS
"
''
10
)
"
_info
'Getting domain zone…'
_debug2
'FQDN'
"
$fqdn
"
_debug2
'Domains'
"
$domains
"
while
_contains
"
$fqdn
"
"."
;
do
if
_contains
"
$domains
"
"
$fqdn
"
;
then
domain
=
"
$fqdn
"
_info
"Found root domain zone:
$domain
"
break
else
fqdn
=
"
${
fqdn
#*.
}
"
_debug2
'FQDN'
"
$fqdn
"
fi
done
if
[
"
$domain
"
=
"
$fqdn
"
]
;
then
return
0
fi
_err
'Couldn'
\'
't find root domain zone.'
return
1
}
# Sets the credentials for accessing ArtFiles's API
# Usage: _set_credentials
_set_credentials
()
{
_info
'Setting credentials…'
AF_API_USERNAME
=
"
${
AF_API_USERNAME
:-
$(
_readaccountconf_mutable AF_API_USERNAME
)
}
"
AF_API_PASSWORD
=
"
${
AF_API_PASSWORD
:-
$(
_readaccountconf_mutable AF_API_PASSWORD
)
}
"
if
[
-z
"
$AF_API_USERNAME
"
]
||
[
-z
"
$AF_API_PASSWORD
"
]
;
then
_err
'Missing ArtFiles.de username and/or password.'
_err
'Please ensure both are set via export command & try again.'
return
1
fi
}
# Adds the HTTP Authorization & Content-Type headers to a follow-up request.
# Usage: _set_headers
_set_headers
()
{
_info
'Setting headers…'
encoded
=
"
$(
printf
--
'%s:%s'
"
$AF_API_USERNAME
"
"
$AF_API_PASSWORD
"
| _base64
)
"
export
_H1
=
"Authorization: Basic
$encoded
"
export
_H2
=
'Content-Type: application/json'
}
dnsapi/dns_gandi_livedns.sh
View file @
37b04986
#!/usr/bin/env sh
# Gandi LiveDNS v5 API
# https://doc.livedns.gandi.net/
# https://api.gandi.net/docs/livedns/
# https://api.gandi.net/docs/authentication/ for token + apikey (deprecated) authentication
# currently under beta
#
# Requires GANDI API KEY set in GANDI_LIVEDNS_KEY set as environment variable
...
...
@@ -19,13 +20,20 @@ dns_gandi_livedns_add() {
fulldomain
=
$1
txtvalue
=
$2
if
[
-z
"
$GANDI_LIVEDNS_KEY
"
]
;
then
_err
"No
API key
specified for Gandi LiveDNS."
_err
"Create your key and export it as GANDI_LIVEDNS_KEY"
if
[
-z
"
$GANDI_LIVEDNS_KEY
"
]
&&
[
-z
"
$GANDI_LIVEDNS_TOKEN
"
]
;
then
_err
"No
Token or API key (deprecated)
specified for Gandi LiveDNS."
_err
"Create your
token or
key and export it as GANDI_LIVEDNS_KEY
or GANDI_LIVEDNS_TOKEN respectively
"
return
1
fi
# Keep only one secret in configuration
if
[
-n
"
$GANDI_LIVEDNS_TOKEN
"
]
;
then
_saveaccountconf GANDI_LIVEDNS_TOKEN
"
$GANDI_LIVEDNS_TOKEN
"
_clearaccountconf GANDI_LIVEDNS_KEY
elif
[
-n
"
$GANDI_LIVEDNS_KEY
"
]
;
then
_saveaccountconf GANDI_LIVEDNS_KEY
"
$GANDI_LIVEDNS_KEY
"
_clearaccountconf GANDI_LIVEDNS_TOKEN
fi
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
...
...
@@ -157,7 +165,12 @@ _gandi_livedns_rest() {
_debug
"
$ep
"
export
_H1
=
"Content-Type: application/json"
if
[
-n
"
$GANDI_LIVEDNS_TOKEN
"
]
;
then
export
_H2
=
"Authorization: Bearer
$GANDI_LIVEDNS_TOKEN
"
else
export
_H2
=
"X-Api-Key:
$GANDI_LIVEDNS_KEY
"
fi
if
[
"
$m
"
=
"GET"
]
;
then
response
=
"
$(
_get
"
$GANDI_LIVEDNS_API
/
$ep
"
)
"
...
...
dnsapi/dns_tencent.sh
0 → 100644
View file @
37b04986
#!/usr/bin/env sh
Tencent_API
=
"https://dnspod.tencentcloudapi.com"
#Tencent_SecretId="AKIDz81d2cd22cdcdc2dcd1cc1d1A"
#Tencent_SecretKey="Gu5t9abcabcaabcbabcbbbcbcbbccbbcb"
#Usage: dns_tencent_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_tencent_add
()
{
fulldomain
=
$1
txtvalue
=
$2
Tencent_SecretId
=
"
${
Tencent_SecretId
:-
$(
_readaccountconf_mutable Tencent_SecretId
)
}
"
Tencent_SecretKey
=
"
${
Tencent_SecretKey
:-
$(
_readaccountconf_mutable Tencent_SecretKey
)
}
"
if
[
-z
"
$Tencent_SecretId
"
]
||
[
-z
"
$Tencent_SecretKey
"
]
;
then
Tencent_SecretId
=
""
Tencent_SecretKey
=
""
_err
"You don't specify tencent api SecretId and SecretKey yet."
return
1
fi
#save the api SecretId and SecretKey to the account conf file.
_saveaccountconf_mutable Tencent_SecretId
"
$Tencent_SecretId
"
_saveaccountconf_mutable Tencent_SecretKey
"
$Tencent_SecretKey
"
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
return
1
fi
_debug
"Add record"
_add_record_query
"
$_domain
"
"
$_sub_domain
"
"
$txtvalue
"
&&
_tencent_rest
"CreateRecord"
}
dns_tencent_rm
()
{
fulldomain
=
$1
txtvalue
=
$2
Tencent_SecretId
=
"
${
Tencent_SecretId
:-
$(
_readaccountconf_mutable Tencent_SecretId
)
}
"
Tencent_SecretKey
=
"
${
Tencent_SecretKey
:-
$(
_readaccountconf_mutable Tencent_SecretKey
)
}
"
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
return
1
fi
_debug
"Get record list"
attempt
=
1
max_attempts
=
5
while
[
-z
"
$record_id
"
]
&&
[
"
$attempt
"
-le
$max_attempts
]
;
do
_check_exist_query
"
$_domain
"
"
$_sub_domain
"
"
$txtvalue
"
&&
_tencent_rest
"DescribeRecordFilterList"
record_id
=
"
$(
echo
"
$response
"
| _egrep_o
"
\"
RecordId
\"
:
\s
*[0-9]+"
| _egrep_o
"[0-9]+"
)
"
_debug2 record_id
"
$record_id
"
if
[
-z
"
$record_id
"
]
;
then
_debug
"Due to TencentCloud API synchronization delay, record not found, waiting 10 seconds and retrying"
_sleep 10
attempt
=
$(
_math
"
$attempt
+ 1"
)
fi
done
record_id
=
"
$(
echo
"
$response
"
| _egrep_o
"
\"
RecordId
\"
:
\s
*[0-9]+"
| _egrep_o
"[0-9]+"
)
"
_debug2 record_id
"
$record_id
"
if
[
-z
"
$record_id
"
]
;
then
_debug
"record not found after
$max_attempts
attempts, skip"
else
_debug
"Delete record"
_delete_record_query
"
$record_id
"
&&
_tencent_rest
"DeleteRecord"
fi
}
#################### Private functions below ##################################
_get_root
()
{
domain
=
$1
i
=
1
p
=
1
while
true
;
do
h
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
"
$i
"
-100
)
if
[
-z
"
$h
"
]
;
then
#not valid
return
1
fi
_describe_records_query
"
$h
"
"@"
if
!
_tencent_rest
"DescribeRecordList"
"ignore"
;
then
return
1
fi
if
_contains
"
$response
"
"
\"
TotalCount
\"
:"
;
then
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
1-
"
$p
"
)
_debug _sub_domain
"
$_sub_domain
"
_domain
=
"
$h
"
_debug _domain
"
$_domain
"
return
0
fi
p
=
"
$i
"
i
=
$(
_math
"
$i
"
+ 1
)
done
return
1
}
_tencent_rest
()
{
action
=
$1
service
=
"dnspod"
payload
=
"
${
query
}
"
timestamp
=
$(
date
-u
+%s
)
token
=
$(
tencent_signature_v3
$service
"
$action
"
"
$payload
"
"
$timestamp
"
)
version
=
"2021-03-23"
if
!
response
=
"
$(
tencent_api_request
$service
$version
"
$action
"
"
$payload
"
"
$timestamp
"
)
"
;
then
_err
"Error <
$1
>"
return
1
fi
_debug2 response
"
$response
"
if
[
-z
"
$2
"
]
;
then
message
=
"
$(
echo
"
$response
"
| _egrep_o
"
\"
Message
\"
:
\"
[^
\"
]*
\"
"
|
cut
-d
:
-f
2 |
tr
-d
\"
)
"
if
[
"
$message
"
]
;
then
_err
"
$message
"
return
1
fi
fi
}
_add_record_query
()
{
query
=
"{
\"
Domain
\"
:
\"
$1
\"
,
\"
SubDomain
\"
:
\"
$2
\"
,
\"
RecordType
\"
:
\"
TXT
\"
,
\"
RecordLineId
\"
:
\"
0
\"
,
\"
RecordLine
\"
:
\"
0
\"
,
\"
Value
\"
:
\"
$3
\"
,
\"
TTL
\"
:600}"
}
_describe_records_query
()
{
query
=
"{
\"
Domain
\"
:
\"
$1
\"
,
\"
Limit
\"
:3000}"
}
_delete_record_query
()
{
query
=
"{
\"
Domain
\"
:
\"
$_domain
\"
,
\"
RecordId
\"
:
$1
}"
}
_check_exist_query
()
{
_domain
=
"
$1
"
_subdomain
=
"
$2
"
_value
=
"
$3
"
query
=
"{
\"
Domain
\"
:
\"
$_domain
\"
,
\"
SubDomain
\"
:
\"
$_subdomain
\"
,
\"
RecordValue
\"
:
\"
$_value
\"
}"
}
# shell client for tencent cloud api v3 | @author: rehiy
tencent_sha256
()
{
printf
%b
"
$@
"
| _digest sha256 hex
}
tencent_hmac_sha256
()
{
k
=
$1
shift
hex_key
=
$(
printf
%b
"
$k
"
| _hex_dump |
tr
-d
' '
)
printf
%b
"
$@
"
| _hmac sha256
"
$hex_key
"
hex
}
tencent_hmac_sha256_hexkey
()
{
k
=
$1
shift
printf
%b
"
$@
"
| _hmac sha256
"
$k
"
hex
}
tencent_signature_v3
()
{
service
=
$1
action
=
$(
echo
"
$2
"
| _lower_case
)
payload
=
${
3
:-
'{}'
}
timestamp
=
${
4
:-
$(
date
+%s
)
}
domain
=
"
$service
.tencentcloudapi.com"
secretId
=
${
Tencent_SecretId
:-
'tencent-cloud-secret-id'
}
secretKey
=
${
Tencent_SecretKey
:-
'tencent-cloud-secret-key'
}
algorithm
=
'TC3-HMAC-SHA256'
date
=
$(
date
-u
-d
"@
$timestamp
"
+%Y-%m-%d 2>/dev/null
)
[
-z
"
$date
"
]
&&
date
=
$(
date
-u
-r
"
$timestamp
"
+%Y-%m-%d
)
canonicalUri
=
'/'
canonicalQuery
=
''
canonicalHeaders
=
"content-type:application/json
\n
host:
$domain
\n
x-tc-action:
$action
\n
"
signedHeaders
=
'content-type;host;x-tc-action'
canonicalRequest
=
"POST
\n
$canonicalUri
\n
$canonicalQuery
\n
$canonicalHeaders
\n
$signedHeaders
\n
$(
tencent_sha256
"
$payload
"
)
"
credentialScope
=
"
$date
/
$service
/tc3_request"
stringToSign
=
"
$algorithm
\n
$timestamp
\n
$credentialScope
\n
$(
tencent_sha256
"
$canonicalRequest
"
)
"
secretDate
=
$(
tencent_hmac_sha256
"TC3
$secretKey
"
"
$date
"
)
secretService
=
$(
tencent_hmac_sha256_hexkey
"
$secretDate
"
"
$service
"
)
secretSigning
=
$(
tencent_hmac_sha256_hexkey
"
$secretService
"
'tc3_request'
)
signature
=
$(
tencent_hmac_sha256_hexkey
"
$secretSigning
"
"
$stringToSign
"
)
echo
"
$algorithm
Credential=
$secretId
/
$credentialScope
, SignedHeaders=
$signedHeaders
, Signature=
$signature
"
}
tencent_api_request
()
{
service
=
$1
version
=
$2
action
=
$3
payload
=
${
4
:-
'{}'
}
timestamp
=
${
5
:-
$(
date
+%s
)
}
token
=
$(
tencent_signature_v3
"
$service
"
"
$action
"
"
$payload
"
"
$timestamp
"
)
_H1
=
"Content-Type: application/json"
_H2
=
"Authorization:
$token
"
_H3
=
"X-TC-Version:
$version
"
_H4
=
"X-TC-Timestamp:
$timestamp
"
_H5
=
"X-TC-Action:
$action
"
_post
"
$payload
"
"
$Tencent_API
"
""
"POST"
"application/json"
}
dnsapi/dns_variomedia.sh
View file @
37b04986
...
...
@@ -69,7 +69,7 @@ dns_variomedia_rm() {
return
1
fi
_record_id
=
"
$(
echo
"
$response
"
|
cut
-d
'['
-f2
|
cut
-d
']'
-f1
|
sed
's/},[ \t]*{/\},§\{/g'
|
tr
§
'\n'
|
grep
"
$_sub_domain
"
|
grep
"
$txtvalue
"
|
sed
's/^{//;s/}[,]?$//'
|
tr
,
'\n'
|
tr
-d
'\"'
|
grep
^id |
cut
-d
:
-f2
|
tr
-d
' '
)
"
_record_id
=
"
$(
echo
"
$response
"
|
sed
-E
's/,"tags":\[[^]]*\]//g'
|
cut
-d
'['
-f2
|
cut
-d
']'
-f1
|
sed
's/},[ \t]*{/\},§\{/g'
|
tr
§
'\n'
|
grep
"
$_sub_domain
"
|
grep
--
"
$txtvalue
"
|
sed
's/^{//;s/}[,]?$//'
|
tr
,
'\n'
|
tr
-d
'\"'
|
grep
^id |
cut
-d
:
-f2
|
tr
-d
' '
)
"
_debug _record_id
"
$_record_id
"
if
[
"
$_record_id
"
]
;
then
_info
"Successfully retrieved the record id for ACME challenge."
...
...
@@ -93,11 +93,11 @@ dns_variomedia_rm() {
# _sub_domain=_acme-challenge.www
# _domain=domain.com
_get_root
()
{
full
domain
=
$1
domain
=
$1
i
=
1
p
=
1
while
true
;
do
h
=
$(
printf
"%s"
"
$fulldomain
"
|
cut
-d
.
-f
$i
-100
)
_debug h
"
$h
"
h
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
$i
-100
)
if
[
-z
"
$h
"
]
;
then
return
1
fi
...
...
@@ -106,17 +106,14 @@ _get_root() {
return
1
fi
if
_startswith
"
$response
"
"
\{\"
data
\"
:"
;
then
if
_contains
"
$response
"
"
\"
id
\"
:
\"
$h
\"
"
;
then
_sub_domain
=
"
$(
echo
"
$fulldomain
"
|
sed
"s/
\\
.
$h
\$
//"
)
"
_domain
=
$h
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
'.'
-f
1-
$p
)
_domain
=
"
$h
"
return
0
fi
f
i
p
=
$
i
i
=
$(
_math
"
$i
"
+ 1
)
done
_debug
"root domain not found"
return
1
}
...
...
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