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
28e4bcf6
Commit
28e4bcf6
authored
Jul 08, 2018
by
Michael
Browse files
initial version with Euserv.eu DNS API Support
parent
f60dde41
Changes
1
Show whitespace changes
Inline
Side-by-side
dnsapi/dns_euserv.sh
0 → 100644
View file @
28e4bcf6
#!/usr/bin/env sh
#This is the euserv.eu api wrapper for acme.sh
#
#Author: Michael Brueckner
#Report Bugs: https://www.github.com/initit/acme.sh or mbr@initit.de
#
#EUSERV_Username="username"
#
#EUSERV_Password="password"
#
# Dependencies:
# -------------
# - none -
EUSERV_Api
=
"https://api.euserv.net"
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_euserv_add
()
{
fulldomain
=
"
$(
echo
"
$1
"
| _lower_case
)
"
txtvalue
=
$2
EUSERV_Username
=
"
${
EUSERV_Username
:-
$(
_readaccountconf_mutable EUSERV_Username
)
}
"
EUSERV_Password
=
"
${
EUSERV_Password
:-
$(
_readaccountconf_mutable EUSERV_Password
)
}
"
if
[
-z
"
$EUSERV_Username
"
]
||
[
-z
"
$EUSERV_Password
"
]
;
then
EUSERV_Username
=
""
EUSERV_Password
=
""
_err
"You don't specify euserv user and password yet."
_err
"Please create your key and try again."
return
1
fi
#save the user and email to the account conf file.
_saveaccountconf_mutable EUSERV_Username
"
$EUSERV_Username
"
_saveaccountconf_mutable EUSERV_Password
"
$EUSERV_Password
"
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
_err
"invalid domain"
return
1
fi
_debug _sub_domain
"
$_sub_domain
"
_debug _domain
"
$_domain
"
_info
"Adding record"
_euserv_add_record
"
$_domain
"
"
$_sub_domain
"
"
$txtvalue
"
}
#fulldomain txtvalue
dns_euserv_rm
()
{
fulldomain
=
"
$(
echo
"
$1
"
| _lower_case
)
"
txtvalue
=
$2
EUSERV_Username
=
"
${
EUSERV_Username
:-
$(
_readaccountconf_mutable EUSERV_Username
)
}
"
EUSERV_Password
=
"
${
EUSERV_Password
:-
$(
_readaccountconf_mutable EUSERV_Password
)
}
"
if
[
-z
"
$EUSERV_Username
"
]
||
[
-z
"
$EUSERV_Password
"
]
;
then
EUSERV_Username
=
""
EUSERV_Password
=
""
_err
"You don't specify euserv user and password yet."
_err
"Please create your key and try again."
return
1
fi
#save the user and email to the account conf file.
_saveaccountconf_mutable EUSERV_Username
"
$EUSERV_Username
"
_saveaccountconf_mutable EUSERV_Password
"
$EUSERV_Password
"
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
_err
"invalid domain"
return
1
fi
_debug
"_sub_domain"
"
$_sub_domain
"
_debug
"_domain"
"
$_domain
"
_debug
"Getting txt records"
xml_content
=
$(
printf
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>domain.dns_get_active_records</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>login</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>password</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>domain_id</name>
<value>
<int>%s</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
"
$EUSERV_Username
"
"
$EUSERV_Password
"
"
$_euserv_domain_id
"
)
export
_H1
=
"Content-Type: text/xml"
response
=
"
$(
_post
"
$xml_content
"
"
$EUSERV_Api
"
""
"POST"
)
"
ok
=
"
$(
printf
'%s'
"
$response
"
|
grep
"<member><name>status</name><value><i4>100</i4></value></member>"
)
"
if
[
-z
"
$ok
"
]
;
then
_err
"Error could not get txt records"
_debug
"xml_content"
"
$xml_content
"
_debug
"response"
"
$response
"
return
1
fi
# _startLine=$(printf '%s' "$_euserv_domain_orders" | grep -n '>domain_name<.*>'"$domain"'<' | cut -d ':' -f 1 )
# _euserv_domain_id=$(printf '%s' "$_euserv_domain_orders" | sed -n "$_startLine"',$p' | grep '>domain_id<' | head -n 1 | sed 's/.*<i4>\([0-9]*\)<\/i4>.*/\1/' )
if
!
printf
"%s"
"
$response
"
|
grep
'>dns_record_content<.*>'
"
$txtvalue
"
'<'
>
/dev/null
;
then
_info
"Do not need to delete record"
else
# find block where txtvalue is in. the record_id is allways prior this line!
_endLine
=
$(
printf
'%s'
"
$response
"
|
grep
-n
'>dns_record_content<.*>'
"
$txtvalue
"
'<'
|
cut
-d
':'
-f
1
)
# record_id is the last entry with a number, identified by the postfix of </name><value><struct>
_record_id
=
$(
printf
'%s'
"
$response
"
|
sed
-n
'1,'
"
$_endLine
"
'p'
|
grep
'</name><value><struct>'
|
tail
-n
1 |
sed
's/.*<name>\([0-9]*\)<\/name>.*/\1/'
)
_info
"Deleting record"
_euserv_delete_record
"
$_record_id
"
fi
}
#################### Private functions below ##################################
_euserv_get_domain_orders
()
{
# returns: _euserv_domain_orders
_debug
"get domain_orders"
xml_content
=
$(
printf
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>domain.get_domain_orders</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>login</name>
<value><string>%s</string></value>
</member>
<member>
<name>password</name>
<value><string>%s</string></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
"
$EUSERV_Username
"
"
$EUSERV_Password
"
)
export
_H1
=
"Content-Type: text/xml"
response
=
"
$(
_post
"
$xml_content
"
"
$EUSERV_Api
"
""
"POST"
)
"
ok
=
"
$(
printf
'%s'
"
$response
"
|
grep
"<member><name>status</name><value><i4>100</i4></value></member>"
)
"
if
[
-z
"
$ok
"
]
;
then
_err
"Error could not get domain orders"
_debug
"xml_content"
"
$xml_content
"
_debug
"response"
"
$response
"
return
1
fi
_euserv_domain_orders
=
"
$response
"
return
0
}
_euserv_get_domain_id
()
{
# returns: _euserv_domain_id
domain
=
$1
_debug
"get domain_id"
_startLine
=
$(
printf
'%s'
"
$_euserv_domain_orders
"
|
grep
-n
'>domain_name<.*>'
"
$domain
"
'<'
|
cut
-d
':'
-f
1
)
_euserv_domain_id
=
$(
printf
'%s'
"
$_euserv_domain_orders
"
|
sed
-n
"
$_startLine
"
',$p'
|
grep
'>domain_id<'
|
head
-n
1 |
sed
's/.*<i4>\([0-9]*\)<\/i4>.*/\1/'
)
if
[
-z
"
$_euserv_domain_id
"
]
;
then
_err
"Could not find domain_id for domain
$domain
"
_debug
"_euserv_domain_orders"
"
$_euserv_domain_orders
"
return
1
fi
return
0
}
_get_root
()
{
domain
=
$1
_debug
"get root"
# Just to read the domain_orders once
domain
=
$1
i
=
2
p
=
1
_euserv_get_domain_orders
response
=
"
$_euserv_domain_orders
"
while
true
;
do
h
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
$i
-100
)
_debug h
"
$h
"
if
[
-z
"
$h
"
]
;
then
#not valid
return
1
fi
if
_contains
"
$response
"
"
$h
"
;
then
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
1-
$p
)
_domain
=
"
$h
"
if
!
_euserv_get_domain_id
"
$_domain
"
;
then
_err
"invalid domain"
return
1
fi
return
0
fi
p
=
$i
i
=
$(
_math
"
$i
"
+ 1
)
done
return
1
}
# TODO
_euserv_delete_record
()
{
record_id
=
$1
xml_content
=
$(
printf
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>domain.dns_delete_record</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>login</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>password</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>dns_record_id</name>
<value>
<int>%s</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
"
$EUSERV_Username
"
"
$EUSERV_Password
"
"
$record_id
"
)
export
_H1
=
"Content-Type: text/xml"
response
=
"
$(
_post
"
$xml_content
"
"
$EUSERV_Api
"
""
"POST"
)
"
ok
=
"
$(
printf
'%s'
"
$response
"
|
grep
"<member><name>status</name><value><i4>100</i4></value></member>"
)
"
if
[
-z
"
$ok
"
]
;
then
_err
"Error deleting record"
_debug
"xml_content"
"
$xml_content
"
_debug
"response"
"
$response
"
return
1
fi
return
0
}
_euserv_add_record
()
{
domain
=
$1
sub_domain
=
$2
txtval
=
$3
xml_content
=
$(
printf
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>domain.dns_create_record</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>login</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>password</name>
<value>
<string>%s</string></value>
</member>
<member>
<name>domain_id</name>
<value>
<int>%s</int>
</value>
</member>
<member>
<name>dns_record_subdomain</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>dns_record_type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>dns_record_value</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>dns_record_ttl</name>
<value>
<int>300</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
"
$EUSERV_Username
"
"
$EUSERV_Password
"
"
$_euserv_domain_id
"
"
$sub_domain
"
"
$txtval
"
)
export
_H1
=
"Content-Type: text/xml"
response
=
"
$(
_post
"
$xml_content
"
"
$EUSERV_Api
"
""
"POST"
)
"
ok
=
"
$(
printf
'%s'
"
$response
"
|
grep
"<member><name>status</name><value><i4>100</i4></value></member>"
)
"
if
[
-z
"
$ok
"
]
;
then
_err
"Error could not create record"
_debug
"xml_content"
"
$xml_content
"
_debug
"response"
"
$response
"
return
1
fi
# _dns_record_id="$(echo "$response" | _egrep_o "[\s\S]<name>dns_record_id<\/name>[\s]*?<value>[\s]*?<i4>(\K\d*)")"
# _debug "_dns_record_id" "$_dns_record_id"
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