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>
17 _info
"Using world4you"
18 _debug fulldomain
"$fqdn"
19 _debug txtvalue
"$value"
22 if [ "$?" != 0 ]; then
26 export _H1
="Cookie: W4YSESSID=$sessid"
27 form
=$
(_get
"$WORLD4YOU_API/dashboard/paketuebersicht")
28 _get_paketnr
"$fqdn" "$form"
32 if [ -z "$paketnr" ]; then
33 _err
"Unable to parse paketnr"
36 _debug paketnr
"$paketnr"
38 export _H1
="Cookie: W4YSESSID=$sessid"
39 form
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
40 formiddp
=$
(echo "$form" |
grep 'AddDnsRecordForm\[uniqueFormIdDP\]' |
sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
41 formidttl
=$
(echo "$form" |
grep 'AddDnsRecordForm\[uniqueFormIdTTL\]' |
sed 's/^.*name="AddDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
42 form_token
=$
(echo "$form" |
grep 'AddDnsRecordForm\[_token\]' |
sed 's/^.*name="AddDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
43 if [ -z "$formiddp" ]; then
44 _err
"Unable to parse form"
48 _ORIG_ACME_CURL
="$_ACME_CURL"
49 _ACME_CURL
=$
(echo "$_ACME_CURL" |
sed 's/ -L / /')
51 body
="AddDnsRecordForm[name]=$record&AddDnsRecordForm[dnsType][type]=TXT&\
52 AddDnsRecordForm[value]=$value&AddDnsRecordForm[aktivPaket]=$paketnr&AddDnsRecordForm[uniqueFormIdDP]=$formiddp&\
53 AddDnsRecordForm[uniqueFormIdTTL]=$formidttl&AddDnsRecordForm[_token]=$form_token"
54 _info
"Adding record..."
55 ret
=$
(_post
"$body" "$WORLD4YOU_API/$paketnr/dns" '' POST
'application/x-www-form-urlencoded')
57 _ACME_CURL
="$_ORIG_ACME_CURL"
59 if _ggrep
-q '302\|200' <"$HTTP_HEADER"; 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
"$fqdn" "$form"
89 if [ -z "$paketnr" ]; then
90 _err
"Unable to parse paketnr"
93 _debug paketnr
"$paketnr"
95 form
=$
(_get
"$WORLD4YOU_API/$paketnr/dns")
96 formiddp
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[uniqueFormIdDP\]' |
sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdDP\]" value="\([^"]*\)".*$/\1/')
97 formidttl
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[uniqueFormIdTTL\]' |
sed 's/^.*name="DeleteDnsRecordForm\[uniqueFormIdTTL\]" value="\([^"]*\)".*$/\1/')
98 form_token
=$
(echo "$form" |
grep 'DeleteDnsRecordForm\[_token\]' |
sed 's/^.*name="DeleteDnsRecordForm\[_token\]" value="\([^"]*\)".*$/\1/')
99 if [ -z "$formiddp" ]; then
100 _err
"Unable to parse form"
104 recordid
=$
(printf "TXT:%s.:\"%s\"" "$fqdn" "$value" | _base64
)
105 _debug recordid
"$recordid"
107 _ORIG_ACME_CURL
="$_ACME_CURL"
108 _ACME_CURL
=$
(echo "$_ACME_CURL" |
sed 's/ -L / /')
110 body
="DeleteDnsRecordForm[recordId]=$recordid&DeleteDnsRecordForm[aktivPaket]=$paketnr&\
111 DeleteDnsRecordForm[uniqueFormIdDP]=$formiddp&DeleteDnsRecordForm[uniqueFormIdTTL]=$formidttl&\
112 DeleteDnsRecordForm[_token]=$form_token"
113 _info
"Removing record..."
114 ret
=$
(_post
"$body" "$WORLD4YOU_API/$paketnr/deleteRecord" '' POST
'application/x-www-form-urlencoded')
116 _ACME_CURL
="$_ORIG_ACME_CURL"
118 if _ggrep
-q '302\|200' <"$HTTP_HEADER"; then
121 _err
"$(head -n 1 <"$HTTP_HEADER")"
126 ################ Private functions ################
130 WORLD4YOU_USERNAME
="${WORLD4YOU_USERNAME:-$(_readaccountconf_mutable WORLD4YOU_USERNAME)}"
131 WORLD4YOU_PASSWORD
="${WORLD4YOU_PASSWORD:-$(_readaccountconf_mutable WORLD4YOU_PASSWORD)}"
133 if [ -z "$WORLD4YOU_USERNAME" ] ||
[ -z "$WORLD4YOU_PASSWORD" ]; then
134 WORLD4YOU_USERNAME
=""
135 WORLD4YOU_PASSWORD
=""
136 _err
"You don't specified world4you username and password yet."
137 _err
"Usage: export WORLD4YOU_USERNAME=<name>"
138 _err
"Usage: export WORLD4YOU_PASSWORD=<password>"
142 _saveaccountconf_mutable WORLD4YOU_USERNAME
"$WORLD4YOU_USERNAME"
143 _saveaccountconf_mutable WORLD4YOU_PASSWORD
"$WORLD4YOU_PASSWORD"
145 _info
"Logging in..."
147 username
="$WORLD4YOU_USERNAME"
148 password
="$WORLD4YOU_PASSWORD"
149 csrf_token
=$
(_get
"$WORLD4YOU_API/login" |
grep '_csrf_token' |
sed 's/^.*<input[^>]*value=\"\([^"]*\)\".*$/\1/')
150 sessid
=$
(grep 'W4YSESSID' <"$HTTP_HEADER" |
sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
152 export _H1
="Cookie: W4YSESSID=$sessid"
153 export _H2
="X-Requested-With: XMLHttpRequest"
154 body
="_username=$username&_password=$password&_csrf_token=$csrf_token"
155 ret
=$
(_post
"$body" "$WORLD4YOU_API/login" '' POST
'application/x-www-form-urlencoded')
158 if _contains
"$ret" "\"success\":true"; then
159 _info
"Successfully logged in"
160 sessid
=$
(grep 'W4YSESSID' <"$HTTP_HEADER" |
sed 's/^.*W4YSESSID=\([^;]*\);.*$/\1/')
162 _err
"Unable to log in: $(echo "$ret" | sed 's/^.*"message
":"\
([^
\"]*\
)".*$/\1/')"
167 # Usage _get_paketnr <fqdn> <form>
172 domains
=$
(echo "$form" | _egrep_o
'^\s*([A-Za-z0-9_-]+\.)+[A-Za-z0-9_-]*$' |
sed 's/^\s*\(\S*\)$/\1/')
174 for domain
in $domains; do
175 if echo "$fqdn" |
grep -q "$domain\$"; then
180 if [ -z "$domain" ]; then
185 RECORD
=$
(echo "$fqdn" | cut
-c"1-$((${#fqdn} - ${#TLD} - 1))")
186 PAKETNR
=$
(echo "$form" | _ggrep
-B 3 "^\\s*$domain\$" |
head -n 1 |
sed 's/^.*>\([0-9][0-9]*\).*$/\1/')
191 if _exists
"ggrep"; then