Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
7ddbeaa0
Unverified
Commit
7ddbeaa0
authored
Aug 13, 2022
by
neil
Committed by
GitHub
Aug 13, 2022
Browse files
Merge pull request #4222 from Marco4223/master
Fix and Upgrade KAS API Call.
parents
79e044ac
aaee0414
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_kas.sh
View file @
7ddbeaa0
...
@@ -14,39 +14,43 @@
...
@@ -14,39 +14,43 @@
# Git repo: https://github.com/phlegx/acme.sh
# Git repo: https://github.com/phlegx/acme.sh
# TODO: Better Error handling
# TODO: Better Error handling
########################################################################
########################################################################
KAS_Api
=
"https://kasapi.kasserver.com/dokumentation/formular.php"
KAS_Api
=
"https://kasapi.kasserver.com/soap/KasApi.php"
KAS_Auth
=
"https://kasapi.kasserver.com/soap/KasAuth.php"
######## Public functions #####################
######## Public functions #####################
dns_kas_add
()
{
dns_kas_add
()
{
_fulldomain
=
$1
_fulldomain
=
$1
_txtvalue
=
$2
_txtvalue
=
$2
_info
"Using DNS-01 All-inkl/Kasserver hook"
_info
"Adding
$_fulldomain
DNS TXT entry on All-inkl/Kasserver"
_info
"### -> Using DNS-01 All-inkl/Kasserver hook"
_info
"Check and Save Props"
_info
"### -> Adding
$_fulldomain
DNS TXT entry on All-inkl/Kasserver"
_info
"### -> Retriving Credential Token"
_get_credential_token
_info
"### -> Check and Save Props"
_check_and_save
_check_and_save
_info
"Checking Zone and Record_Name"
_info
"### -> Checking Zone and Record_Name"
_get_zone_and_record_name
"
$_fulldomain
"
_get_zone_and_record_name
"
$_fulldomain
"
_info
"Getting Record ID"
_info
"### -> Checking for existing Record entries"
_get_record_id
_get_record_id
_info
"Creating TXT DNS record"
# If there is a record_id, delete the entry
params
=
"?kas_login=
$KAS_Login
"
if
[
-n
"
$_record_id
"
]
;
then
params
=
"
$params
&kas_auth_type=
$KAS_Authtype
"
_info
"Existing records found. Now deleting old entries"
params
=
"
$params
&kas_auth_data=
$KAS_Authdata
"
for
i
in
$_record_id
;
do
params
=
"
$params
&var1=record_name"
_delete_RecordByID
"
$i
"
params
=
"
$params
&wert1=
$_record_name
"
done
params
=
"
$params
&var2=record_type"
else
params
=
"
$params
&wert2=TXT"
_info
"No record found."
params
=
"
$params
&var3=record_data"
fi
params
=
"
$params
&wert3=
$_txtvalue
"
params
=
"
$params
&var4=record_aux"
_info
"### -> Creating TXT DNS record"
params
=
"
$params
&wert4=0"
action
=
"add_dns_settings"
params
=
"
$params
&kas_action=add_dns_settings"
kasReqParam
=
"{
\"
record_name
\"
:
\"
$_record_name
\"
,
\"
record_type
\"
:
\"
TXT
\"
,
\"
record_data
\"
:
\"
$_txtvalue
\"
,
\"
record_aux
\"
:
\"
0
\"
,
\"
zone_host
\"
:
\"
$_zone
\"
}"
params
=
"
$params
&var5=zone_host"
response
=
"
$(
_callAPI
"
$action
"
"
$kasReqParam
"
)
"
params
=
"
$params
&wert5=
$_zone
"
_debug2
"Wait for 10 seconds by default before calling KAS API."
_debug2
"Response"
"
$response
"
_sleep 10
response
=
"
$(
_get
"
$KAS_Api$params
"
)
"
_debug2
"response"
"
$response
"
if
!
_contains
"
$response
"
"TRUE"
;
then
if
!
_contains
"
$response
"
"TRUE"
;
then
_err
"An unkown error occurred, please check manually."
_err
"An unkown error occurred, please check manually."
...
@@ -58,45 +62,46 @@ dns_kas_add() {
...
@@ -58,45 +62,46 @@ dns_kas_add() {
dns_kas_rm
()
{
dns_kas_rm
()
{
_fulldomain
=
$1
_fulldomain
=
$1
_txtvalue
=
$2
_txtvalue
=
$2
_info
"Using DNS-01 All-inkl/Kasserver hook"
_info
"Cleaning up after All-inkl/Kasserver hook"
_info
"Removing
$_fulldomain
DNS TXT entry on All-inkl/Kasserver"
_info
"Check and Save Props"
_info
"### -> Using DNS-01 All-inkl/Kasserver hook"
_info
"### -> Cleaning up after All-inkl/Kasserver hook"
_info
"### -> Removing
$_fulldomain
DNS TXT entry on All-inkl/Kasserver"
_info
"### -> Retriving Credential Token"
_get_credential_token
_info
"### -> Check and Save Props"
_check_and_save
_check_and_save
_info
"Checking Zone and Record_Name"
_info
"### -> Checking Zone and Record_Name"
_get_zone_and_record_name
"
$_fulldomain
"
_get_zone_and_record_name
"
$_fulldomain
"
_info
"Getting Record ID"
_info
"### -> Getting Record ID"
_get_record_id
_get_record_id
_info
"### -> Removing entries with ID:
$_record_id
"
# If there is a record_id, delete the entry
# If there is a record_id, delete the entry
if
[
-n
"
$_record_id
"
]
;
then
if
[
-n
"
$_record_id
"
]
;
then
params
=
"?kas_login=
$KAS_Login
"
params
=
"
$params
&kas_auth_type=
$KAS_Authtype
"
params
=
"
$params
&kas_auth_data=
$KAS_Authdata
"
params
=
"
$params
&kas_action=delete_dns_settings"
for
i
in
$_record_id
;
do
for
i
in
$_record_id
;
do
params2
=
"
$params
&var1=record_id"
_delete_RecordByID
"
$i
"
params2
=
"
$params2
&wert1=
$i
"
_debug2
"Wait for 10 seconds by default before calling KAS API."
_sleep 10
response
=
"
$(
_get
"
$KAS_Api$params2
"
)
"
_debug2
"response"
"
$response
"
if
!
_contains
"
$response
"
"TRUE"
;
then
_err
"Either the txt record is not found or another error occurred, please check manually."
return
1
fi
done
done
else
# Cannot delete or unkown error
else
# Cannot delete or unkown error
_err
"No record_id found that can be deleted. Please check manually."
_info
"No record_id found that can be deleted. Please check manually."
return
1
fi
fi
return
0
return
0
}
}
########################## PRIVATE FUNCTIONS ###########################
########################## PRIVATE FUNCTIONS ###########################
# Delete Record ID
_delete_RecordByID
()
{
recId
=
$1
action
=
"delete_dns_settings"
kasReqParam
=
"{
\"
record_id
\"
:
\"
$recId
\"
}"
response
=
"
$(
_callAPI
"
$action
"
"
$kasReqParam
"
)
"
_debug2
"Response"
"
$response
"
if
!
_contains
"
$response
"
"TRUE"
;
then
_info
"Either the txt record is not found or another error occurred, please check manually."
fi
}
# Checks for the ENV variables and saves them
# Checks for the ENV variables and saves them
_check_and_save
()
{
_check_and_save
()
{
KAS_Login
=
"
${
KAS_Login
:-
$(
_readaccountconf_mutable KAS_Login
)
}
"
KAS_Login
=
"
${
KAS_Login
:-
$(
_readaccountconf_mutable KAS_Login
)
}
"
...
@@ -119,50 +124,77 @@ _check_and_save() {
...
@@ -119,50 +124,77 @@ _check_and_save() {
# Gets back the base domain/zone and record name.
# Gets back the base domain/zone and record name.
# See: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide
# See: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide
_get_zone_and_record_name
()
{
_get_zone_and_record_name
()
{
params
=
"?kas_login=
$KAS_Login
"
action
=
"get_domains"
params
=
"?kas_login=
$KAS_Login
"
kasReqParam
=
"[]"
params
=
"
$params
&kas_auth_type=
$KAS_Authtype
"
response
=
"
$(
_callAPI
"
$action
"
"
$kasReqParam
"
)
"
params
=
"
$params
&kas_auth_data=
$KAS_Authdata
"
_debug2
"Response"
"
$response
"
params
=
"
$params
&kas_action=get_domains"
zonen
=
"
$(
echo
"
$response
"
|
sed
's/<item>/\n/g'
|
sed
-r
's/(.*<key xsi:type="xsd:string">domain_name<\/key><value xsi:type="xsd:string">)(.*)(<\/value.*)/\2/'
|
sed
'/^</d'
)
"
domain
=
"
$1
"
_debug2
"Wait for 10 seconds by default before calling KAS API."
temp_domain
=
"
$(
echo
"
$1
"
|
sed
's/\.$//'
)
"
_sleep 10
rootzone
=
"
$domain
"
response
=
"
$(
_get
"
$KAS_Api$params
"
)
"
for
i
in
$zonen
;
do
_debug2
"response"
"
$response
"
l1
=
${#
rootzone
}
_zonen
=
"
$(
echo
"
$response
"
|
tr
-d
"
\n\r
"
|
tr
-d
" "
|
tr
'[]'
'<>'
|
sed
"s/=>Array/
\n
=> Array/g"
|
tr
' '
'\n'
|
grep
"domain_name"
|
tr
'<'
'\n'
|
grep
"domain_name"
|
sed
"s/domain_name>=>//g"
)
"
_domain
=
"
$1
"
_temp_domain
=
"
$(
echo
"
$1
"
|
sed
's/\.$//'
)
"
_rootzone
=
"
$_domain
"
for
i
in
$_zonen
;
do
l1
=
${#
_rootzone
}
l2
=
${#
i
}
l2
=
${#
i
}
if
_endswith
"
$
_
domain
"
"
$i
"
&&
[
"
$l1
"
-ge
"
$l2
"
]
;
then
if
_endswith
"
$domain
"
"
$i
"
&&
[
"
$l1
"
-ge
"
$l2
"
]
;
then
_
rootzone
=
"
$i
"
rootzone
=
"
$i
"
fi
fi
done
done
_zone
=
"
${
_
rootzone
}
."
_zone
=
"
${
rootzone
}
."
_
temp_record_name
=
"
$(
echo
"
$
_
temp_domain
"
|
sed
"s/
$
_
rootzone
//g"
)
"
temp_record_name
=
"
$(
echo
"
$temp_domain
"
|
sed
"s/
$rootzone
//g"
)
"
_record_name
=
"
$(
echo
"
$
_
temp_record_name
"
|
sed
's/\.$//'
)
"
_record_name
=
"
$(
echo
"
$temp_record_name
"
|
sed
's/\.$//'
)
"
_debug
2
"Zone:"
"
$_zone
"
_debug
"Zone:"
"
$_zone
"
_debug
2
"Domain:"
"
$
_
domain
"
_debug
"Domain:"
"
$domain
"
_debug
2
"Record_Name:"
"
$_record_name
"
_debug
"Record_Name:"
"
$_record_name
"
return
0
return
0
}
}
# Retrieve the DNS record ID
# Retrieve the DNS record ID
_get_record_id
()
{
_get_record_id
()
{
params
=
"?kas_login=
$KAS_Login
"
action
=
"get_dns_settings"
params
=
"
$params
&kas_auth_type=
$KAS_Authtype
"
kasReqParam
=
"{
\"
zone_host
\"
:
\"
$_zone
\"
,
\"
nameserver
\"
:
\"
ns5.kasserver.com
\"
}"
params
=
"
$params
&kas_auth_data=
$KAS_Authdata
"
response
=
"
$(
_callAPI
"
$action
"
"
$kasReqParam
"
)
"
params
=
"
$params
&kas_action=get_dns_settings"
params
=
"
$params
&var1=zone_host"
_debug2
"Response"
"
$response
"
params
=
"
$params
&wert1=
$_zone
"
_record_id
=
"
$(
echo
"
$response
"
|
sed
's/<item xsi:type="ns2:Map">/\n/g'
|
sed
-n
-e
"/^.*
$_record_name
.*/Ip"
|
sed
-n
-e
"/^.*
$_txtvalue
.*/Ip"
|
sed
-r
's/(.*record_id<\/key><value xsi:type="xsd:string">)([0-9]+)(<\/value.*)/\2/'
)
"
_debug
"Record Id: "
"
$_record_id
"
_debug2
"Wait for 10 seconds by default before calling KAS API."
return
0
}
# Retrieve credential token
_get_credential_token
()
{
data
=
"<SOAP-ENV:Envelope xmlns:SOAP-ENV=
\"
http://schemas.xmlsoap.org/soap/envelope/
\"
xmlns:ns1=
\"
urn:xmethodsKasApiAuthentication
\"
xmlns:xsd=
\"
http://www.w3.org/2001/XMLSchema
\"
xmlns:xsi=
\"
http://www.w3.org/2001/XMLSchema-instance
\"
xmlns:SOAP-ENC=
\"
http://schemas.xmlsoap.org/soap/encoding/
\"
SOAP-ENV:encodingStyle=
\"
http://schemas.xmlsoap.org/soap/encoding/
\"
><SOAP-ENV:Body><ns1:KasAuth>"
data
=
"
$data
<Params xsi:type=
\"
xsd:string
\"
>{
\"
kas_login
\"
:
\"
$KAS_Login
\"
,
\"
kas_auth_type
\"
:
\"
$KAS_Authtype
\"
,
\"
kas_auth_data
\"
:
\"
$KAS_Authdata
\"
,
\"
session_lifetime
\"
:600,
\"
session_update_lifetime
\"
:
\"
Y
\"
,
\"
session_2fa
\"
:123456}</Params>"
data
=
"
$data
</ns1:KasAuth></SOAP-ENV:Body></SOAP-ENV:Envelope>"
_debug
"Be frindly and wait 10 seconds by default before calling KAS API."
_sleep 10
_sleep 10
response
=
"
$(
_get
"
$KAS_Api$params
"
)
"
_debug2
"response"
"
$response
"
contentType
=
"text/xml"
_record_id
=
"
$(
echo
"
$response
"
|
tr
-d
"
\n\r
"
|
tr
-d
" "
|
tr
'[]'
'<>'
|
sed
"s/=>Array/
\n
=> Array/g"
|
tr
' '
'\n'
|
grep
"=>
$_record_name
<"
|
grep
'>TXT<'
|
tr
'<'
'\n'
|
grep
record_id |
sed
"s/record_id>=>//g"
)
"
export
_H1
=
"SOAPAction: ns1:KasAuth"
_debug2 _record_id
"
$_record_id
"
response
=
"
$(
_post
"
$data
"
"
$KAS_Auth
"
""
"POST"
"
$contentType
"
)
"
_debug2
"Response"
"
$response
"
_credential_token
=
"
$(
echo
"
$response
"
|
tr
'\n'
' '
|
sed
's/.*return xsi:type="xsd:string">\(.*\)<\/return>/\1/'
|
sed
's/<\/ns1:KasAuthResponse\(.*\)Envelope>.*//'
)
"
_debug
"Credential Token: "
"
$_credential_token
"
return
0
return
0
}
}
_callAPI
()
{
kasaction
=
$1
kasReqParams
=
$2
baseParam
=
"<Params xsi:type=
\"
xsd:string
\"
>{
\"
kas_login
\"
:
\"
$KAS_Login
\"
,
\"
kas_auth_type
\"
:
\"
session
\"
,
\"
kas_auth_data
\"
:
\"
$_credential_token
\"
,
\"
kas_action
\"
:
\"
$kasaction
\"
,
\"
KasRequestParams
\"
:
$kasReqParams
"
baseParamClosing
=
"}</Params>"
data
=
"<SOAP-ENV:Envelope xmlns:SOAP-ENV=
\"
http://schemas.xmlsoap.org/soap/envelope/
\"
xmlns:ns1=
\"
urn:xmethodsKasApi
\"
xmlns:xsd=
\"
http://www.w3.org/2001/XMLSchema
\"
xmlns:xsi=
\"
http://www.w3.org/2001/XMLSchema-instance
\"
xmlns:SOAP-ENC=
\"
http://schemas.xmlsoap.org/soap/encoding/
\"
SOAP-ENV:encodingStyle=
\"
http://schemas.xmlsoap.org/soap/encoding/
\"
><SOAP-ENV:Body><ns1:KasApi>"
data
=
"
$data$baseParam$baseParamClosing
"
data
=
"
$data
</ns1:KasApi></SOAP-ENV:Body></SOAP-ENV:Envelope>"
_debug2
"Request"
"
$data
"
_debug
"Be frindly and wait 10 seconds by default before calling KAS API."
_sleep 10
contentType
=
"text/xml"
export
_H1
=
"SOAPAction: ns1:KasApi"
response
=
"
$(
_post
"
$data
"
"
$KAS_Api
"
""
"POST"
"
$contentType
"
)
"
_debug2
"Response"
"
$response
"
echo
"
$response
"
}
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