2 ########################################################################
3 # All-inkl Kasserver hook script for acme.sh
5 # Environment variables:
7 # - $KAS_Login (Kasserver API login name)
8 # - $KAS_Authtype (Kasserver API auth type. Default: sha1)
9 # - $KAS_Authdata (Kasserver API auth data.)
11 # Author: Martin Kammerlander, Phlegx Systems OG <martin.kammerlander@phlegx.com>
12 # Updated by: Marc-Oliver Lange <git@die-lang.es>
13 # Credits: Inspired by dns_he.sh. Thanks a lot man!
14 # Git repo: https://github.com/phlegx/acme.sh
15 # TODO: Better Error handling
16 ########################################################################
17 KAS_Api
="https://kasapi.kasserver.com/dokumentation/formular.php"
18 ######## Public functions #####################
22 _info
"Using DNS-01 All-inkl/Kasserver hook"
23 _info
"Adding $_fulldomain DNS TXT entry on All-inkl/Kasserver"
24 _info
"Check and Save Props"
26 _info
"Checking Zone and Record_Name"
27 _get_zone_and_record_name
"$_fulldomain"
28 _info
"Getting Record ID"
31 _info
"Creating TXT DNS record"
32 params
="?kas_login=$KAS_Login"
33 params
="$params&kas_auth_type=$KAS_Authtype"
34 params
="$params&kas_auth_data=$KAS_Authdata"
35 params
="$params&var1=record_name"
36 params
="$params&wert1=$_record_name"
37 params
="$params&var2=record_type"
38 params
="$params&wert2=TXT"
39 params
="$params&var3=record_data"
40 params
="$params&wert3=$_txtvalue"
41 params
="$params&var4=record_aux"
42 params
="$params&wert4=0"
43 params
="$params&kas_action=add_dns_settings"
44 params
="$params&var5=zone_host"
45 params
="$params&wert5=$_zone"
46 _debug2
"Wait for 10 seconds by default before calling KAS API."
48 response
="$(_get "$KAS_Api$params")"
49 _debug2
"response" "$response"
51 if ! _contains
"$response" "TRUE"; then
52 _err
"An unkown error occurred, please check manually."
61 _info
"Using DNS-01 All-inkl/Kasserver hook"
62 _info
"Cleaning up after All-inkl/Kasserver hook"
63 _info
"Removing $_fulldomain DNS TXT entry on All-inkl/Kasserver"
65 _info
"Check and Save Props"
67 _info
"Checking Zone and Record_Name"
68 _get_zone_and_record_name
"$_fulldomain"
69 _info
"Getting Record ID"
72 # If there is a record_id, delete the entry
73 if [ -n "$_record_id" ]; then
74 params
="?kas_login=$KAS_Login"
75 params
="$params&kas_auth_type=$KAS_Authtype"
76 params
="$params&kas_auth_data=$KAS_Authdata"
77 params
="$params&kas_action=delete_dns_settings"
79 for i
in $_record_id; do
80 params2
="$params&var1=record_id"
81 params2
="$params2&wert1=$i"
82 _debug2
"Wait for 10 seconds by default before calling KAS API."
84 response
="$(_get "$KAS_Api$params2")"
85 _debug2
"response" "$response"
86 if ! _contains
"$response" "TRUE"; then
87 _err
"Either the txt record is not found or another error occurred, please check manually."
91 else # Cannot delete or unkown error
92 _err
"No record_id found that can be deleted. Please check manually."
98 ########################## PRIVATE FUNCTIONS ###########################
100 # Checks for the ENV variables and saves them
102 KAS_Login
="${KAS_Login:-$(_readaccountconf_mutable KAS_Login)}"
103 KAS_Authtype
="${KAS_Authtype:-$(_readaccountconf_mutable KAS_Authtype)}"
104 KAS_Authdata
="${KAS_Authdata:-$(_readaccountconf_mutable KAS_Authdata)}"
106 if [ -z "$KAS_Login" ] ||
[ -z "$KAS_Authtype" ] ||
[ -z "$KAS_Authdata" ]; then
110 _err
"No auth details provided. Please set user credentials using the \$KAS_Login, \$KAS_Authtype, and \$KAS_Authdata environment variables."
113 _saveaccountconf_mutable KAS_Login
"$KAS_Login"
114 _saveaccountconf_mutable KAS_Authtype
"$KAS_Authtype"
115 _saveaccountconf_mutable KAS_Authdata
"$KAS_Authdata"
119 # Gets back the base domain/zone and record name.
120 # See: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide
121 _get_zone_and_record_name
() {
122 params
="?kas_login=$KAS_Login"
123 params
="?kas_login=$KAS_Login"
124 params
="$params&kas_auth_type=$KAS_Authtype"
125 params
="$params&kas_auth_data=$KAS_Authdata"
126 params
="$params&kas_action=get_domains"
128 _debug2
"Wait for 10 seconds by default before calling KAS API."
130 response
="$(_get "$KAS_Api$params")"
131 _debug2
"response" "$response"
132 _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
")"
134 _temp_domain
="$(echo "$1" | sed 's/\.$//')"
139 if _endswith
"$_domain" "$i" && [ "$l1" -ge "$l2" ]; then
143 _zone
="${_rootzone}."
144 _temp_record_name
="$(echo "$_temp_domain" | sed "s
/$_rootzone//g
")"
145 _record_name
="$(echo "$_temp_record_name" | sed 's/\.$//')"
146 _debug2
"Zone:" "$_zone"
147 _debug2
"Domain:" "$_domain"
148 _debug2
"Record_Name:" "$_record_name"
152 # Retrieve the DNS record ID
154 params
="?kas_login=$KAS_Login"
155 params
="$params&kas_auth_type=$KAS_Authtype"
156 params
="$params&kas_auth_data=$KAS_Authdata"
157 params
="$params&kas_action=get_dns_settings"
158 params
="$params&var1=zone_host"
159 params
="$params&wert1=$_zone"
161 _debug2
"Wait for 10 seconds by default before calling KAS API."
163 response
="$(_get "$KAS_Api$params")"
164 _debug2
"response" "$response"
165 _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
")"
166 _debug2 _record_id
"$_record_id"