Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

All inkl kasserver dns script #1341

Merged
merged 32 commits into from
Feb 11, 2020
Merged
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
861df49
Add All-inkl kasserver script.
phlegx Mar 9, 2018
32d7bd5
Add own github repository URL.
phlegx Mar 9, 2018
8c634d8
Merge branch 'dev' into all-inkl-kasserver-dns-script
phlegx Mar 16, 2018
cbf0cea
Update dnsapi Readme.
phlegx Mar 16, 2018
e431df0
Only create entry. Remove update.
phlegx Mar 16, 2018
11bfb1e
Fix return values of some functions.
phlegx Mar 16, 2018
26b5180
Rename full_domain and txt_value variables.
phlegx Mar 16, 2018
cb4a2cf
remove debug output
phlegx Mar 16, 2018
c34aadf
Merge with latest dev branch.
phlegx Jun 8, 2018
68f66ca
Add default delay for the calls to KAS api since they are very restri…
phlegx Aug 2, 2018
1ef7fd3
support to delete multiple entries
djonasdev Jun 5, 2019
16bfb17
Merge pull request #3 from dojo90/all-inkl-kasserver-dns-script
phlegx Nov 10, 2019
e22c5ea
Merge with Neilpang dev repo.
phlegx Nov 10, 2019
ec1f984
Replace grep -A.
phlegx Nov 29, 2019
d87e507
Merge remote-tracking branch 'upstream/dev' into all-inkl-kasserver-d…
phlegx Nov 29, 2019
c641b61
Fix a few snytax issues
phlegx Nov 29, 2019
953a9b1
Remove obsolete blank.
phlegx Nov 29, 2019
3ccac62
Change the loop for sh.
phlegx Dec 12, 2019
239d534
Merge remote-tracking branch 'upstream/dev' into all-inkl-kasserver-d…
phlegx Dec 12, 2019
594b83e
Update dns_kas.sh
Marco4223 Dec 28, 2019
99c47dd
Update dns_kas.sh
Marco4223 Dec 28, 2019
a138425
Update dns_kas.sh
Marco4223 Dec 28, 2019
2214507
Revert "Update dns_kas.sh"
Marco4223 Dec 29, 2019
8dd1df7
Update dns_kas.sh
Marco4223 Jan 2, 2020
58cfc0d
Merge pull request #4 from Marco4223/Fix-issues-and-reslolve-zone-and…
phlegx Jan 14, 2020
0246196
Update dns_kas.sh
Marco4223 Jan 15, 2020
96180e7
Merge pull request #5 from Marco4223/Fix-issues-and-reslolve-zone-and…
phlegx Jan 15, 2020
431c53e
Update dns_kas.sh
Marco4223 Jan 15, 2020
fb209cd
Merge pull request #6 from Marco4223/Fix-issues-and-reslolve-zone-and…
phlegx Jan 15, 2020
6613ae5
Update dns_kas.sh
Marco4223 Jan 23, 2020
1c4b831
Merge pull request #7 from Marco4223/Fix-issues-and-reslolve-zone-and…
phlegx Jan 24, 2020
7a30cb9
Merge branch 'dev' into all-inkl-kasserver-dns-script
Neilpang Feb 11, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 168 additions & 0 deletions dnsapi/dns_kas.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
#!/usr/bin/env sh
########################################################################
# All-inkl Kasserver hook script for acme.sh
#
# Environment variables:
#
# - $KAS_Login (Kasserver API login name)
# - $KAS_Authtype (Kasserver API auth type. Default: sha1)
# - $KAS_Authdata (Kasserver API auth data.)
#
# Author: Martin Kammerlander, Phlegx Systems OG <[email protected]>
# Updated by: Marc-Oliver Lange <[email protected]>
# Credits: Inspired by dns_he.sh. Thanks a lot man!
# Git repo: https://github.com/phlegx/acme.sh
# TODO: Better Error handling
########################################################################
KAS_Api="https://kasapi.kasserver.com/dokumentation/formular.php"
######## Public functions #####################
dns_kas_add() {
_fulldomain=$1
_txtvalue=$2
_info "Using DNS-01 All-inkl/Kasserver hook"
_info "Adding $_fulldomain DNS TXT entry on All-inkl/Kasserver"
_info "Check and Save Props"
_check_and_save
_info "Checking Zone and Record_Name"
_get_zone_and_record_name "$_fulldomain"
_info "Getting Record ID"
_get_record_id

_info "Creating TXT DNS record"
params="?kas_login=$KAS_Login"
params="$params&kas_auth_type=$KAS_Authtype"
params="$params&kas_auth_data=$KAS_Authdata"
params="$params&var1=record_name"
params="$params&wert1=$_record_name"
params="$params&var2=record_type"
params="$params&wert2=TXT"
params="$params&var3=record_data"
params="$params&wert3=$_txtvalue"
params="$params&var4=record_aux"
params="$params&wert4=0"
params="$params&kas_action=add_dns_settings"
params="$params&var5=zone_host"
params="$params&wert5=$_zone"
_debug2 "Wait for 10 seconds by default before calling KAS API."
_sleep 10
response="$(_get "$KAS_Api$params")"
_debug2 "response" "$response"

if ! _contains "$response" "TRUE"; then
_err "An unkown error occurred, please check manually."
return 1
fi
return 0
}

