Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
00f55ea0
Unverified
Commit
00f55ea0
authored
Dec 01, 2020
by
neil
Committed by
GitHub
Dec 01, 2020
Browse files
Merge pull request #3261 from NerLOR/master
Added World4You DNS API
parents
be067466
be43cebf
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_world4you.sh
0 → 100644
View file @
00f55ea0
#!/usr/bin/env sh
# World4You - www.world4you.com
# Lorenz Stechauner, 2020 - https://www.github.com/NerLOR
WORLD4YOU_API
=
"https://my.world4you.com/en"
PAKETNR
=
''
TLD
=
''
RECORD
=
''
################ Public functions ################
# Usage: dns_world4you_add <fqdn> <value>
dns_world4you_add
()
{
fqdn
=
"
$1
"
value
=
"
$2
"
_info
"Using world4you to add record"
_debug fulldomain
"
$fqdn
"
_debug txtvalue
"
$value
"
_login
if
[
"
$?
"
!=
0
]
;
then
return
1
fi
export
_H1
=
"Cookie: W4YSESSID=
$sessid
"
form
=
$(
_get
"
$WORLD4YOU_API
/dashboard/paketuebersicht"
)
_get_paketnr
"
$fqdn
"
"
$form
"
paketnr
=
"
$PAKETNR
"
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
_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
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
else
_err
"
$(
_head_n 1 <
"
$HTTP_HEADER
"
)
"
return
1
fi
}
# Usage: dns_world4you_rm <fqdn> <value>
dns_world4you_rm
()
{
fqdn
=
"
$1
"
value
=
"
$2
"
_info
"Using world4you to remove record"
_debug fulldomain
"
$fqdn
"
_debug txtvalue
"
$value
"
_login
if
[
"
$?
"
!=
0
]
;
then
return
1
fi
export
_H1
=
"Cookie: W4YSESSID=
$sessid
"
form
=
$(
_get
"
$WORLD4YOU_API
/dashboard/paketuebersicht"
)
_get_paketnr
"
$fqdn
"
"
$form
"
paketnr
=
"
$PAKETNR
"
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
"
_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
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
else
_err
"
$(
_head_n 1 <
"
$HTTP_HEADER
"
)
"
return
1
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 didn't specify world4you username and password yet."
_err
"Usage: export WORLD4YOU_USERNAME=<name>"
_err
"Usage: export WORLD4YOU_PASSWORD=<password>"
return
1
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
}
# Usage _get_paketnr <fqdn> <form>
_get_paketnr
()
{
fqdn
=
"
$1
"
form
=
"
$2
"
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
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
"
|
grep
"data-textfilter=
\"
$domain
"
| _head_n 1 |
sed
's/^.* \([0-9]*\) .*$/\1/'
)
return
0
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment