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
You need to sign in or sign up before continuing.
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