]>
Commit | Line | Data |
---|---|---|
2214507d | 1 | #!/usr/bin/env sh |
861df496 MK |
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> | |
02461967 | 12 | # Updated by: Marc-Oliver Lange <git@die-lang.es> |
861df496 | 13 | # Credits: Inspired by dns_he.sh. Thanks a lot man! |
32d7bd5a | 14 | # Git repo: https://github.com/phlegx/acme.sh |
861df496 | 15 | # TODO: Better Error handling |
594b83e7 | 16 | ######################################################################## |
861df496 | 17 | KAS_Api="https://kasapi.kasserver.com/dokumentation/formular.php" |
02461967 M |
18 | ######## Public functions ##################### |
19 | dns_kas_add() { | |
26b5180b MK |
20 | _fulldomain=$1 |
21 | _txtvalue=$2 | |
861df496 | 22 | _info "Using DNS-01 All-inkl/Kasserver hook" |
02461967 | 23 | _info "Adding $_fulldomain DNS TXT entry on All-inkl/Kasserver" |
8dd1df71 | 24 | _info "Check and Save Props" |
861df496 | 25 | _check_and_save |
8dd1df71 | 26 | _info "Checking Zone and Record_Name" |
594b83e7 | 27 | _get_zone_and_record_name "$_fulldomain" |
8dd1df71 | 28 | _info "Getting Record ID" |
861df496 MK |
29 | _get_record_id |
30 | ||
e431df06 | 31 | _info "Creating TXT DNS record" |
861df496 MK |
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" | |
26b5180b | 40 | params="$params&wert3=$_txtvalue" |
861df496 MK |
41 | params="$params&var4=record_aux" |
42 | params="$params&wert4=0" | |
e431df06 MK |
43 | params="$params&kas_action=add_dns_settings" |
44 | params="$params&var5=zone_host" | |
45 | params="$params&wert5=$_zone" | |
68f66ca1 | 46 | _debug2 "Wait for 10 seconds by default before calling KAS API." |
6613ae57 | 47 | _sleep 10 |
861df496 MK |
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() { | |
26b5180b MK |
59 | _fulldomain=$1 |
60 | _txtvalue=$2 | |
861df496 MK |
61 | _info "Using DNS-01 All-inkl/Kasserver hook" |
62 | _info "Cleaning up after All-inkl/Kasserver hook" | |
26b5180b | 63 | _info "Removing $_fulldomain DNS TXT entry on All-inkl/Kasserver" |
431c53ef | 64 | |
8dd1df71 | 65 | _info "Check and Save Props" |
861df496 | 66 | _check_and_save |
8dd1df71 | 67 | _info "Checking Zone and Record_Name" |
594b83e7 | 68 | _get_zone_and_record_name "$_fulldomain" |
8dd1df71 | 69 | _info "Getting Record ID" |
861df496 | 70 | _get_record_id |
431c53ef | 71 | |
ec1f9841 | 72 | # If there is a record_id, delete the entry |
861df496 MK |
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" | |
ec1f9841 | 78 | |
3ccac629 | 79 | for i in $_record_id; do |
1ef7fd36 DJ |
80 | params2="$params&var1=record_id" |
81 | params2="$params2&wert1=$i" | |
82 | _debug2 "Wait for 10 seconds by default before calling KAS API." | |
6613ae57 | 83 | _sleep 10 |
1ef7fd36 DJ |
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 | |
861df496 MK |
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 | |
c641b61b | 95 | return 0 |
861df496 MK |
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 | ||
594b83e7 | 119 | # Gets back the base domain/zone and record name. |
861df496 | 120 | # See: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide |
a1384254 | 121 | _get_zone_and_record_name() { |
431c53ef | 122 | params="?kas_login=$KAS_Login" |
8dd1df71 M |
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." | |
6613ae57 | 129 | _sleep 10 |
8dd1df71 M |
130 | response="$(_get "$KAS_Api$params")" |
131 | _debug2 "response" "$response" | |
02461967 | 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")" |
594b83e7 | 133 | _domain="$1" |
02461967 | 134 | _temp_domain="$(echo "$1" | sed 's/\.$//')" |
594b83e7 M |
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 | |
8dd1df71 | 143 | _zone="${_rootzone}." |
02461967 M |
144 | _temp_record_name="$(echo "$_temp_domain" | sed "s/$_rootzone//g")" |
145 | _record_name="$(echo "$_temp_record_name" | sed 's/\.$//')" | |
8dd1df71 M |
146 | _debug2 "Zone:" "$_zone" |
147 | _debug2 "Domain:" "$_domain" | |
148 | _debug2 "Record_Name:" "$_record_name" | |
11bfb1e5 | 149 | return 0 |
861df496 MK |
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 | ||
68f66ca1 | 161 | _debug2 "Wait for 10 seconds by default before calling KAS API." |
6613ae57 | 162 | _sleep 10 |
861df496 MK |
163 | response="$(_get "$KAS_Api$params")" |
164 | _debug2 "response" "$response" | |
8dd1df71 | 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")" |
861df496 | 166 | _debug2 _record_id "$_record_id" |
861df496 | 167 | return 0 |
ec1f9841 | 168 | } |