Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
4285d81c
Commit
4285d81c
authored
Jul 23, 2017
by
Ondrej Simek
Browse files
Get rid of curl.
parent
7d64e141
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_he.sh
View file @
4285d81c
#!/usr/bin/env sh
#!/usr/bin/env sh
# TODO Somehow use _get instead of curl - not sure how to support
# cookies though...
########################################################################
########################################################################
# Hurricane Electric hook script for acme.sh
# Hurricane Electric hook script for acme.sh
#
#
...
@@ -23,7 +20,12 @@ dns_he_add() {
...
@@ -23,7 +20,12 @@ dns_he_add() {
_txt_value
=
$2
_txt_value
=
$2
_info
"Using DNS-01 Hurricane Electric hook"
_info
"Using DNS-01 Hurricane Electric hook"
_authenticate
||
return
1
if
[
-z
"
$HE_Username
"
]
&&
[
-z
"
$HE_Password
"
]
;
then
_err
\
'No auth details provided. Please set user credentials using the \
\$HE_Username and \$HE_Password envoronment variables.'
return
1
fi
_saveaccountconf HE_Username
"
$HE_Username
"
_saveaccountconf HE_Username
"
$HE_Username
"
_saveaccountconf HE_Password
"
$HE_Password
"
_saveaccountconf HE_Password
"
$HE_Password
"
...
@@ -31,20 +33,20 @@ dns_he_add() {
...
@@ -31,20 +33,20 @@ dns_he_add() {
_find_zone
$_full_domain
||
return
1
_find_zone
$_full_domain
||
return
1
_debug
"Zone id
\"
$_zone_id
\"
will be used."
_debug
"Zone id
\"
$_zone_id
\"
will be used."
curl
-L
--silent
--show-error
--cookie
"
$_he_cookie
"
\
body
=
"email=
${
HE_Username
}
&pass=
${
HE_Password
}
"
--form
"
account="
\
body
=
"
$body
&
account="
--form
"menu=edit_zone"
\
body
=
"
$body
&account="
--form
"Type=TXT"
\
body
=
"
$body
&menu=edit_zone"
--form
"hosted_dns_zoneid=
$_zone_id
"
\
body
=
"
$body
&Type=TXT"
--form
"hosted_dns_recordid="
\
body
=
"
$body
&hosted_dns_zoneid=
$_zone_id
"
--form
"hosted_dns_editzone=1"
\
body
=
"
$body
&hosted_dns_recordid="
--form
"Priority="
\
body
=
"
$body
&hosted_dns_editzone=1"
--form
"Name=
$_full_domain
"
\
body
=
"
$body
&Priority="
--form
"Content=
$_txt_value
"
\
body
=
"
$body
&Name=
$_full_domain
"
--form
"TTL=300"
\
body
=
"
$body
&Content=
$_txt_value
"
--form
"hosted_dns_editrecord=Submit"
\
body
=
"
$body
&TTL=300"
"https://dns.he.net/"
\
body
=
"
$body
&hosted_dns_editrecord=Submit"
>
/dev/null
_post
$body
"https://dns.he.net/"
>
/dev/null
}
}
...
@@ -56,16 +58,16 @@ dns_he_rm() {
...
@@ -56,16 +58,16 @@ dns_he_rm() {
_txt_value
=
$2
_txt_value
=
$2
_info
"Cleaning up after DNS-01 Hurricane Electric hook"
_info
"Cleaning up after DNS-01 Hurricane Electric hook"
_authenticate
||
return
1
# fills in the $_zone_id
# fills in the $_zone_id
_find_zone
$_full_domain
||
return
1
_find_zone
$_full_domain
||
return
1
_debug
"Zone id
\"
$_zone_id
\"
will be used."
_debug
"Zone id
\"
$_zone_id
\"
will be used."
# Find the record id to clean
# Find the record id to clean
_record_id
=
$(
\
body
=
"email=
${
HE_Username
}
&pass=
${
HE_Password
}
"
curl
-L
--silent
--show-error
--cookie
"
$_he_cookie
"
\
body
=
"
$body
&hosted_dns_zoneid=
$_zone_id
"
"https://dns.he.net/?hosted_dns_zoneid=
$_zone_id
&menu=edit_zone&hosted_dns_editzone"
\
body
=
"
$body
&menu=edit_zone"
body
=
"
$body
&hosted_dns_editzone="
_record_id
=
$(
_post
$body
"https://dns.he.net/"
\
|
grep
-A
1
"data=
\"\(
"
\)\?
${
_txt_value
}
\(
"
\)\?\"
"
\
|
grep
-A
1
"data=
\"\(
"
\)\?
${
_txt_value
}
\(
"
\)\?\"
"
\
|
tail
-n
1
\
|
tail
-n
1
\
| _egrep_o
"'[[:digit:]]+','[^']+','TXT'"
\
| _egrep_o
"'[[:digit:]]+','[^']+','TXT'"
\
...
@@ -74,15 +76,15 @@ dns_he_rm() {
...
@@ -74,15 +76,15 @@ dns_he_rm() {
|
head
-n1
)
# ... oh my, what have I done...
|
head
-n1
)
# ... oh my, what have I done...
# Remove the record
# Remove the record
curl
-L
--silent
--show-error
--cookie
"
$_he_cookie
"
\
body
=
"email=
${
HE_Username
}
&pass=
${
HE_Password
}
"
--form
"
menu=edit_zone"
\
body
=
"
$body
&
menu=edit_zone"
--form
"
hosted_dns_zoneid=
$_zone_id
"
\
body
=
"
$body
&
hosted_dns_zoneid=
$_zone_id
"
--form
"
hosted_dns_recordid=
$_record_id
"
\
body
=
"
$body
&
hosted_dns_recordid=
$_record_id
"
--form
"
hosted_dns_editzone=1"
\
body
=
"
$body
&
hosted_dns_editzone=1"
--form
"
hosted_dns_delrecord=1"
\
body
=
"
$body
&
hosted_dns_delrecord=1"
--form
"
hosted_dns_delconfirm=delete"
\
body
=
"
$body
&
hosted_dns_delconfirm=delete"
--form
"
hosted_dns_editzone=1"
\
body
=
"
$body
&
hosted_dns_editzone=1"
"https://dns.he.net/"
\
_post
$body
"https://dns.he.net/"
\
|
grep
'<div id="dns_status" onClick="hideThis(this);">Successfully removed record.</div>'
\
|
grep
'<div id="dns_status" onClick="hideThis(this);">Successfully removed record.</div>'
\
>
/dev/null
>
/dev/null
if
[
$?
-eq
0
]
;
then
if
[
$?
-eq
0
]
;
then
...
@@ -98,41 +100,10 @@ dns_he_rm() {
...
@@ -98,41 +100,10 @@ dns_he_rm() {
########################## PRIVATE FUNCTIONS ###########################
########################## PRIVATE FUNCTIONS ###########################
#-- _find_zone() -------------------------------------------------------
# Usage: _authenticate
#
# - needs $HE_Username and $HE_Password
# - sets the $_he_cookie
_authenticate
()
{
if
[
-z
"
$HE_Username
"
]
&&
[
-z
"
$HE_Password
"
]
;
then
_err
\
'No auth details provided. Please set user credentials using the \
\$HE_Username and \$HE_Password envoronment variables.'
return
1
fi
# Just get a session
_he_cookie
=
$(
\
curl
-L
--silent
--show-error
-I
"https://dns.he.net/"
\
|
grep
'^Set-Cookie:'
\
| _egrep_o
'CGISESSID=[a-z0-9]*'
)
# Attempt login
curl
-L
--silent
--show-error
--cookie
"
$_he_cookie
"
\
--form
"email=
${
HE_Username
}
"
\
--form
"pass=
${
HE_Password
}
"
\
"https://dns.he.net/"
\
>
/dev/null
# TODO detect unsuccessful logins
}
#-- _find_zone() -------------------------------------------------------
#-- _find_zone() -------------------------------------------------------
# Returns the most specific zone found in administration interface.
# Returns the most specific zone found in administration interface.
#
#
# - needs $_he_cookie
#
# Example:
# Example:
#
#
# _find_zone first.second.third.co.uk
# _find_zone first.second.third.co.uk
...
@@ -155,8 +126,9 @@ _find_zone() {
...
@@ -155,8 +126,9 @@ _find_zone() {
## _all_zones is an array that looks like this:
## _all_zones is an array that looks like this:
## ( zone1:id zone2:id ... )
## ( zone1:id zone2:id ... )
_all_zones
=(
$(
curl
-L
--silent
--show-error
--cookie
"
$_he_cookie
"
\
"https://dns.he.net/"
\
body
=
"email=
${
HE_Username
}
&pass=
${
HE_Password
}
"
_all_zones
=(
$(
_post
$body
"https://dns.he.net/"
\
| _egrep_o
"delete_dom.*name=
\"
[^
\"
]+
\"
value=
\"
[0-9]+"
\
| _egrep_o
"delete_dom.*name=
\"
[^
\"
]+
\"
value=
\"
[0-9]+"
\
|
cut
-d
'"'
-f
3,5
--output-delimiter
=
":"
\
|
cut
-d
'"'
-f
3,5
--output-delimiter
=
":"
\
)
)
)
)
...
...
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