dns_kas_rm() {
_fulldomain=$1
_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"
_check_and_save
_info "Checking Zone and Record_Name"
_get_zone_and_record_name "$_fulldomain"
_info "Getting Record ID"
_get_record_id

# If there is a record_id, delete the entry
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
params2="$params&var1=record_id"
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
else # Cannot delete or unkown error
_err "No record_id found that can be deleted. Please check manually."
return 1
fi
return 0
}

########################## PRIVATE FUNCTIONS ###########################

# Checks for the ENV variables and saves them
_check_and_save() {
KAS_Login="${KAS_Login:-$(_readaccountconf_mutable KAS_Login)}"
KAS_Authtype="${KAS_Authtype:-$(_readaccountconf_mutable KAS_Authtype)}"
KAS_Authdata="${KAS_Authdata:-$(_readaccountconf_mutable KAS_Authdata)}"

if [ -z "$KAS_Login" ] || [ -z "$KAS_Authtype" ] || [ -z "$KAS_Authdata" ]; then
KAS_Login=
KAS_Authtype=
KAS_Authdata=
_err "No auth details provided. Please set user credentials using the \$KAS_Login, \$KAS_Authtype, and \$KAS_Authdata environment variables."
return 1
fi
_saveaccountconf_mutable KAS_Login "$KAS_Login"
_saveaccountconf_mutable KAS_Authtype "$KAS_Authtype"
_saveaccountconf_mutable KAS_Authdata "$KAS_Authdata"
return 0
}

# Gets back the base domain/zone and record name.
# See: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide
_get_zone_and_record_name() {
params="?kas_login=$KAS_Login"
params="?kas_login=$KAS_Login"
params="$params&kas_auth_type=$KAS_Authtype"
params="$params&kas_auth_data=$KAS_Authdata"
params="$params&kas_action=get_domains"

_debug2 "Wait for 10 seconds by default before calling KAS API."
_sleep 10
response="$(_get "$KAS_Api$params")"
_debug2 "response" "$response"
_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}
if _endswith "$_domain" "$i" && [ "$l1" -ge "$l2" ]; then
_rootzone="$i"
fi
done
_zone="${_rootzone}."
_temp_record_name="$(echo "$_temp_domain" | sed "s/$_rootzone//g")"
_record_name="$(echo "$_temp_record_name" | sed 's/\.$//')"
_debug2 "Zone:" "$_zone"
_debug2 "Domain:" "$_domain"
_debug2 "Record_Name:" "$_record_name"
return 0
}

# Retrieve the DNS record ID
_get_record_id() {
params="?kas_login=$KAS_Login"
params="$params&kas_auth_type=$KAS_Authtype"
params="$params&kas_auth_data=$KAS_Authdata"
params="$params&kas_action=get_dns_settings"
params="$params&var1=zone_host"
params="$params&wert1=$_zone"

_debug2 "Wait for 10 seconds by default before calling KAS API."
_sleep 10
response="$(_get "$KAS_Api$params")"
_debug2 "response" "$response"
_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")"
_debug2 _record_id "$_record_id"
return 0
}