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
5048c6c2
Commit
5048c6c2
authored
Mar 14, 2019
by
tambetliiv
Committed by
neil
Mar 14, 2019
Browse files
Add zone.ee (zone.eu) DNS API (#2151)
* add zone.ee (zone.eu) dns api
parent
9d64b35e
Changes
3
Show whitespace changes
Inline
Side-by-side
README.md
View file @
5048c6c2
...
...
@@ -360,6 +360,7 @@ You don't have to do anything manually!
1.
MyDevil.net (https://www.mydevil.net/)
1.
Core-Networks.de (https://core-networks.de)
1.
NederHost API (https://www.nederhost.nl/)
1.
Zone.ee (zone.eu) API (https://api.zone.eu/v2)
And:
...
...
dnsapi/README.md
View file @
5048c6c2
...
...
@@ -1310,6 +1310,22 @@ To issue a certificate run:
acme.sh --issue --dns dns_nederhost -d example.com -d
*
.example.com
```
## 69. Use Zone.ee DNS API
First, you'll need to retrive your API key. Estonian insructions https://help.zone.eu/kb/zoneid-api-v2/
```
export ZONE_Username=yourusername
export ZONE_Key=keygoeshere
```
To issue a cert run:
```
acme.sh --issue -d example.com -d www.example.com --dns dns_zone
```
`ZONE_Username` and `ZONE_Key` will be saved in `~/.acme.sh/account.conf` and will be reused when needed.
# Use custom API
If your API is not supported yet, you can write your own DNS API.
...
...
dnsapi/dns_zone.sh
0 → 100755
View file @
5048c6c2
#!/usr/bin/env sh
# Zone.ee dns API
# https://help.zone.eu/kb/zoneid-api-v2/
# required ZONE_Username and ZONE_Key
ZONE_Api
=
"https://api.zone.eu/v2"
######## Public functions #####################
#Usage: dns_zone_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_zone_add
()
{
fulldomain
=
$1
txtvalue
=
$2
_info
"Using zone.ee dns api"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
ZONE_Username
=
"
${
ZONE_Username
:-
$(
_readaccountconf_mutable ZONE_Username
)
}
"
ZONE_Key
=
"
${
ZONE_Key
:-
$(
_readaccountconf_mutable ZONE_Key
)
}
"
if
[
-z
"
$ZONE_Username
"
]
||
[
-z
"
$ZONE_Key
"
]
;
then
ZONE_Username
=
""
ZONE_Key
=
""
_err
"Zone api key and username must be present."
return
1
fi
_saveaccountconf_mutable ZONE_Username
"
$ZONE_Username
"
_saveaccountconf_mutable ZONE_Key
"
$ZONE_Key
"
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
_err
"invalid domain"
return
1
fi
_debug
"Adding txt record"
if
_zone_rest POST
"dns/
${
_domain
}
/txt"
"{
\"
name
\"
:
\"
$fulldomain
\"
,
\"
destination
\"
:
\"
$txtvalue
\"
}"
;
then
if
printf
--
"%s"
"
$response
"
|
grep
"
$fulldomain
"
>
/dev/null
;
then
_info
"Added, OK"
return
0
else
_err
"Adding txt record error."
return
1
fi
else
_err
"Adding txt record error."
fi
}
#Usage: fulldomain txtvalue
#Remove the txt record after validation.
dns_zone_rm
()
{
fulldomain
=
$1
txtvalue
=
$2
_info
"Using zone.ee dns api"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
ZONE_Username
=
"
${
ZONE_Username
:-
$(
_readaccountconf_mutable ZONE_Username
)
}
"
ZONE_Key
=
"
${
ZONE_Key
:-
$(
_readaccountconf_mutable ZONE_Key
)
}
"
if
[
-z
"
$ZONE_Username
"
]
||
[
-z
"
$ZONE_Key
"
]
;
then
ZONE_Username
=
""
ZONE_Key
=
""
_err
"Zone api key and username must be present."
return
1
fi
_saveaccountconf_mutable ZONE_Username
"
$ZONE_Username
"
_saveaccountconf_mutable ZONE_Key
"
$ZONE_Key
"
_debug
"First detect the root zone"
if
!
_get_root
"
$fulldomain
"
;
then
_err
"invalid domain"
return
1
fi
_debug
"Getting txt records"
_debug _domain
"
$_domain
"
_zone_rest GET
"dns/
${
_domain
}
/txt"
if
printf
"%s"
"
$response
"
|
grep
\"
error
\"
>
/dev/null
;
then
_err
"Error"
return
1
fi
count
=
$(
printf
"%s
\n
"
"
$response
"
| _egrep_o
"
\"
name
\"
:
\"
$fulldomain
\"
"
|
wc
-l
)
_debug count
"
$count
"
if
[
"
$count
"
=
"0"
]
;
then
_info
"Nothing to remove."
else
record_id
=
$(
printf
"%s
\n
"
"
$response
"
| _egrep_o
"
\"
id
\"
:
\"
[^
\"
]*
\"
,
\"
resource_url
\"
:
\"
[^
\"
]*
\"
,
\"
name
\"
:
\"
$fulldomain
\"
,"
|
cut
-d
:
-f2
|
cut
-d
,
-f1
|
tr
-d
\"
| _head_n 1
)
if
[
-z
"
$record_id
"
]
;
then
_err
"No id found to remove."
return
1
fi
if
!
_zone_rest DELETE
"dns/
${
_domain
}
/txt/
$record_id
"
;
then
_err
"Record deleting error."
return
1
fi
_info
"Record deleted"
return
0
fi
}
#################### Private functions below ##################################
_zone_rest
()
{
m
=
$1
ep
=
"
$2
"
data
=
"
$3
"
_debug
"
$ep
"
realm
=
"
$(
printf
"%s"
"
$ZONE_Username
:
$ZONE_Key
"
| _base64
)
"
export
_H1
=
"Authorization: Basic
$realm
"
export
_H2
=
"Content-Type: application/json"
if
[
"
$m
"
!=
"GET"
]
;
then
_debug data
"
$data
"
response
=
"
$(
_post
"
$data
"
"
$ZONE_Api
/
$ep
"
""
"
$m
"
)
"
else
response
=
"
$(
_get
"
$ZONE_Api
/
$ep
"
)
"
fi
if
[
"
$?
"
!=
"0"
]
;
then
_err
"error
$ep
"
return
1
fi
_debug2 response
"
$response
"
return
0
}
_get_root
()
{
domain
=
$1
i
=
2
while
true
;
do
h
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
$i
-100
)
_debug h
"
$h
"
if
[
-z
"
$h
"
]
;
then
return
1
fi
if
!
_zone_rest GET
"dns/
$h
/a"
;
then
return
1
fi
if
_contains
"
$response
"
"
\"
name
\"
:
\"
$h
\"
"
>
/dev/null
;
then
_domain
=
$h
return
0
fi
i
=
$(
_math
"
$i
"
+ 1
)
done
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