3 # World4You - www.world4you.com
4 # Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
6 WORLD4YOU_API
="https://my.world4you.com/en"
9 ################ Public functions ################
11 # Usage: dns_world4you_add <fqdn> <value>
15 _info
"Using world4you"
16 _debug fulldomain
"$fqdn"
17 _debug txtvalue
"$value"
19 tld
=$
(echo "$fqdn" | _egrep_o
'[^.]*\.[^.]*$')
20 record
=$
(echo "$fqdn" | cut
-c"1-$((${#fqdn} - ${#tld} - 1))")
23 if [ "$?" != 0 ]; then
27 export _H1
="Cookie: W4YSESSID=$sessid"
28 form
=$
(_get
"$WORLD4YOU_API/dashboard/paketuebersicht")
29 _get_paketnr
"$tld" "$form"
31 if [ -z "$paketnr" ]; then
32 _err
"Unable to parse paketnr"
35 _debug paketnr
"$paketnr"
37 export _H1
="Cookie: W4YSESSID=$sessid"
38 form
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
39 formiddp
=$
(echo "$form" |
grep 'AddDnsRecordForm\[uniqueFormIdDP\]' |
sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
40 formidttl
=$
(echo "$form" |
grep 'AddDnsRecordForm\[uniqueFormIdTTL\]' |
sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
41 form_token
=$
(echo "$form" |
grep 'AddDnsRecordForm\[_token\]' |
sed 's/^.*name="AddDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
42 if [ -z "$formiddp" ]; then
43 _err
"Unable to parse form"
47 _ORIG_ACME_CURL
="$_ACME_CURL"
48 _ACME_CURL
=$
(echo "$_ACME_CURL" |
sed 's/ -L / /')
50 body
="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
51 AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
52 AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_token"
53 _info
"Adding record..."
54 ret
=$
(_post
"$body" "$WORLD4YOU_API/$paketnr/dns" '' POST
'application/x-www-form-urlencoded')
56 _ACME_CURL
="$_ORIG_ACME_CURL"
58 success
=$
(grep '302\|200' <"$HTTP_HEADER")
59 if [ "$success" ]; then
62 _err
"$(head -n 1 <"$HTTP_HEADER")"
67 # Usage: dns_world4you_rm <fqdn> <value>
71 _info
"Using world4you"
72 _debug fulldomain
"$fqdn"
73 _debug txtvalue
"$value"
75 tld
=$
(echo "$fqdn" | _egrep_o
'[^.]*\.[^.]*$')
76 record
=$
(echo "$fqdn" | cut
-c"1-$((${#fqdn} - ${#tld} - 1))")
79 if [ "$?" != 0 ]; then
83 export _H1
="Cookie: W4YSESSID=$sessid"
84 form
=$
(_get
"$WORLD4YOU_API/dashboard/paketuebersicht")
85 _get_paketnr
"$tld" "$form"
87 if [ -z "$paketnr" ]; then
88 _err
"Unable to parse paketnr"
91 _debug paketnr
"$paketnr"
93 form
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
94 formiddp
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[uniqueFormIdDP\]' |
sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
95 formidttl
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[uniqueFormIdTTL\]' |
sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
96 form_token
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[_token\]' |
sed 's/^.*name="DeleteDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
97 if [ -z "$formiddp" ]; then
98 _err
"Unable to parse form"
102 recordid
=$
(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64
)
103 _debug recordid
"$recordid"
105 _ORIG_ACME_CURL
="$_ACME_CURL"
106 _ACME_CURL
=$
(echo "$_ACME_CURL" |
sed 's/ -L / /')
108 body
="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
109 DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
110 DeleteDnsRecordForm[_token]=$form_token"
111 _info
"Removing record..."
112 ret
=$
(_post
"$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST
'application/x-www-form-urlencoded')
114 _ACME_CURL
="$_ORIG_ACME_CURL"
116 success
=$
(grep '302\|200' <"$HTTP_HEADER")
117 if [ "$success" ]; then
120 _err
"$(head -n 1 <"$HTTP_HEADER")"
125 ################ Private functions ################
129 WORLD4YOU_USERNAME
="${WORLD4YOU_USERNAME:-$(_readaccountconf_mutable WORLD4YOU_USERNAME)}"
130 WORLD4YOU_PASSWORD
="${WORLD4YOU_PASSWORD:-$(_readaccountconf_mutable WORLD4YOU_PASSWORD)}"
132 if [ -z "$WORLD4YOU_USERNAME" ] ||
[ -z "$WORLD4YOU_PASSWORD" ]; then
133 WORLD4YOU_USERNAME
=""
134 WORLD4YOU_PASSWORD
=""
135 _err
"You don't specified world4you username and password yet."
136 _err
"Usage: export WORLD4YOU_USERNAME=<name>"
137 _err
"Usage: export WORLD4YOU_PASSWORD=<password>"
141 _saveaccountconf_mutable WORLD4YOU_USERNAME
"$WORLD4YOU_USERNAME"
142 _saveaccountconf_mutable WORLD4YOU_PASSWORD
"$WORLD4YOU_PASSWORD"
144 _info
"Logging in..."
146 username
="$WORLD4YOU_USERNAME"
147 password
="$WORLD4YOU_PASSWORD"
148 csrf_token
=$
(_get
"$WORLD4YOU_API/login" |
grep '_csrf_token' |
sed 's/^.*<input[^>]*value=\"\([^"]*\)\".*$/\1/')
149 sessid
=$
(grep 'W4YSESSID' <"$HTTP_HEADER" |
sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
151 export _H1
="Cookie: W4YSESSID=$sessid"
152 export _H2
="X-Requested-With: XMLHttpRequest"
153 body
="_username=$username&_password=$password&_csrf_token=$csrf_token"
154 ret
=$
(_post
"$body" "$WORLD4YOU_API/login" '' POST
'application/x-www-form-urlencoded')
157 if _contains
"$ret" "\"success\":true"; then
158 _info
"Successfully logged in"
159 sessid
=$
(grep 'W4YSESSID' <"$HTTP_HEADER" |
sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
161 _err
"Unable to log in: $(echo "$ret" | sed 's/^.*"message
":"\
([^
\"]*\
)".*$/\1/')"
166 # Usage _get_paketnr <tld> <form>
171 domains
=$
(echo "$form" | _ggrep
-E '^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' |
sed 's/^\s*\(\S*\)$/\1/')
173 for domain
in $domains; do
174 if $
(echo "$domain" |
grep -q "$tld\$"; then
178 if [ -z "$domain" ]; then
182 PAKETNR
=$
(echo "$form" | _ggrep
-B 3 "^\\s*$domain\$" |
head -n 1 |
sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
187 if _exists
"ggrep"; then