3 # World4You - www.world4you.com
4 # Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
6 WORLD4YOU_API
="https://my.world4you.com/en"
11 ################ Public functions ################
13 # Usage: dns_world4you_add <fqdn> <value>
15 fqdn
=$
(echo "$1" | _lower_case
)
17 _info
"Using world4you to add record"
18 _debug fulldomain
"$fqdn"
19 _debug txtvalue
"$value"
22 if [ "$?" != 0 ]; then
26 export _H1
="Cookie: W4YSESSID=$sessid"
27 form
=$
(_get
"$WORLD4YOU_API/")
28 _get_paketnr
"$fqdn" "$form"
30 if [ -z "$paketnr" ]; then
31 _err
"Unable to parse paketnr"
34 _debug paketnr
"$paketnr"
36 export _H1
="Cookie: W4YSESSID=$sessid"
37 form
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
38 formiddp
=$
(echo "$form" |
grep 'AddDnsRecordForm\[uniqueFormIdDP\]' |
sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
39 form_token
=$
(echo "$form" |
grep 'AddDnsRecordForm\[_token\]' |
sed 's/^.*name="AddDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
40 if [ -z "$formiddp" ]; then
41 _err
"Unable to parse form"
46 export ACME_HTTP_NO_REDIRECTS
=1
47 body
="AddDnsRecordForm[name]=$RECORD&AddDnsRecordForm[dnsType][type]=TXT&AddDnsRecordForm[value]=$value&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&AddDnsRecordForm[_token]=$form_token"
48 _info
"Adding record..."
49 ret
=$
(_post
"$body" "$WORLD4YOU_API/$paketnr/dns" '' POST
'application/x-www-form-urlencoded')
52 if _contains
"$(_head_n 1 <"$HTTP_HEADER")" '302'; then
53 res
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
54 if _contains
"$res" "successfully"; then
57 msg
=$
(echo "$res" |
grep -A 15 'data-type="danger"' |
grep "<h3[^>]*>[^<]" |
sed 's/<[^>]*>//g' |
sed 's/^\s*//g')
58 if [ "$msg" = '' ]; then
59 _err
"Unable to add record: Unknown error"
60 echo "$ret" >'error-01.html'
61 echo "$res" >'error-02.html'
62 _err
"View error-01.html and error-02.html for debugging"
64 _err
"Unable to add record: my.world4you.com: $msg"
69 msg
=$
(echo "$ret" |
grep '"form-error-message"' |
sed 's/^.*<div class="form-error-message">\([^<]*\)<\/div>.*$/\1/')
70 _err
"Unable to add record: my.world4you.com: $msg"
75 # Usage: dns_world4you_rm <fqdn> <value>
77 fqdn
=$
(echo "$1" | _lower_case
)
79 _info
"Using world4you to remove record"
80 _debug fulldomain
"$fqdn"
81 _debug txtvalue
"$value"
84 if [ "$?" != 0 ]; then
88 export _H1
="Cookie: W4YSESSID=$sessid"
89 form
=$
(_get
"$WORLD4YOU_API/")
90 _get_paketnr
"$fqdn" "$form"
92 if [ -z "$paketnr" ]; then
93 _err
"Unable to parse paketnr"
96 _debug paketnr
"$paketnr"
98 form
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
99 formiddp
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[uniqueFormIdDP\]' |
sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
100 form_token
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[_token\]' |
sed 's/^.*name="DeleteDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
101 if [ -z "$formiddp" ]; then
102 _err
"Unable to parse form"
106 recordid
=$
(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64
)
107 _debug recordid
"$recordid"
110 export ACME_HTTP_NO_REDIRECTS
=1
111 body
="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[_token]=$form_token"
112 _info
"Removing record..."
113 ret
=$
(_post
"$body" "$WORLD4YOU_API/$paketnr/dns/record/delete" '' POST
'application/x-www-form-urlencoded')
116 if _contains
"$(_head_n 1 <"$HTTP_HEADER")" '302'; then
117 res
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
118 if _contains
"$res" "successfully"; then
121 msg
=$
(echo "$res" |
grep -A 15 'data-type="danger"' |
grep "<h3[^>]*>[^<]" |
sed 's/<[^>]*>//g' |
sed 's/^\s*//g')
122 if [ "$msg" = '' ]; then
123 _err
"Unable to remove record: Unknown error"
124 echo "$ret" >'error-01.html'
125 echo "$res" >'error-02.html'
126 _err
"View error-01.html and error-02.html for debugging"
128 _err
"Unable to remove record: my.world4you.com: $msg"
133 msg
=$
(echo "$ret" |
grep "form-error-message" |
sed 's/^.*<div class="form-error-message">\([^<]*\)<\/div>.*$/\1/')
134 _err
"Unable to remove record: my.world4you.com: $msg"
139 ################ Private functions ################
143 WORLD4YOU_USERNAME
="${WORLD4YOU_USERNAME:-$(_readaccountconf_mutable WORLD4YOU_USERNAME)}"
144 WORLD4YOU_PASSWORD
="${WORLD4YOU_PASSWORD:-$(_readaccountconf_mutable WORLD4YOU_PASSWORD)}"
146 if [ -z "$WORLD4YOU_USERNAME" ] ||
[ -z "$WORLD4YOU_PASSWORD" ]; then
147 WORLD4YOU_USERNAME
=""
148 WORLD4YOU_PASSWORD
=""
149 _err
"You didn't specify world4you username and password yet."
150 _err
"Usage: export WORLD4YOU_USERNAME=<name>"
151 _err
"Usage: export WORLD4YOU_PASSWORD=<password>"
155 _saveaccountconf_mutable WORLD4YOU_USERNAME
"$WORLD4YOU_USERNAME"
156 _saveaccountconf_mutable WORLD4YOU_PASSWORD
"$WORLD4YOU_PASSWORD"
159 export ACME_HTTP_NO_REDIRECTS
=1
160 page
=$
(_get
"$WORLD4YOU_API/login")
163 if _contains
"$(_head_n 1 <"$HTTP_HEADER")" '302'; then
164 _info
"Already logged in"
169 _info
"Logging in..."
171 username
="$WORLD4YOU_USERNAME"
172 password
="$WORLD4YOU_PASSWORD"
173 csrf_token
=$
(echo "$page" |
grep '_csrf_token' |
sed 's/^.*<input[^>]*value=\"\([^"]*\)\".*$/\1/')
176 export _H1
="Cookie: W4YSESSID=$sessid"
177 export _H2
="X-Requested-With: XMLHttpRequest"
178 body
="_username=$username&_password=$password&_csrf_token=$csrf_token"
179 ret
=$
(_post
"$body" "$WORLD4YOU_API/login" '' POST
'application/x-www-form-urlencoded')
183 if _contains
"$ret" "\"success\":true"; then
184 _info
"Successfully logged in"
187 msg
=$
(echo "$ret" |
sed 's/^.*"message":"\([^\"]*\)".*$/\1/')
188 _err
"Unable to log in: my.world4you.com: $msg"
193 # Usage: _get_paketnr <fqdn> <form>
198 domains
=$
(echo "$form" |
grep '<ul class="nav header-paket-list">' |
sed 's/<li/\n<li/g' |
sed 's/<[^>]*>/ /g' |
sed 's/^.*>\([^>]*\)$/\1/')
200 for domain
in $domains; do
201 if _contains
"$fqdn" "$domain\$"; then
206 if [ -z "$domain" ]; then
211 _debug domain
"$domain"
212 RECORD
=$
(echo "$fqdn" | cut
-c"1-$((${#fqdn} - ${#TLD} - 1))")
213 PAKETNR
=$
(echo "$domains" |
grep "$domain" |
sed 's/^[^,]*, *\([0-9]*\).*$/\1/')
217 # Usage: _parse_sessid
219 sessid
=$
(grep 'W4YSESSID' <"$HTTP_HEADER" | _tail_n
1 |
sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')