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
657334fb
Commit
657334fb
authored
Dec 07, 2017
by
speedmann
Browse files
Add support for inwx.de API
parent
ac0970ab
Changes
3
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
657334fb
...
@@ -339,6 +339,7 @@ You don't have to do anything manually!
...
@@ -339,6 +339,7 @@ You don't have to do anything manually!
1.
Dyn Managed DNS API
1.
Dyn Managed DNS API
1.
Yandex PDD API (https://pdd.yandex.ru)
1.
Yandex PDD API (https://pdd.yandex.ru)
1.
Hurricane Electric DNS service (https://dns.he.net)
1.
Hurricane Electric DNS service (https://dns.he.net)
1.
INWX (https://www.inwx.de/)
And:
And:
...
...
dnsapi/README.md
View file @
657334fb
...
@@ -602,6 +602,23 @@ The `HE_Username` and `HE_Password` settings will be saved in `~/.acme.sh/accoun
...
@@ -602,6 +602,23 @@ The `HE_Username` and `HE_Password` settings will be saved in `~/.acme.sh/accoun
Please report any issues to https://github.com/angel333/acme.sh or to
<me@ondrejsimek.com>
.
Please report any issues to https://github.com/angel333/acme.sh or to
<me@ondrejsimek.com>
.
## 31. Use INWX
INWX offers an xmlrpc api with your standard login credentials, set them like so:
```
export INWX_User="yourusername"
export INWX_Password="password"
```
Then you can issue your certificates with:
```
acme.sh --issue --dns dns_inwx -d example.com -d www.example.com
```
The
`INWX_User`
and
`INWX_Password`
settings will be saved in
`~/.acme.sh/account.conf`
and will be reused when needed.
# Use custom API
# Use custom API
If your API is not supported yet, you can write your own DNS API.
If your API is not supported yet, you can write your own DNS API.
...
...
dnsapi/dns_inwx.sh
0 → 100755
View file @
657334fb
#!/usr/local/bin/bash
#
#INWX_User="username"
#
#INWX_Password="password"
INWX_Api
=
"https://api.domrobot.com/xmlrpc/"
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_inwx_add
()
{
fulldomain
=
$1
txtvalue
=
$2
INWX_User
=
"
${
INWX_User
:-
$(
_readaccountconf_mutable INWX_User
)
}
"
INWX_Password
=
"
${
INWX_Password
:-
$(
_readaccountconf_mutable INWX_Password
)
}
"
if
[
-z
"
$INWX_User
"
]
||
[
-z
"
$INWX_Password
"
]
;
then
INWX_User
=
""
INWX_Password
=
""
_err
"You don't specify inwx user and password yet."
_err
"Please create you key and try again."
return
1
fi
#save the api key and email to the account conf file.
_saveaccountconf_mutable INWX_User
"
$INWX_User
"
_saveaccountconf_mutable INWX_Password
"
$INWX_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"
printf
-v
xml_content
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>nameserver.info</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>domain</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>name</name>
<value>
<string>%s</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
$_domain
$_sub_domain
response
=
"
$(
_post
"
$xml_content
"
"
$INWX_Api
"
""
"POST"
)
"
if
!
printf
"%s"
"
$response
"
|
grep
"Command completed successfully"
>
/dev/null
;
then
_err
"Error could net get txt records"
return
1
fi
if
!
printf
"%s"
"
$response
"
|
grep
"count"
-q
;
then
_info
"Adding record"
_inwx_add_record
$_domain
$_sub_domain
$txtvalue
else
_record_id
=
$(
printf
'%s'
$response
|
sed
-nE
's/.*(<member><name>record){1}(.*)(<name>id<\/name><value><int>)([0-9]+){1}.*/\4/p'
)
_info
"Updating record"
_inwx_update_record
$_record_id
$txtvalue
fi
}
#fulldomain txtvalue
dns_inwx_rm
()
{
fulldomain
=
$1
txtvalue
=
$2
INWX_User
=
"
${
INWX_User
:-
$(
_readaccountconf_mutable INWX_User
)
}
"
INWX_Password
=
"
${
INWX_Password
:-
$(
_readaccountconf_mutable INWX_Password
)
}
"
if
[
-z
"
$INWX_User
"
]
||
[
-z
"
$INWX_Password
"
]
;
then
INWX_User
=
""
INWX_Password
=
""
_err
"You don't specify inwx user and password yet."
_err
"Please create you key and try again."
return
1
fi
#save the api key and email to the account conf file.
_saveaccountconf_mutable INWX_User
"
$INWX_User
"
_saveaccountconf_mutable INWX_Password
"
$INWX_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"
printf
-v
xml_content
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>nameserver.info</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>domain</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>name</name>
<value>
<string>%s</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
$_domain
$_sub_domain
response
=
"
$(
_post
"
$xml_content
"
"
$INWX_Api
"
""
"POST"
)
"
if
!
printf
"%s"
"
$response
"
|
grep
"Command completed successfully"
>
/dev/null
;
then
_err
"Error could not get txt records"
return
1
fi
if
!
printf
"%s"
"
$response
"
|
grep
"count"
-q
;
then
_info
"Do not need to delete record"
else
_record_id
=
$(
printf
'%s'
$response
|
sed
-nE
's/.*(<member><name>record){1}(.*)(<name>id<\/name><value><int>)([0-9]+){1}.*/\4/p'
)
_info
"Deleting record"
_inwx_delete_record
$_record_id
fi
}
#################### Private functions below ##################################
_inwx_login
()
{
printf
-v
xml_content
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>account.login</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>user</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>pass</name>
<value>
<string>%s</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
$INWX_User
$INWX_Password
response
=
"
$(
_post
"
$xml_content
"
"
$INWX_Api
"
""
"POST"
)
"
printf
"Cookie: %s"
"
$(
grep
"domrobot="
"
$HTTP_HEADER
"
|
grep
"^Set-Cookie:"
| _tail_n 1 | _egrep_o
'domrobot=[^;]*;'
|
tr
-d
';'
)
"
}
_get_root
()
{
domain
=
$1
_debug
"get root"
domain
=
$1
i
=
2
p
=
1
export
_H1
=
$(
_inwx_login
)
printf
-v
xml_content
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>nameserver.list</methodName>
</methodCall>'
response
=
"
$(
_post
"
$xml_content
"
"
$INWX_Api
"
""
"POST"
)
"
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
"
return
0
fi
p
=
$i
i
=
$(
_math
"
$i
"
+ 1
)
done
return
1
}
_inwx_delete_record
()
{
record_id
=
$1
printf
-v
xml_content
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>nameserver.deleteRecord</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>id</name>
<value>
<int>%s</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
$record_id
response
=
"
$(
_post
"
$xml_content
"
"
$INWX_Api
"
""
"POST"
)
"
if
!
printf
"%s"
"
$response
"
|
grep
"Command completed successfully"
>
/dev/null
;
then
_err
"Error"
return
1
fi
return
0
}
_inwx_update_record
()
{
record_id
=
$1
txtval
=
$2
printf
-v
xml_content
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>nameserver.updateRecord</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>content</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>id</name>
<value>
<int>%s</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
$txtval
$record_id
response
=
"
$(
_post
"
$xml_content
"
"
$INWX_Api
"
""
"POST"
)
"
if
!
printf
"%s"
"
$response
"
|
grep
"Command completed successfully"
>
/dev/null
;
then
_err
"Error"
return
1
fi
return
0
}
_inwx_add_record
()
{
domain
=
$1
sub_domain
=
$2
txtval
=
$3
_debug domain:
$domain
_debug value:
$txtval
_debug subd:
$sub_domain
printf
-v
xml_content
'<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>nameserver.createRecord</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>domain</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>TXT</string>
</value>
</member>
<member>
<name>content</name>
<value>
<string>%s</string>
</value>
</member>
<member>
<name>name</name>
<value>
<string>%s</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>'
$domain
$txtval
$sub_domain
response
=
"
$(
_post
"
$xml_content
"
"
$INWX_Api
"
""
"POST"
)
"
if
!
printf
"%s"
"
$response
"
|
grep
"Command completed successfully"
>
/dev/null
;
then
_err
"Error"
return
1
fi
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