From 2e97b20f94bff7bd1e464ed49e95ba8c3f3c2618 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 22 Nov 2020 11:22:54 +0100
Subject: [PATCH 01/48] Added World4You DNS API

---
 dnsapi/dns_world4you.sh | 159 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 159 insertions(+)
 create mode 100644 dnsapi/dns_world4you.sh

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
new file mode 100644
index 00000000..ec5a0e47
--- /dev/null
+++ b/dnsapi/dns_world4you.sh
@@ -0,0 +1,159 @@
+#!/usr/bin/env sh
+
+# World4You - www.world4you.com
+# Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
+
+WORLD4YOU_API="https://my.world4you.com/en"
+
+################ Public functions ################
+
+# Usage: dns_world4you_add <fqdn> <value>
+dns_world4you_add() {
+  fqdn="$1"
+  value="$2"
+  _info "Using world4you"
+  _debug fulldomain "$fqdn"
+  _debug txtvalue "$value"
+
+  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
+
+  _login
+  if [ "$?" != 0 ]; then
+    return 1
+  fi
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
+  if [ -z "$paketnr" ]; then
+    _err "Unable to parse paketnr"
+    return 3
+  fi
+  _debug paketnr "$paketnr"
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  form=$(_get "$WORLD4YOU_API/$paketnr/dns")
+  formiddp=$(echo "$form" | grep 'AddDnsRecordForm\[uniqueFormIdDP\]' | sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
+  formidttl=$(echo "$form" | grep 'AddDnsRecordForm\[uniqueFormIdTTL\]' | sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
+  form_token=$(echo "$form" | grep 'AddDnsRecordForm\[_token\]' | sed 's/^.*name="AddDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
+  if [ -z "$formiddp" ]; then
+    _err "Unable to parse form"
+    return 3
+  fi
+
+  _ORIG_ACME_CURL="$_ACME_CURL"
+  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+
+  body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
+AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
+AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_token"
+  _info "Adding record..."
+  ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/dns" '' POST 'application/x-www-form-urlencoded')
+
+  _ACME_CURL="$_ORIG_ACME_CURL"
+
+  success=$(grep '302\|200' <"$HTTP_HEADER")
+  if [ "$success" ]; then
+    return 0
+  else
+    _err "$(head -n 1 <"$HTTP_HEADER")"
+    return 2
+  fi
+}
+
+# Usage: dns_world4you_rm <fqdn> <value>
+dns_world4you_rm() {
+  fqdn="$1"
+  value="$2"
+  _info "Using world4you"
+  _debug fulldomain "$fqdn"
+  _debug txtvalue "$value"
+
+  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
+
+  _login
+  if [ "$?" != 0 ]; then
+    return 1
+  fi
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  if [ -z "$paketnr" ]; then
+    _err "Unable to parse paketnr"
+    return 3
+  fi
+  _debug paketnr "$paketnr"
+
+  form=$(_get "$WORLD4YOU_API/$paketnr/dns")
+  formiddp=$(echo "$form" | grep 'DeleteDnsRecordForm\[uniqueFormIdDP\]' | sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
+  formidttl=$(echo "$form" | grep 'DeleteDnsRecordForm\[uniqueFormIdTTL\]' | sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
+  form_token=$(echo "$form" | grep 'DeleteDnsRecordForm\[_token\]' | sed 's/^.*name="DeleteDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
+  if [ -z "$formiddp" ]; then
+    _err "Unable to parse form"
+    return 3
+  fi
+
+  recordid=$(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64)
+  _debug recordid "$recordid"
+
+  _ORIG_ACME_CURL="$_ACME_CURL"
+  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+
+  body="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
+DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
+DeleteDnsRecordForm[_token]=$form_token"
+  _info "Removing record..."
+  ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST 'application/x-www-form-urlencoded')
+
+  _ACME_CURL="$_ORIG_ACME_CURL"
+
+  success=$(grep '302\|200' <"$HTTP_HEADER")
+  if [ "$success" ]; then
+    return 0
+  else
+    _err "$(head -n 1 <"$HTTP_HEADER")"
+    return 2
+  fi
+}
+
+################ Private functions ################
+
+# Usage: _login
+_login() {
+  WORLD4YOU_USERNAME="${WORLD4YOU_USERNAME:-$(_readaccountconf_mutable WORLD4YOU_USERNAME)}"
+  WORLD4YOU_PASSWORD="${WORLD4YOU_PASSWORD:-$(_readaccountconf_mutable WORLD4YOU_PASSWORD)}"
+
+  if [ -z "$WORLD4YOU_USERNAME" ] || [ -z "$WORLD4YOU_PASSWORD" ]; then
+    WORLD4YOU_USERNAME=""
+    WORLD4YOU_PASSWORD=""
+    _err "You don't specified world4you username and password yet."
+    _err "Usage: export WORLD4YOU_USERNAME=<name>"
+    _err "Usage: export WORLD4YOU_PASSWORD=<password>"
+    return 2
+  fi
+
+  _saveaccountconf_mutable WORLD4YOU_USERNAME "$WORLD4YOU_USERNAME"
+  _saveaccountconf_mutable WORLD4YOU_PASSWORD "$WORLD4YOU_PASSWORD"
+
+  _info "Logging in..."
+
+  username="$WORLD4YOU_USERNAME"
+  password="$WORLD4YOU_PASSWORD"
+  csrf_token=$(_get "$WORLD4YOU_API/login" | grep '_csrf_token' | sed 's/^.*<input[^>]*value=\"\([^"]*\)\".*$/\1/')
+  sessid=$(grep 'W4YSESSID' <"$HTTP_HEADER" | sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  export _H2="X-Requested-With: XMLHttpRequest"
+  body="_username=$username&_password=$password&_csrf_token=$csrf_token"
+  ret=$(_post "$body" "$WORLD4YOU_API/login" '' POST 'application/x-www-form-urlencoded')
+  unset _H2
+  _debug ret "$ret"
+  if _contains "$ret" "\"success\":true"; then
+    _info "Successfully logged in"
+    sessid=$(grep 'W4YSESSID' <"$HTTP_HEADER" | sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
+  else
+    _err "Unable to log in: $(echo "$ret" | sed 's/^.*"message":"\([^\"]*\)".*$/\1/')"
+    return 1
+  fi
+}

From d7cafe25ff642ca6e32da27992e2e0e9a4017e14 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Thu, 26 Nov 2020 13:59:18 +0100
Subject: [PATCH 02/48] World4You using _egrep_o

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index ec5a0e47..b58ea89a 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -15,7 +15,7 @@ dns_world4you_add() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
   record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
 
   _login
@@ -69,7 +69,7 @@ dns_world4you_rm() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
   record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
 
   _login

From d639c7be392206e8cbcfd6215166450dc5b554c8 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 22 Nov 2020 11:22:54 +0100
Subject: [PATCH 03/48] Added World4You DNS API

---
 dnsapi/dns_world4you.sh | 159 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 159 insertions(+)
 create mode 100644 dnsapi/dns_world4you.sh

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
new file mode 100644
index 00000000..ec5a0e47
--- /dev/null
+++ b/dnsapi/dns_world4you.sh
@@ -0,0 +1,159 @@
+#!/usr/bin/env sh
+
+# World4You - www.world4you.com
+# Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
+
+WORLD4YOU_API="https://my.world4you.com/en"
+
+################ Public functions ################
+
+# Usage: dns_world4you_add <fqdn> <value>
+dns_world4you_add() {
+  fqdn="$1"
+  value="$2"
+  _info "Using world4you"
+  _debug fulldomain "$fqdn"
+  _debug txtvalue "$value"
+
+  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
+
+  _login
+  if [ "$?" != 0 ]; then
+    return 1
+  fi
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
+  if [ -z "$paketnr" ]; then
+    _err "Unable to parse paketnr"
+    return 3
+  fi
+  _debug paketnr "$paketnr"
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  form=$(_get "$WORLD4YOU_API/$paketnr/dns")
+  formiddp=$(echo "$form" | grep 'AddDnsRecordForm\[uniqueFormIdDP\]' | sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
+  formidttl=$(echo "$form" | grep 'AddDnsRecordForm\[uniqueFormIdTTL\]' | sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
+  form_token=$(echo "$form" | grep 'AddDnsRecordForm\[_token\]' | sed 's/^.*name="AddDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
+  if [ -z "$formiddp" ]; then
+    _err "Unable to parse form"
+    return 3
+  fi
+
+  _ORIG_ACME_CURL="$_ACME_CURL"
+  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+
+  body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
+AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
+AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_token"
+  _info "Adding record..."
+  ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/dns" '' POST 'application/x-www-form-urlencoded')
+
+  _ACME_CURL="$_ORIG_ACME_CURL"
+
+  success=$(grep '302\|200' <"$HTTP_HEADER")
+  if [ "$success" ]; then
+    return 0
+  else
+    _err "$(head -n 1 <"$HTTP_HEADER")"
+    return 2
+  fi
+}
+
+# Usage: dns_world4you_rm <fqdn> <value>
+dns_world4you_rm() {
+  fqdn="$1"
+  value="$2"
+  _info "Using world4you"
+  _debug fulldomain "$fqdn"
+  _debug txtvalue "$value"
+
+  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
+
+  _login
+  if [ "$?" != 0 ]; then
+    return 1
+  fi
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  if [ -z "$paketnr" ]; then
+    _err "Unable to parse paketnr"
+    return 3
+  fi
+  _debug paketnr "$paketnr"
+
+  form=$(_get "$WORLD4YOU_API/$paketnr/dns")
+  formiddp=$(echo "$form" | grep 'DeleteDnsRecordForm\[uniqueFormIdDP\]' | sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
+  formidttl=$(echo "$form" | grep 'DeleteDnsRecordForm\[uniqueFormIdTTL\]' | sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
+  form_token=$(echo "$form" | grep 'DeleteDnsRecordForm\[_token\]' | sed 's/^.*name="DeleteDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
+  if [ -z "$formiddp" ]; then
+    _err "Unable to parse form"
+    return 3
+  fi
+
+  recordid=$(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64)
+  _debug recordid "$recordid"
+
+  _ORIG_ACME_CURL="$_ACME_CURL"
+  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+
+  body="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
+DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
+DeleteDnsRecordForm[_token]=$form_token"
+  _info "Removing record..."
+  ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST 'application/x-www-form-urlencoded')
+
+  _ACME_CURL="$_ORIG_ACME_CURL"
+
+  success=$(grep '302\|200' <"$HTTP_HEADER")
+  if [ "$success" ]; then
+    return 0
+  else
+    _err "$(head -n 1 <"$HTTP_HEADER")"
+    return 2
+  fi
+}
+
+################ Private functions ################
+
+# Usage: _login
+_login() {
+  WORLD4YOU_USERNAME="${WORLD4YOU_USERNAME:-$(_readaccountconf_mutable WORLD4YOU_USERNAME)}"
+  WORLD4YOU_PASSWORD="${WORLD4YOU_PASSWORD:-$(_readaccountconf_mutable WORLD4YOU_PASSWORD)}"
+
+  if [ -z "$WORLD4YOU_USERNAME" ] || [ -z "$WORLD4YOU_PASSWORD" ]; then
+    WORLD4YOU_USERNAME=""
+    WORLD4YOU_PASSWORD=""
+    _err "You don't specified world4you username and password yet."
+    _err "Usage: export WORLD4YOU_USERNAME=<name>"
+    _err "Usage: export WORLD4YOU_PASSWORD=<password>"
+    return 2
+  fi
+
+  _saveaccountconf_mutable WORLD4YOU_USERNAME "$WORLD4YOU_USERNAME"
+  _saveaccountconf_mutable WORLD4YOU_PASSWORD "$WORLD4YOU_PASSWORD"
+
+  _info "Logging in..."
+
+  username="$WORLD4YOU_USERNAME"
+  password="$WORLD4YOU_PASSWORD"
+  csrf_token=$(_get "$WORLD4YOU_API/login" | grep '_csrf_token' | sed 's/^.*<input[^>]*value=\"\([^"]*\)\".*$/\1/')
+  sessid=$(grep 'W4YSESSID' <"$HTTP_HEADER" | sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  export _H2="X-Requested-With: XMLHttpRequest"
+  body="_username=$username&_password=$password&_csrf_token=$csrf_token"
+  ret=$(_post "$body" "$WORLD4YOU_API/login" '' POST 'application/x-www-form-urlencoded')
+  unset _H2
+  _debug ret "$ret"
+  if _contains "$ret" "\"success\":true"; then
+    _info "Successfully logged in"
+    sessid=$(grep 'W4YSESSID' <"$HTTP_HEADER" | sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
+  else
+    _err "Unable to log in: $(echo "$ret" | sed 's/^.*"message":"\([^\"]*\)".*$/\1/')"
+    return 1
+  fi
+}

From 95235d69c20484d340d44d21950a76f6492e3c7e Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Thu, 26 Nov 2020 13:59:18 +0100
Subject: [PATCH 04/48] World4You using _egrep_o

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index ec5a0e47..b58ea89a 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -15,7 +15,7 @@ dns_world4you_add() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
   record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
 
   _login
@@ -69,7 +69,7 @@ dns_world4you_rm() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
   record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
 
   _login

From bb3cc1130b22335f5664878635db43293b367194 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 19:34:16 +0100
Subject: [PATCH 05/48] World4You using ggrep in solaris

---
 dnsapi/dns_world4you.sh | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index b58ea89a..db52cda1 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -24,7 +24,7 @@ dns_world4you_add() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -78,7 +78,7 @@ dns_world4you_rm() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -157,3 +157,13 @@ _login() {
     return 1
   fi
 }
+
+_ggrep() {
+  if _exists "ggrep"; then
+    ggrep $@
+    return $?
+  else
+    grep $@
+    return $?
+  fi
+}

From 268eaddad8845ed35af46a4f7ac36d2859a8d074 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 19:35:53 +0100
Subject: [PATCH 06/48] World4You shellcheck

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index db52cda1..fbc5fe40 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -160,10 +160,10 @@ _login() {
 
 _ggrep() {
   if _exists "ggrep"; then
-    ggrep $@
+    ggrep "$@"
     return $?
   else
-    grep $@
+    grep "$@"
     return $?
   fi
 }

From 339ff8ca773e196613db5ca29f651893c3227682 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:12:11 +0100
Subject: [PATCH 07/48] World4You domain root fix

---
 dnsapi/dns_world4you.sh | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index fbc5fe40..502e8631 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -4,6 +4,7 @@
 # Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
 
 WORLD4YOU_API="https://my.world4you.com/en"
+PAKETNR=''
 
 ################ Public functions ################
 
@@ -24,7 +25,9 @@ dns_world4you_add() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
+  form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
+  _get_paketnr "$tld" "$form"
+  paketnr="$PAKETNR"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -78,7 +81,9 @@ dns_world4you_rm() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
+  _get_paketnr "$tld" "$form"
+  paketnr="$PAKETNR"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -158,6 +163,25 @@ _login() {
   fi
 }
 
+# Usage _get_paketnr <tld> <form>
+_get_paketnr() {
+  tld="$1"
+  form="$2"
+
+  domains=($(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/'))
+  paketnrs=($(echo "$form" | _ggrep -B 3 -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed -n '1~5p' | sed 's/^.*>\([0-9][0-9]*\).*$/\1/'))
+
+  total="${#domains[*]}"
+  for (( i=0; i<=$(( $total - 1 )); i++ )); do
+    domain="${domains[$i]}"
+    if [ $(echo "$domain" | grep "$tld\$") ]; then
+      PAKETNR="${paketnrs[$i]}"
+      return 0
+    fi
+  done
+  return 1
+}
+
 _ggrep() {
   if _exists "ggrep"; then
     ggrep "$@"

From 2e15371d616a3b83c4cdc3b51176edf2d1d2966d Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:22:50 +0100
Subject: [PATCH 08/48] World4You posix shell

---
 dnsapi/dns_world4you.sh | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 502e8631..8e12dd5f 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -168,18 +168,19 @@ _get_paketnr() {
   tld="$1"
   form="$2"
 
-  domains=($(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/'))
-  paketnrs=($(echo "$form" | _ggrep -B 3 -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed -n '1~5p' | sed 's/^.*>\([0-9][0-9]*\).*$/\1/'))
-
-  total="${#domains[*]}"
-  for (( i=0; i<=$(( $total - 1 )); i++ )); do
-    domain="${domains[$i]}"
+  domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
+  domain=''
+  for domain in $domains; do
     if [ $(echo "$domain" | grep "$tld\$") ]; then
-      PAKETNR="${paketnrs[$i]}"
-      return 0
+      break
     fi
   done
-  return 1
+  if [ -z "$domain" ]; then
+    return 1
+  fi
+
+  PAKETNR=$(echo "$form" | _ggrep -B 3 "^\\s*$domain\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  return 0
 }
 
 _ggrep() {

From 42583cf3bb6d4ea091491533d33d1717f746065f Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:25:29 +0100
Subject: [PATCH 09/48] World4You Shellcheck

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 8e12dd5f..e1585801 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if [ $(echo "$domain" | grep "$tld\$") ]; then
+    if [ "$(echo "$domain" | grep -q "$tld\$")" ]; then
       break
     fi
   done

From 198b8400597881a82bf8c3cc1f14edf32068862a Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:27:10 +0100
Subject: [PATCH 10/48] World4You grep -q

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index e1585801..2be5a6b9 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if [ "$(echo "$domain" | grep -q "$tld\$")" ]; then
+    if $(echo "$domain" | grep -q "$tld\$"; then
       break
     fi
   done

From dcb4cb3a1e439661b4f0fd2d1b63fa61c78b0f1a Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:28:25 +0100
Subject: [PATCH 11/48] World4You Bugfix

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 2be5a6b9..e1ced163 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if $(echo "$domain" | grep -q "$tld\$"; then
+    if $(echo "$domain" | grep -q "$tld\$"); then
       break
     fi
   done

From f3987b453c4115fb19a565dfe4850fd2dff0d595 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:29:31 +0100
Subject: [PATCH 12/48] World4You Bugfix 2

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index e1ced163..4c0be782 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if $(echo "$domain" | grep -q "$tld\$"); then
+    if echo "$domain" | grep -q "$tld\$"; then
       break
     fi
   done

From 9474933070bf18c5cfc0a298f3da54790be141af Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sat, 28 Nov 2020 08:50:47 +0100
Subject: [PATCH 13/48] World4You dns root parsing

---
 dnsapi/dns_world4you.sh | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 4c0be782..455418a5 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -5,6 +5,8 @@
 
 WORLD4YOU_API="https://my.world4you.com/en"
 PAKETNR=''
+TLD=''
+RECORD=''
 
 ################ Public functions ################
 
@@ -16,9 +18,6 @@ dns_world4you_add() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
-  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
-
   _login
   if [ "$?" != 0 ]; then
     return 1
@@ -26,8 +25,10 @@ dns_world4you_add() {
 
   export _H1="Cookie: W4YSESSID=$sessid"
   form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
-  _get_paketnr "$tld" "$form"
+  _get_paketnr "$fqdn" "$form"
   paketnr="$PAKETNR"
+  tld="$TLD"
+  record="$RECORD"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -82,8 +83,10 @@ dns_world4you_rm() {
 
   export _H1="Cookie: W4YSESSID=$sessid"
   form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
-  _get_paketnr "$tld" "$form"
+  _get_paketnr "$fqdn" "$form"
   paketnr="$PAKETNR"
+  tld="$TLD"
+  record="$RECORD"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -163,22 +166,25 @@ _login() {
   fi
 }
 
-# Usage _get_paketnr <tld> <form>
+# Usage _get_paketnr <fqdn> <form>
 _get_paketnr() {
-  tld="$1"
+  fqdn="$1"
   form="$2"
 
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if echo "$domain" | grep -q "$tld\$"; then
+    if echo "$fqdn" | grep -q "$domain\$"; then
       break
     fi
+    domain=''
   done
   if [ -z "$domain" ]; then
     return 1
   fi
 
+  TLD="$domain"
+  RECORD=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#TLD} - 1))")
   PAKETNR=$(echo "$form" | _ggrep -B 3 "^\\s*$domain\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
   return 0
 }

From 0ed2659698ac08a175eb50ad1c5c27d69346bd2c Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sat, 28 Nov 2020 17:27:50 +0100
Subject: [PATCH 14/48] World4You using ggrep more often

---
 dnsapi/dns_world4you.sh | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 455418a5..10c1628b 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -56,8 +56,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  success=$(grep '302\|200' <"$HTTP_HEADER")
-  if [ "$success" ]; then
+  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -116,8 +115,7 @@ DeleteDnsRecordForm[_token]=$form_token"
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  success=$(grep '302\|200' <"$HTTP_HEADER")
-  if [ "$success" ]; then
+  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"

From 1987c32761cc8ae20263400ccbe8822c8f9911e3 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 09:34:52 +0100
Subject: [PATCH 15/48] World4You using _egrep_o instead of grep -E

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 10c1628b..bcb01619 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -169,7 +169,7 @@ _get_paketnr() {
   fqdn="$1"
   form="$2"
 
-  domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
+  domains=$(echo "$form" | _egrep_o '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
     if echo "$fqdn" | grep -q "$domain\$"; then

From 9fee0805c41539d8cec2a56a694882b36141432d Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 09:40:35 +0100
Subject: [PATCH 16/48] World4You using /dev/null instead of grep -q

---
 dnsapi/dns_world4you.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index bcb01619..fff8089d 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -56,7 +56,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
+  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -115,7 +115,7 @@ DeleteDnsRecordForm[_token]=$form_token"
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
+  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -172,7 +172,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _egrep_o '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if echo "$fqdn" | grep -q "$domain\$"; then
+    if echo "$fqdn" | grep "$domain\$" >/dev/null; then
       break
     fi
     domain=''

From 2dd8527566fb37431abb84c52d526a7069345bea Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 10:33:46 +0100
Subject: [PATCH 17/48] World4You success on 302 instead of 302 or 200

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index fff8089d..76acacf8 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -56,7 +56,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
+  if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -115,7 +115,7 @@ DeleteDnsRecordForm[_token]=$form_token"
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
+  if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"

From 6c039d2ad080c58d36ea6775bbf2fbffa269a7cb Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 10:43:25 +0100
Subject: [PATCH 18/48] World4You removed _ggrep

---
 dnsapi/dns_world4you.sh | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 76acacf8..573c5ee6 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -183,16 +183,6 @@ _get_paketnr() {
 
   TLD="$domain"
   RECORD=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#TLD} - 1))")
-  PAKETNR=$(echo "$form" | _ggrep -B 3 "^\\s*$domain\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  PAKETNR=$(echo "$form" | _egrep_o "data-textfilter=\" $domain .* [0-9]*" | head -n 1 | _egrep_o "[0-9]*")
   return 0
 }
-
-_ggrep() {
-  if _exists "ggrep"; then
-    ggrep "$@"
-    return $?
-  else
-    grep "$@"
-    return $?
-  fi
-}

From 8ee5726e0cc1b3cf7e106363b958ed22472c8237 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 22 Nov 2020 11:22:54 +0100
Subject: [PATCH 19/48] Added World4You DNS API

---
 dnsapi/dns_world4you.sh | 159 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 159 insertions(+)
 create mode 100644 dnsapi/dns_world4you.sh

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
new file mode 100644
index 00000000..ec5a0e47
--- /dev/null
+++ b/dnsapi/dns_world4you.sh
@@ -0,0 +1,159 @@
+#!/usr/bin/env sh
+
+# World4You - www.world4you.com
+# Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
+
+WORLD4YOU_API="https://my.world4you.com/en"
+
+################ Public functions ################
+
+# Usage: dns_world4you_add <fqdn> <value>
+dns_world4you_add() {
+  fqdn="$1"
+  value="$2"
+  _info "Using world4you"
+  _debug fulldomain "$fqdn"
+  _debug txtvalue "$value"
+
+  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
+
+  _login
+  if [ "$?" != 0 ]; then
+    return 1
+  fi
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
+  if [ -z "$paketnr" ]; then
+    _err "Unable to parse paketnr"
+    return 3
+  fi
+  _debug paketnr "$paketnr"
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  form=$(_get "$WORLD4YOU_API/$paketnr/dns")
+  formiddp=$(echo "$form" | grep 'AddDnsRecordForm\[uniqueFormIdDP\]' | sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
+  formidttl=$(echo "$form" | grep 'AddDnsRecordForm\[uniqueFormIdTTL\]' | sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
+  form_token=$(echo "$form" | grep 'AddDnsRecordForm\[_token\]' | sed 's/^.*name="AddDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
+  if [ -z "$formiddp" ]; then
+    _err "Unable to parse form"
+    return 3
+  fi
+
+  _ORIG_ACME_CURL="$_ACME_CURL"
+  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+
+  body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
+AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
+AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_token"
+  _info "Adding record..."
+  ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/dns" '' POST 'application/x-www-form-urlencoded')
+
+  _ACME_CURL="$_ORIG_ACME_CURL"
+
+  success=$(grep '302\|200' <"$HTTP_HEADER")
+  if [ "$success" ]; then
+    return 0
+  else
+    _err "$(head -n 1 <"$HTTP_HEADER")"
+    return 2
+  fi
+}
+
+# Usage: dns_world4you_rm <fqdn> <value>
+dns_world4you_rm() {
+  fqdn="$1"
+  value="$2"
+  _info "Using world4you"
+  _debug fulldomain "$fqdn"
+  _debug txtvalue "$value"
+
+  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
+
+  _login
+  if [ "$?" != 0 ]; then
+    return 1
+  fi
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  if [ -z "$paketnr" ]; then
+    _err "Unable to parse paketnr"
+    return 3
+  fi
+  _debug paketnr "$paketnr"
+
+  form=$(_get "$WORLD4YOU_API/$paketnr/dns")
+  formiddp=$(echo "$form" | grep 'DeleteDnsRecordForm\[uniqueFormIdDP\]' | sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
+  formidttl=$(echo "$form" | grep 'DeleteDnsRecordForm\[uniqueFormIdTTL\]' | sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
+  form_token=$(echo "$form" | grep 'DeleteDnsRecordForm\[_token\]' | sed 's/^.*name="DeleteDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
+  if [ -z "$formiddp" ]; then
+    _err "Unable to parse form"
+    return 3
+  fi
+
+  recordid=$(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64)
+  _debug recordid "$recordid"
+
+  _ORIG_ACME_CURL="$_ACME_CURL"
+  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+
+  body="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
+DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
+DeleteDnsRecordForm[_token]=$form_token"
+  _info "Removing record..."
+  ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST 'application/x-www-form-urlencoded')
+
+  _ACME_CURL="$_ORIG_ACME_CURL"
+
+  success=$(grep '302\|200' <"$HTTP_HEADER")
+  if [ "$success" ]; then
+    return 0
+  else
+    _err "$(head -n 1 <"$HTTP_HEADER")"
+    return 2
+  fi
+}
+
+################ Private functions ################
+
+# Usage: _login
+_login() {
+  WORLD4YOU_USERNAME="${WORLD4YOU_USERNAME:-$(_readaccountconf_mutable WORLD4YOU_USERNAME)}"
+  WORLD4YOU_PASSWORD="${WORLD4YOU_PASSWORD:-$(_readaccountconf_mutable WORLD4YOU_PASSWORD)}"
+
+  if [ -z "$WORLD4YOU_USERNAME" ] || [ -z "$WORLD4YOU_PASSWORD" ]; then
+    WORLD4YOU_USERNAME=""
+    WORLD4YOU_PASSWORD=""
+    _err "You don't specified world4you username and password yet."
+    _err "Usage: export WORLD4YOU_USERNAME=<name>"
+    _err "Usage: export WORLD4YOU_PASSWORD=<password>"
+    return 2
+  fi
+
+  _saveaccountconf_mutable WORLD4YOU_USERNAME "$WORLD4YOU_USERNAME"
+  _saveaccountconf_mutable WORLD4YOU_PASSWORD "$WORLD4YOU_PASSWORD"
+
+  _info "Logging in..."
+
+  username="$WORLD4YOU_USERNAME"
+  password="$WORLD4YOU_PASSWORD"
+  csrf_token=$(_get "$WORLD4YOU_API/login" | grep '_csrf_token' | sed 's/^.*<input[^>]*value=\"\([^"]*\)\".*$/\1/')
+  sessid=$(grep 'W4YSESSID' <"$HTTP_HEADER" | sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
+
+  export _H1="Cookie: W4YSESSID=$sessid"
+  export _H2="X-Requested-With: XMLHttpRequest"
+  body="_username=$username&_password=$password&_csrf_token=$csrf_token"
+  ret=$(_post "$body" "$WORLD4YOU_API/login" '' POST 'application/x-www-form-urlencoded')
+  unset _H2
+  _debug ret "$ret"
+  if _contains "$ret" "\"success\":true"; then
+    _info "Successfully logged in"
+    sessid=$(grep 'W4YSESSID' <"$HTTP_HEADER" | sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
+  else
+    _err "Unable to log in: $(echo "$ret" | sed 's/^.*"message":"\([^\"]*\)".*$/\1/')"
+    return 1
+  fi
+}

From f3b5d5ab7b7dcebc595ce281f13827f7d051dfbf Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Thu, 26 Nov 2020 13:59:18 +0100
Subject: [PATCH 20/48] World4You using _egrep_o

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index ec5a0e47..b58ea89a 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -15,7 +15,7 @@ dns_world4you_add() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
   record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
 
   _login
@@ -69,7 +69,7 @@ dns_world4you_rm() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | grep -o '[^.]*\.[^.]*$')
+  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
   record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
 
   _login

From 9449501537a84385f9431f411ecb8e0e41c8670a Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 19:34:16 +0100
Subject: [PATCH 21/48] World4You using ggrep in solaris

---
 dnsapi/dns_world4you.sh | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index b58ea89a..db52cda1 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -24,7 +24,7 @@ dns_world4you_add() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -78,7 +78,7 @@ dns_world4you_rm() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | grep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -157,3 +157,13 @@ _login() {
     return 1
   fi
 }
+
+_ggrep() {
+  if _exists "ggrep"; then
+    ggrep $@
+    return $?
+  else
+    grep $@
+    return $?
+  fi
+}

From f9dfd3b3485c03b3fae9e975dec50112fde26e57 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 19:35:53 +0100
Subject: [PATCH 22/48] World4You shellcheck

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index db52cda1..fbc5fe40 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -160,10 +160,10 @@ _login() {
 
 _ggrep() {
   if _exists "ggrep"; then
-    ggrep $@
+    ggrep "$@"
     return $?
   else
-    grep $@
+    grep "$@"
     return $?
   fi
 }

From abe05456f785c222fd06a4062a2533b72f73a058 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:12:11 +0100
Subject: [PATCH 23/48] World4You domain root fix

---
 dnsapi/dns_world4you.sh | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index fbc5fe40..502e8631 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -4,6 +4,7 @@
 # Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
 
 WORLD4YOU_API="https://my.world4you.com/en"
+PAKETNR=''
 
 ################ Public functions ################
 
@@ -24,7 +25,9 @@ dns_world4you_add() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\)<.*$/\1/')
+  form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
+  _get_paketnr "$tld" "$form"
+  paketnr="$PAKETNR"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -78,7 +81,9 @@ dns_world4you_rm() {
   fi
 
   export _H1="Cookie: W4YSESSID=$sessid"
-  paketnr=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht" | _ggrep -B 3 "^\\s*$tld\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
+  _get_paketnr "$tld" "$form"
+  paketnr="$PAKETNR"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -158,6 +163,25 @@ _login() {
   fi
 }
 
+# Usage _get_paketnr <tld> <form>
+_get_paketnr() {
+  tld="$1"
+  form="$2"
+
+  domains=($(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/'))
+  paketnrs=($(echo "$form" | _ggrep -B 3 -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed -n '1~5p' | sed 's/^.*>\([0-9][0-9]*\).*$/\1/'))
+
+  total="${#domains[*]}"
+  for (( i=0; i<=$(( $total - 1 )); i++ )); do
+    domain="${domains[$i]}"
+    if [ $(echo "$domain" | grep "$tld\$") ]; then
+      PAKETNR="${paketnrs[$i]}"
+      return 0
+    fi
+  done
+  return 1
+}
+
 _ggrep() {
   if _exists "ggrep"; then
     ggrep "$@"

From ef9147512b20499ac57442f58d3d1bcfdbd9c9bf Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:22:50 +0100
Subject: [PATCH 24/48] World4You posix shell

---
 dnsapi/dns_world4you.sh | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 502e8631..8e12dd5f 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -168,18 +168,19 @@ _get_paketnr() {
   tld="$1"
   form="$2"
 
-  domains=($(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/'))
-  paketnrs=($(echo "$form" | _ggrep -B 3 -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed -n '1~5p' | sed 's/^.*>\([0-9][0-9]*\).*$/\1/'))
-
-  total="${#domains[*]}"
-  for (( i=0; i<=$(( $total - 1 )); i++ )); do
-    domain="${domains[$i]}"
+  domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
+  domain=''
+  for domain in $domains; do
     if [ $(echo "$domain" | grep "$tld\$") ]; then
-      PAKETNR="${paketnrs[$i]}"
-      return 0
+      break
     fi
   done
-  return 1
+  if [ -z "$domain" ]; then
+    return 1
+  fi
+
+  PAKETNR=$(echo "$form" | _ggrep -B 3 "^\\s*$domain\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  return 0
 }
 
 _ggrep() {

From 895da5cbf07eb333610a9b4acaf39e536ae7a9d9 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:25:29 +0100
Subject: [PATCH 25/48] World4You Shellcheck

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 8e12dd5f..e1585801 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if [ $(echo "$domain" | grep "$tld\$") ]; then
+    if [ "$(echo "$domain" | grep -q "$tld\$")" ]; then
       break
     fi
   done

From 46611857195f9c53286738f44c11ed42a65805cc Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:27:10 +0100
Subject: [PATCH 26/48] World4You grep -q

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index e1585801..2be5a6b9 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if [ "$(echo "$domain" | grep -q "$tld\$")" ]; then
+    if $(echo "$domain" | grep -q "$tld\$"; then
       break
     fi
   done

From 2edc4a79b9ff3c8668220b4d2a80624320c3b0fa Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:28:25 +0100
Subject: [PATCH 27/48] World4You Bugfix

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 2be5a6b9..e1ced163 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if $(echo "$domain" | grep -q "$tld\$"; then
+    if $(echo "$domain" | grep -q "$tld\$"); then
       break
     fi
   done

From 13f6ec04d55b15f0620ee30d4f370c017425715a Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Fri, 27 Nov 2020 22:29:31 +0100
Subject: [PATCH 28/48] World4You Bugfix 2

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index e1ced163..4c0be782 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -171,7 +171,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if $(echo "$domain" | grep -q "$tld\$"); then
+    if echo "$domain" | grep -q "$tld\$"; then
       break
     fi
   done

From 5cfe5e312b15846ed1711b6da35ca5c6f47c11b8 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sat, 28 Nov 2020 08:50:47 +0100
Subject: [PATCH 29/48] World4You dns root parsing

---
 dnsapi/dns_world4you.sh | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 4c0be782..455418a5 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -5,6 +5,8 @@
 
 WORLD4YOU_API="https://my.world4you.com/en"
 PAKETNR=''
+TLD=''
+RECORD=''
 
 ################ Public functions ################
 
@@ -16,9 +18,6 @@ dns_world4you_add() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
-  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
-
   _login
   if [ "$?" != 0 ]; then
     return 1
@@ -26,8 +25,10 @@ dns_world4you_add() {
 
   export _H1="Cookie: W4YSESSID=$sessid"
   form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
-  _get_paketnr "$tld" "$form"
+  _get_paketnr "$fqdn" "$form"
   paketnr="$PAKETNR"
+  tld="$TLD"
+  record="$RECORD"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -82,8 +83,10 @@ dns_world4you_rm() {
 
   export _H1="Cookie: W4YSESSID=$sessid"
   form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
-  _get_paketnr "$tld" "$form"
+  _get_paketnr "$fqdn" "$form"
   paketnr="$PAKETNR"
+  tld="$TLD"
+  record="$RECORD"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -163,22 +166,25 @@ _login() {
   fi
 }
 
-# Usage _get_paketnr <tld> <form>
+# Usage _get_paketnr <fqdn> <form>
 _get_paketnr() {
-  tld="$1"
+  fqdn="$1"
   form="$2"
 
   domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if echo "$domain" | grep -q "$tld\$"; then
+    if echo "$fqdn" | grep -q "$domain\$"; then
       break
     fi
+    domain=''
   done
   if [ -z "$domain" ]; then
     return 1
   fi
 
+  TLD="$domain"
+  RECORD=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#TLD} - 1))")
   PAKETNR=$(echo "$form" | _ggrep -B 3 "^\\s*$domain\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
   return 0
 }

From a0edb8f2ad8bbc193e52c10e052fbdf4541dcf80 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sat, 28 Nov 2020 17:27:50 +0100
Subject: [PATCH 30/48] World4You using ggrep more often

---
 dnsapi/dns_world4you.sh | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 455418a5..10c1628b 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -56,8 +56,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  success=$(grep '302\|200' <"$HTTP_HEADER")
-  if [ "$success" ]; then
+  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -116,8 +115,7 @@ DeleteDnsRecordForm[_token]=$form_token"
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  success=$(grep '302\|200' <"$HTTP_HEADER")
-  if [ "$success" ]; then
+  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"

From 35cab4ee7398edd9547acabeabc6937fec153ccf Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 09:34:52 +0100
Subject: [PATCH 31/48] World4You using _egrep_o instead of grep -E

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 10c1628b..bcb01619 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -169,7 +169,7 @@ _get_paketnr() {
   fqdn="$1"
   form="$2"
 
-  domains=$(echo "$form" | _ggrep -E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
+  domains=$(echo "$form" | _egrep_o '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
     if echo "$fqdn" | grep -q "$domain\$"; then

From 3d79d78134dd6f19be2e7f6f11be06c08450de79 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 09:40:35 +0100
Subject: [PATCH 32/48] World4You using /dev/null instead of grep -q

---
 dnsapi/dns_world4you.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index bcb01619..fff8089d 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -56,7 +56,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
+  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -115,7 +115,7 @@ DeleteDnsRecordForm[_token]=$form_token"
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep -q '302\|200' <"$HTTP_HEADER"; then
+  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -172,7 +172,7 @@ _get_paketnr() {
   domains=$(echo "$form" | _egrep_o '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
-    if echo "$fqdn" | grep -q "$domain\$"; then
+    if echo "$fqdn" | grep "$domain\$" >/dev/null; then
       break
     fi
     domain=''

From faf6c1671739af4ac9414423231da34ed6c6465c Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 10:33:46 +0100
Subject: [PATCH 33/48] World4You success on 302 instead of 302 or 200

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index fff8089d..76acacf8 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -56,7 +56,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
+  if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"
@@ -115,7 +115,7 @@ DeleteDnsRecordForm[_token]=$form_token"
 
   _ACME_CURL="$_ORIG_ACME_CURL"
 
-  if _ggrep '302\|200' >/dev/null <"$HTTP_HEADER"; then
+  if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
     _err "$(head -n 1 <"$HTTP_HEADER")"

From c3d7f2f1708d13eb4d434fc27830a99f268e724a Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 10:43:25 +0100
Subject: [PATCH 34/48] World4You removed _ggrep

---
 dnsapi/dns_world4you.sh | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 76acacf8..573c5ee6 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -183,16 +183,6 @@ _get_paketnr() {
 
   TLD="$domain"
   RECORD=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#TLD} - 1))")
-  PAKETNR=$(echo "$form" | _ggrep -B 3 "^\\s*$domain\$" | head -n 1 | sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
+  PAKETNR=$(echo "$form" | _egrep_o "data-textfilter=\" $domain .* [0-9]*" | head -n 1 | _egrep_o "[0-9]*")
   return 0
 }
-
-_ggrep() {
-  if _exists "ggrep"; then
-    ggrep "$@"
-    return $?
-  else
-    grep "$@"
-    return $?
-  fi
-}

From 0dcf6771e736c6587d3dc064c95ad07059cbf2f6 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 11:51:16 +0100
Subject: [PATCH 35/48] World4you grammar

---
 dnsapi/dns_world4you.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 573c5ee6..87f6885f 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -133,7 +133,7 @@ _login() {
   if [ -z "$WORLD4YOU_USERNAME" ] || [ -z "$WORLD4YOU_PASSWORD" ]; then
     WORLD4YOU_USERNAME=""
     WORLD4YOU_PASSWORD=""
-    _err "You don't specified world4you username and password yet."
+    _err "You didn't specify world4you username and password yet."
     _err "Usage: export WORLD4YOU_USERNAME=<name>"
     _err "Usage: export WORLD4YOU_PASSWORD=<password>"
     return 2

From 1e3bb1f02b674e37d6dd15096782eea2e3cafb0a Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 11:51:59 +0100
Subject: [PATCH 36/48] World4You head_n

---
 dnsapi/dns_world4you.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 87f6885f..3db6db72 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -59,7 +59,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
-    _err "$(head -n 1 <"$HTTP_HEADER")"
+    _err "$(head_n 1 <"$HTTP_HEADER")"
     return 2
   fi
 }
@@ -118,7 +118,7 @@ DeleteDnsRecordForm[_token]=$form_token"
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
-    _err "$(head -n 1 <"$HTTP_HEADER")"
+    _err "$(head_n 1 <"$HTTP_HEADER")"
     return 2
   fi
 }
@@ -183,6 +183,6 @@ _get_paketnr() {
 
   TLD="$domain"
   RECORD=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#TLD} - 1))")
-  PAKETNR=$(echo "$form" | _egrep_o "data-textfilter=\" $domain .* [0-9]*" | head -n 1 | _egrep_o "[0-9]*")
+  PAKETNR=$(echo "$form" | _egrep_o "data-textfilter=\" $domain .* [0-9]*" | head_n 1 | _egrep_o "[0-9]*")
   return 0
 }

From bfccf29ccf9605df86f74a19b6d8156da590e2f1 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 11:55:22 +0100
Subject: [PATCH 37/48] World4You redirect fix

---
 dnsapi/dns_world4you.sh | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 3db6db72..c8ad43c2 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -45,8 +45,8 @@ dns_world4you_add() {
     return 3
   fi
 
-  _ORIG_ACME_CURL="$_ACME_CURL"
-  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+  ACME_HTTP_NO_REDIRECTS=1
+  _resethttp
 
   body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
 AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
@@ -54,7 +54,8 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
   _info "Adding record..."
   ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/dns" '' POST 'application/x-www-form-urlencoded')
 
-  _ACME_CURL="$_ORIG_ACME_CURL"
+  unset ACME_HTTP_NO_REDIRECTS
+  _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
@@ -104,8 +105,8 @@ dns_world4you_rm() {
   recordid=$(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64)
   _debug recordid "$recordid"
 
-  _ORIG_ACME_CURL="$_ACME_CURL"
-  _ACME_CURL=$(echo "$_ACME_CURL" | sed 's/ -L / /')
+  ACME_HTTP_NO_REDIRECTS=1
+  _resethttp
 
   body="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
 DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
@@ -113,7 +114,8 @@ DeleteDnsRecordForm[_token]=$form_token"
   _info "Removing record..."
   ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST 'application/x-www-form-urlencoded')
 
-  _ACME_CURL="$_ORIG_ACME_CURL"
+  unset ACME_HTTP_NO_REDIRECTS
+  _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0

From 5f3e7f02ccb720a6367ce320b7b754842da4d9e6 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 11:55:49 +0100
Subject: [PATCH 38/48] World4You _head_n fix

---
 dnsapi/dns_world4you.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index c8ad43c2..2fcdc114 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -60,7 +60,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
-    _err "$(head_n 1 <"$HTTP_HEADER")"
+    _err "$(_head_n 1 <"$HTTP_HEADER")"
     return 2
   fi
 }
@@ -120,7 +120,7 @@ DeleteDnsRecordForm[_token]=$form_token"
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
     return 0
   else
-    _err "$(head_n 1 <"$HTTP_HEADER")"
+    _err "$(_head_n 1 <"$HTTP_HEADER")"
     return 2
   fi
 }
@@ -185,6 +185,6 @@ _get_paketnr() {
 
   TLD="$domain"
   RECORD=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#TLD} - 1))")
-  PAKETNR=$(echo "$form" | _egrep_o "data-textfilter=\" $domain .* [0-9]*" | head_n 1 | _egrep_o "[0-9]*")
+  PAKETNR=$(echo "$form" | _egrep_o "data-textfilter=\" $domain .* [0-9]*" | _head_n 1 | _egrep_o "[0-9]*")
   return 0
 }

From 342b48105fcd32048cb7a893fc9aa03f6308f0d7 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 12:02:05 +0100
Subject: [PATCH 39/48] World4You fix for no redirects

---
 dnsapi/dns_world4you.sh | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 2fcdc114..0ea969a1 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -45,8 +45,8 @@ dns_world4you_add() {
     return 3
   fi
 
-  ACME_HTTP_NO_REDIRECTS=1
   _resethttp
+  ACME_HTTP_NO_REDIRECTS=1
 
   body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
 AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
@@ -54,7 +54,6 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
   _info "Adding record..."
   ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/dns" '' POST 'application/x-www-form-urlencoded')
 
-  unset ACME_HTTP_NO_REDIRECTS
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
@@ -105,8 +104,8 @@ dns_world4you_rm() {
   recordid=$(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64)
   _debug recordid "$recordid"
 
-  ACME_HTTP_NO_REDIRECTS=1
   _resethttp
+  ACME_HTTP_NO_REDIRECTS=1
 
   body="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
 DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
@@ -114,7 +113,6 @@ DeleteDnsRecordForm[_token]=$form_token"
   _info "Removing record..."
   ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST 'application/x-www-form-urlencoded')
 
-  unset ACME_HTTP_NO_REDIRECTS
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then

From fbcbc10174d325d7bafd7d37a686a8f05cdc37e3 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 12:03:51 +0100
Subject: [PATCH 40/48] World4You Shellcheck

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 0ea969a1..04d40945 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -46,7 +46,7 @@ dns_world4you_add() {
   fi
 
   _resethttp
-  ACME_HTTP_NO_REDIRECTS=1
+  export ACME_HTTP_NO_REDIRECTS=1
 
   body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
 AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
@@ -105,7 +105,7 @@ dns_world4you_rm() {
   _debug recordid "$recordid"
 
   _resethttp
-  ACME_HTTP_NO_REDIRECTS=1
+  export ACME_HTTP_NO_REDIRECTS=1
 
   body="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
 DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\

From 48942de75e82210135e2b6c7c8bf8c57b9e698d5 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 13:59:33 +0100
Subject: [PATCH 41/48] World4You cleaning

---
 dnsapi/dns_world4you.sh | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 04d40945..bed8db81 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -47,13 +47,11 @@ dns_world4you_add() {
 
   _resethttp
   export ACME_HTTP_NO_REDIRECTS=1
-
   body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
 AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
 AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_token"
   _info "Adding record..."
   ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/dns" '' POST 'application/x-www-form-urlencoded')
-
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
@@ -72,9 +70,6 @@ dns_world4you_rm() {
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
-  tld=$(echo "$fqdn" | _egrep_o '[^.]*\.[^.]*$')
-  record=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#tld} - 1))")
-
   _login
   if [ "$?" != 0 ]; then
     return 1
@@ -106,13 +101,11 @@ dns_world4you_rm() {
 
   _resethttp
   export ACME_HTTP_NO_REDIRECTS=1
-
   body="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
 DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
 DeleteDnsRecordForm[_token]=$form_token"
   _info "Removing record..."
   ret=$(_post "$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST 'application/x-www-form-urlencoded')
-
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then

From b7e6d98647b0006249973902980ee0bb20f82c5b Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 14:38:04 +0100
Subject: [PATCH 42/48] World4You grep fix

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index bed8db81..8254663a 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -162,7 +162,7 @@ _get_paketnr() {
   fqdn="$1"
   form="$2"
 
-  domains=$(echo "$form" | _egrep_o '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
+  domains=$(echo "$form" | grep '^ *[A-Za-z0-9_\.-]*\.[A-Za-z0-9_-]*$' | sed 's/^\s*\(\S*\)$/\1/')
   domain=''
   for domain in $domains; do
     if echo "$fqdn" | grep "$domain\$" >/dev/null; then
@@ -176,6 +176,6 @@ _get_paketnr() {
 
   TLD="$domain"
   RECORD=$(echo "$fqdn" | cut -c"1-$((${#fqdn} - ${#TLD} - 1))")
-  PAKETNR=$(echo "$form" | _egrep_o "data-textfilter=\" $domain .* [0-9]*" | _head_n 1 | _egrep_o "[0-9]*")
+  PAKETNR=$(echo "$form" | grep "data-textfilter=\" $domain " | _head_n 1 | sed 's/^.* \([0-9]*\) .*$/\1/')
   return 0
 }

From 3c309df6dd4d8975165d8e8555d4e5b938ea3c78 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 14:42:55 +0100
Subject: [PATCH 43/48] World4You shellcheck cleaning

---
 dnsapi/dns_world4you.sh | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 8254663a..64491d08 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -27,8 +27,6 @@ dns_world4you_add() {
   form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
   _get_paketnr "$fqdn" "$form"
   paketnr="$PAKETNR"
-  tld="$TLD"
-  record="$RECORD"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3
@@ -47,7 +45,7 @@ dns_world4you_add() {
 
   _resethttp
   export ACME_HTTP_NO_REDIRECTS=1
-  body="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
+  body="AddDnsRecordForm[name]=$RECORD&AddDnsRecordForm[dnsType][type]=TXT&\
 AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
 AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_token"
   _info "Adding record..."
@@ -79,8 +77,6 @@ dns_world4you_rm() {
   form=$(_get "$WORLD4YOU_API/dashboard/paketuebersicht")
   _get_paketnr "$fqdn" "$form"
   paketnr="$PAKETNR"
-  tld="$TLD"
-  record="$RECORD"
   if [ -z "$paketnr" ]; then
     _err "Unable to parse paketnr"
     return 3

From f665c73bb19d256bebfeed129813eb021e816ded Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 15:03:54 +0100
Subject: [PATCH 44/48] World4You fixed return value

---
 dnsapi/dns_world4you.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 64491d08..a89b029b 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -56,7 +56,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
     return 0
   else
     _err "$(_head_n 1 <"$HTTP_HEADER")"
-    return 2
+    return 1
   fi
 }
 
@@ -108,7 +108,7 @@ DeleteDnsRecordForm[_token]=$form_token"
     return 0
   else
     _err "$(_head_n 1 <"$HTTP_HEADER")"
-    return 2
+    return 1
   fi
 }
 
@@ -125,7 +125,7 @@ _login() {
     _err "You didn't specify world4you username and password yet."
     _err "Usage: export WORLD4YOU_USERNAME=<name>"
     _err "Usage: export WORLD4YOU_PASSWORD=<password>"
-    return 2
+    return 1
   fi
 
   _saveaccountconf_mutable WORLD4YOU_USERNAME "$WORLD4YOU_USERNAME"

From 40631f465eee608f4121177721c705157f29d84b Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Sun, 29 Nov 2020 15:22:41 +0100
Subject: [PATCH 45/48] World4You updated info strings

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index a89b029b..54cc1511 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -14,7 +14,7 @@ RECORD=''
 dns_world4you_add() {
   fqdn="$1"
   value="$2"
-  _info "Using world4you"
+  _info "Using world4you to add record"
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 
@@ -64,7 +64,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
 dns_world4you_rm() {
   fqdn="$1"
   value="$2"
-  _info "Using world4you"
+  _info "Using world4you to remove record"
   _debug fulldomain "$fqdn"
   _debug txtvalue "$value"
 

From da839aae668227aa8d27e3a23ce2acfe5146de79 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Mon, 30 Nov 2020 17:57:25 +0100
Subject: [PATCH 46/48] World4You check response message

---
 dnsapi/dns_world4you.sh | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 54cc1511..b35df75b 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -53,7 +53,13 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
-    return 0
+    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/^.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1\n/')
+    if _contains "$msg" "successfully"; then
+      return 0
+    else
+      _err "Unable to add record: $msg"
+      return 1
+    fi
   else
     _err "$(_head_n 1 <"$HTTP_HEADER")"
     return 1
@@ -105,7 +111,13 @@ DeleteDnsRecordForm[_token]=$form_token"
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
-    return 0
+    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/^.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1\n/')
+    if _contains "$msg" "successfully"; then
+      return 0
+    else
+      _err "Unable to remove record: $msg"
+      return 1
+    fi
   else
     _err "$(_head_n 1 <"$HTTP_HEADER")"
     return 1

From f38317d01f6805e5256a811e076f1c45c990a2e8 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Mon, 30 Nov 2020 19:56:48 +0100
Subject: [PATCH 47/48] World4You Mac debug

---
 dnsapi/dns_world4you.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index b35df75b..8b7f2eed 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -53,7 +53,7 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
-    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/^.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1\n/')
+    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1/')
     if _contains "$msg" "successfully"; then
       return 0
     else
@@ -111,7 +111,7 @@ DeleteDnsRecordForm[_token]=$form_token"
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
-    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/^.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1\n/')
+    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1/')
     if _contains "$msg" "successfully"; then
       return 0
     else

From be43cebf7de68575dcf96f7bdb609b53d9dfa5dc Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@gmail.com>
Date: Mon, 30 Nov 2020 20:01:43 +0100
Subject: [PATCH 48/48] World4You Mac fix

---
 dnsapi/dns_world4you.sh | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/dnsapi/dns_world4you.sh b/dnsapi/dns_world4you.sh
index 8b7f2eed..24b8dd68 100644
--- a/dnsapi/dns_world4you.sh
+++ b/dnsapi/dns_world4you.sh
@@ -53,10 +53,11 @@ AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_toke
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
-    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1/')
-    if _contains "$msg" "successfully"; then
+    res=$(_get "$WORLD4YOU_API/$paketnr/dns")
+    if _contains "$res" "successfully"; then
       return 0
     else
+      msg=$(echo "$res" | tr '\n' '\t' | sed 's/.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1/')
       _err "Unable to add record: $msg"
       return 1
     fi
@@ -111,10 +112,11 @@ DeleteDnsRecordForm[_token]=$form_token"
   _resethttp
 
   if grep '302' >/dev/null <"$HTTP_HEADER"; then
-    msg=$(_get "$WORLD4YOU_API/$paketnr/dns" | tr '\n' '\t' | sed 's/.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1/')
-    if _contains "$msg" "successfully"; then
+    res=$(_get "$WORLD4YOU_API/$paketnr/dns")
+    if _contains "$res" "successfully"; then
       return 0
     else
+      msg=$(echo "$res" | tr '\n' '\t' | sed 's/.*<h3 class="mb-5">[^\t]*\t *\([^\t]*\)\t.*/\1/')
       _err "Unable to remove record: $msg"
       return 1
     fi