]> git.proxmox.com Git - mirror_acme.sh.git/blob - dnsapi/dns_kas.sh
Update dns_websupport.sh
[mirror_acme.sh.git] / dnsapi / dns_kas.sh
1 #!/usr/bin/env sh
2 ########################################################################
3 # All-inkl Kasserver hook script for acme.sh
4 #
5 # Environment variables:
6 #
7 # - $KAS_Login (Kasserver API login name)
8 # - $KAS_Authtype (Kasserver API auth type. Default: sha1)
9 # - $KAS_Authdata (Kasserver API auth data.)
10 #
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 #####################
19 dns_kas_add() {
20 _fulldomain=$1
21 _txtvalue=$2
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"
25 _check_and_save
26 _info "Checking Zone and Record_Name"
27 _get_zone_and_record_name "$_fulldomain"
28 _info "Getting Record ID"
29 _get_record_id
30
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."
47 _sleep 10
48 response="$(_get "$KAS_Api$params")"
49 _debug2 "response" "$response"
50
51 if ! _contains "$response" "TRUE"; then
52 _err "An unkown error occurred, please check manually."
53 return 1
54 fi
55 return 0
56 }
57
58 dns_kas_rm() {
59 _fulldomain=$1
60 _txtvalue=$2
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"
64
65 _info "Check and Save Props"
66 _check_and_save
67 _info "Checking Zone and Record_Name"
68 _get_zone_and_record_name "$_fulldomain"
69 _info "Getting Record ID"
70 _get_record_id
71
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"
78
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."
83 _sleep 10
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."
88 return 1
89 fi
90 done
91 else # Cannot delete or unkown error
92 _err "No record_id found that can be deleted. Please check manually."
93 return 1
94 fi
95 return 0
96 }
97
98 ########################## PRIVATE FUNCTIONS ###########################
99
100 # Checks for the ENV variables and saves them
101 _check_and_save() {
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)}"
105
106 if [ -z "$KAS_Login" ] || [ -z "$KAS_Authtype" ] || [ -z "$KAS_Authdata" ]; then
107 KAS_Login=
108 KAS_Authtype=
109 KAS_Authdata=
110 _err "No auth details provided. Please set user credentials using the \$KAS_Login, \$KAS_Authtype, and \$KAS_Authdata environment variables."
111 return 1
112 fi
113 _saveaccountconf_mutable KAS_Login "$KAS_Login"
114 _saveaccountconf_mutable KAS_Authtype "$KAS_Authtype"
115 _saveaccountconf_mutable KAS_Authdata "$KAS_Authdata"
116 return 0
117 }
118
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"
127
128 _debug2 "Wait for 10 seconds by default before calling KAS API."
129 _sleep 10
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")"
133 _domain="$1"
134 _temp_domain="$(echo "$1" | sed 's/\.$//')"
135 _rootzone="$_domain"
136 for i in $_zonen; do
137 l1=${#_rootzone}
138 l2=${#i}
139 if _endswith "$_domain" "$i" && [ "$l1" -ge "$l2" ]; then
140 _rootzone="$i"
141 fi
142 done
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"
149 return 0
150 }
151
152 # Retrieve the DNS record ID
153 _get_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"
160
161 _debug2 "Wait for 10 seconds by default before calling KAS API."
162 _sleep 10
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"
167 return 0
168 }