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
a6f21101
Commit
a6f21101
authored
Nov 24, 2018
by
epgdatacapbon
Browse files
Add DNS API support for MyDNS.JP
parent
4f59a821
Changes
2
Hide whitespace changes
Inline
Side-by-side
dnsapi/README.md
View file @
a6f21101
...
@@ -1014,6 +1014,22 @@ Now you can issue a certificate.
...
@@ -1014,6 +1014,22 @@ Now you can issue a certificate.
acme.sh
--issue
--dns
dns_namecheap
-d
example.com
-d
*
.example.com
acme.sh
--issue
--dns
dns_namecheap
-d
example.com
-d
*
.example.com
```
```
## 54. Use MyDNS.JP API
First, register to MyDNS.JP and get MasterID and Password.
```
export MYDNSJP_MasterID=MasterID
export MYDNSJP_Password=Password
```
To issue a certificate:
```
acme.sh --issue --dns dns_mydnsjp -d example.com -d www.example.com
```
The
`MYDNSJP_MasterID`
and
`MYDNSJP_Password`
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_mydnsjp.sh
0 → 100644
View file @
a6f21101
#!/usr/bin/env sh
#Here is a api script for MyDNS.JP.
#This file name is "dns_mydnsjp.sh"
#So, here must be a method dns_mydnsjp_add()
#Which will be called by acme.sh to add the txt record to your api system.
#returns 0 means success, otherwise error.
#
#Author: epgdatacapbon
#Report Bugs here: https://github.com/epgdatacapbon/acme.sh
#
######## Public functions #####################
# Export MyDNS.JP MasterID and Password in following variables...
# MYDNSJP_MasterID=MasterID
# MYDNSJP_Password=Password
MYDNSJP_API
=
"http://www.mydns.jp"
#Usage: dns_mydnsjp_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_mydnsjp_add
()
{
fulldomain
=
$1
txtvalue
=
$2
_info
"Using mydnsjp"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
# Load the credentials from the account conf file
MYDNSJP_MasterID
=
"
${
MYDNSJP_MasterID
:-
$(
_readaccountconf_mutable MYDNSJP_MasterID
)
}
"
MYDNSJP_Password
=
"
${
MYDNSJP_Password
:-
$(
_readaccountconf_mutable MYDNSJP_Password
)
}
"
if
[
-z
"
$MYDNSJP_MasterID
"
]
||
[
-z
"
$MYDNSJP_Password
"
]
;
then
MYDNSJP_MasterID
=
""
MYDNSJP_Password
=
""
_err
"You don't specify mydnsjp api MasterID and Password yet."
_err
"Please export as MYDNSJP_MasterID / MYDNSJP_Password and try again."
return
1
fi
# Save the credentials to the account conf file
_saveaccountconf_mutable MYDNSJP_MasterID
"
$MYDNSJP_MasterID
"
_saveaccountconf_mutable MYDNSJP_Password
"
$MYDNSJP_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
"
if
_mydnsjp_api
"REGIST"
"
$_domain
"
"
$txtvalue
"
;
then
if
printf
--
"%s"
"
$response
"
|
grep
"OK."
>
/dev/null
;
then
_info
"Added, OK"
return
0
else
_err
"Add txt record error."
return
1
fi
fi
_err
"Add txt record error."
return
1
}
#Usage: fulldomain txtvalue
#Remove the txt record after validation.
dns_mydnsjp_rm
()
{
fulldomain
=
$1
txtvalue
=
$2
_info
"Removing TXT record"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
# Load the credentials from the account conf file
MYDNSJP_MasterID
=
"
${
MYDNSJP_MasterID
:-
$(
_readaccountconf_mutable MYDNSJP_MasterID
)
}
"
MYDNSJP_Password
=
"
${
MYDNSJP_Password
:-
$(
_readaccountconf_mutable MYDNSJP_Password
)
}
"
if
[
-z
"
$MYDNSJP_MasterID
"
]
||
[
-z
"
$MYDNSJP_Password
"
]
;
then
MYDNSJP_MasterID
=
""
MYDNSJP_Password
=
""
_err
"You don't specify mydnsjp api MasterID and Password yet."
_err
"Please export as MYDNSJP_MasterID / MYDNSJP_Password and try again."
return
1
fi
_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
"
if
_mydnsjp_api
"DELETE"
"
$_domain
"
"
$txtvalue
"
;
then
if
printf
--
"%s"
"
$response
"
|
grep
"OK."
>
/dev/null
;
then
_info
"Deleted, OK"
return
0
else
_err
"Delete txt record error."
return
1
fi
fi
_err
"Delete txt record error."
return
1
}
#################### Private functions below ##################################
# _acme-challenge.www.domain.com
# returns
# _sub_domain=_acme-challenge.www
# _domain=domain.com
_get_root
()
{
fulldomain
=
$1
i
=
2
p
=
1
# Get the root domain
_mydnsjp_retrieve_domain
if
[
"
$?
"
!=
"0"
]
;
then
# not valid
return
1
fi
while
true
;
do
_domain
=
$(
printf
"%s"
"
$fulldomain
"
|
cut
-d
.
-f
$i
-100
)
if
[
-z
"
$_domain
"
]
;
then
# not valid
return
1
fi
if
[
"
$_domain
"
=
"
$_root_domain
"
]
;
then
_sub_domain
=
$(
printf
"%s"
"
$fulldomain
"
|
cut
-d
.
-f
1-
$p
)
return
0
fi
p
=
$i
i
=
$(
_math
"
$i
"
+ 1
)
done
return
1
}
# Retrieve the root domain
# returns 0 success
_mydnsjp_retrieve_domain
()
{
_debug
"Login to MyDNS.JP"
response
=
"
$(
_post
"masterid=
$MYDNSJP_MasterID
&masterpwd=
$MYDNSJP_Password
"
"
$MYDNSJP_API
/?MENU=100"
)
"
cookie
=
"
$(
grep
'^Set-Cookie:'
"
$HTTP_HEADER
"
| _head_n 1 |
cut
-d
" "
-f
2
)
"
# If cookies is not empty then logon successful
if
[
-z
"
$cookie
"
]
;
then
_err
"Fail to get a cookie."
return
1
fi
_debug
"Retrieve DOMAIN INFO page"
export
_H1
=
"Cookie:
${
cookie
}
"
response
=
"
$(
_get
"
$MYDNSJP_API
/?MENU=300"
)
"
if
[
"
$?
"
!=
"0"
]
;
then
_err
"Fail to retrieve DOMAIN INFO."
return
1
fi
_root_domain
=
$(
echo
"
$response
"
|
grep
"DNSINFO
\[
domainname
\]
"
|
sed
's/^.*value="\([^"]*\)".*/\1/'
)
# Logout
response
=
"
$(
_get
"
$MYDNSJP_API
/?MENU=090"
)
"
_debug _root_domain
"
$_root_domain
"
if
[
-z
"
$_root_domain
"
]
;
then
_err
"Fail to get the root domain."
return
1
fi
return
0
}
_mydnsjp_api
()
{
cmd
=
$1
domain
=
$2
txtvalue
=
$3
# Base64 encode the credentials
credentials
=
$(
printf
"%s:%s"
"
$MYDNSJP_MasterID
"
"
$MYDNSJP_Password
"
| _base64
)
# Construct the HTTP Authorization header
export
_H1
=
"Content-Type: application/x-www-form-urlencoded"
export
_H2
=
"Authorization: Basic
${
credentials
}
"
response
=
"
$(
_post
"CERTBOT_DOMAIN=
$domain
&CERTBOT_VALIDATION=
$txtvalue
&EDIT_CMD=
$cmd
"
"
$MYDNSJP_API
/directedit.html"
)
"
if
[
"
$?
"
!=
"0"
]
;
then
_err
"error
$domain
"
return
1
fi
_debug2 response
"
$response
"
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