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
e85d7a7b
Unverified
Commit
e85d7a7b
authored
Oct 23, 2019
by
neil
Committed by
GitHub
Oct 23, 2019
Browse files
Merge pull request #2534 from billgertz/patch-2
dnsapi/dns_miab.sh MIAB DNS-01 Validation
parents
7015215f
933d49b0
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_miab.sh
0 → 100644
View file @
e85d7a7b
#!/usr/bin/env sh
# Name: dns_miab.sh
#
# Authors:
# Darven Dissek 2018
# William Gertz 2019
#
# Thanks to Neil Pang and other developers here for code reused from acme.sh from DNS-01
# used to communicate with the MailinaBox Custom DNS API
# Report Bugs here:
# https://github.com/billgertz/MIAB_dns_api (for dns_miab.sh)
# https://github.com/Neilpang/acme.sh (for acme.sh)
#
######## Public functions #####################
#Usage: dns_miab_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_miab_add
()
{
fulldomain
=
$1
txtvalue
=
$2
_info
"Using miab challange add"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
#retrieve MIAB environemt vars
if
!
_retrieve_miab_env
;
then
return
1
fi
#check domain and seperate into doamin and host
if
!
_get_root
"
$fulldomain
"
;
then
_err
"Cannot find any part of
${
fulldomain
}
is hosted on
${
MIAB_Server
}
"
return
1
fi
_debug2 _sub_domain
"
$_sub_domain
"
_debug2 _domain
"
$_domain
"
#add the challenge record
_api_path
=
"custom/
${
fulldomain
}
/txt"
_miab_rest
"
$txtvalue
"
"
$_api_path
"
"POST"
#check if result was good
if
_contains
"
$response
"
"updated DNS"
;
then
_info
"Successfully created the txt record"
return
0
else
_err
"Error encountered during record add"
_err
"
$response
"
return
1
fi
}
#Usage: dns_miab_rm _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_miab_rm
()
{
fulldomain
=
$1
txtvalue
=
$2
_info
"Using miab challage delete"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
#retrieve MIAB environemt vars
if
!
_retrieve_miab_env
;
then
return
1
fi
#check domain and seperate into doamin and host
if
!
_get_root
"
$fulldomain
"
;
then
_err
"Cannot find any part of
${
fulldomain
}
is hosted on
${
MIAB_Server
}
"
return
1
fi
_debug2 _sub_domain
"
$_sub_domain
"
_debug2 _domain
"
$_domain
"
#Remove the challenge record
_api_path
=
"custom/
${
fulldomain
}
/txt"
_miab_rest
"
$txtvalue
"
"
$_api_path
"
"DELETE"
#check if result was good
if
_contains
"
$response
"
"updated DNS"
;
then
_info
"Successfully removed the txt record"
return
0
else
_err
"Error encountered during record remove"
_err
"
$response
"
return
1
fi
}
#################### Private functions below ##################################
#
#Usage: _get_root _acme-challenge.www.domain.com
#Returns:
# _sub_domain=_acme-challenge.www
# _domain=domain.com
_get_root
()
{
_passed_domain
=
$1
_debug _passed_domain
"
$_passed_domain
"
_i
=
2
_p
=
1
#get the zones hosed on MIAB server, must be a json stream
_miab_rest
""
"zones"
"GET"
if
!
_is_json
"
$response
"
;
then
_err
"ERROR fetching domain list"
_err
"
$response
"
return
1
fi
#cycle through the passed domain seperating out a test domain discarding
# the subdomain by marching thorugh the dots
while
true
;
do
_test_domain
=
$(
printf
"%s"
"
$_passed_domain
"
|
cut
-d
.
-f
${
_i
}
-100
)
_debug _test_domain
"
$_test_domain
"
if
[
-z
"
$_test_domain
"
]
;
then
return
1
fi
#report found if the test domain is in the json response and
# report the subdomain
if
_contains
"
$response
"
"
\"
$_test_domain
\"
"
;
then
_sub_domain
=
$(
printf
"%s"
"
$_passed_domain
"
|
cut
-d
.
-f
1-
${
_p
}
)
_domain
=
${
_test_domain
}
return
0
fi
#cycle to the next dot in the passed domain
_p
=
${
_i
}
_i
=
$(
_math
"
$_i
"
+ 1
)
done
return
1
}
#Usage: _retrieve_miab_env
#Returns (from store or environment variables):
# MIAB_Username
# MIAB_Password
# MIAB_Server
#retrieve MIAB environment variables, report errors and quit if problems
_retrieve_miab_env
()
{
MIAB_Username
=
"
${
MIAB_Username
:-
$(
_readaccountconf_mutable MIAB_Username
)
}
"
MIAB_Password
=
"
${
MIAB_Password
:-
$(
_readaccountconf_mutable MIAB_Password
)
}
"
MIAB_Server
=
"
${
MIAB_Server
:-
$(
_readaccountconf_mutable MIAB_Server
)
}
"
#debug log the environmental variables
_debug MIAB_Username
"
$MIAB_Username
"
_debug MIAB_Password
"
$MIAB_Password
"
_debug MIAB_Server
"
$MIAB_Server
"
#check if MIAB environemt vars set and quit if not
if
[
-z
"
$MIAB_Username
"
]
||
[
-z
"
$MIAB_Password
"
]
||
[
-z
"
$MIAB_Server
"
]
;
then
_err
"You didn't specify one or more of MIAB_Username, MIAB_Password or MIAB_Server."
_err
"Please check these environment variables and try again."
return
1
fi
#save the credentials to the account conf file.
_saveaccountconf_mutable MIAB_Username
"
$MIAB_Username
"
_saveaccountconf_mutable MIAB_Password
"
$MIAB_Password
"
_saveaccountconf_mutable MIAB_Server
"
$MIAB_Server
"
}
#Useage: _miab_rest "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" "custom/_acme-challenge.www.domain.com/txt "POST"
#Returns: "updated DNS: domain.com"
#rest interface MIAB dns
_miab_rest
()
{
_data
=
"
$1
"
_api_path
=
"
$2
"
_httpmethod
=
"
$3
"
#encode username and password for basic authentication
_credentials
=
"
$(
printf
"%s"
"
$MIAB_Username
:
$MIAB_Password
"
| _base64
)
"
export
_H1
=
"Authorization: Basic
$_credentials
"
_url
=
"https://
${
MIAB_Server
}
/admin/dns/
${
_api_path
}
"
_debug2 _data
"
$_data
"
_debug _api_path
"
$_api_path
"
_debug2 _url
"
$_url
"
_debug2 _credentails
"
$_credentials
"
_debug _httpmethod
"
$_httpmethod
"
if
[
"
$_httpmethod
"
=
"GET"
]
;
then
response
=
"
$(
_get
"
$_url
"
)
"
else
response
=
"
$(
_post
"
$_data
"
"
$_url
"
""
"
$_httpmethod
"
)
"
fi
_retcode
=
"
$?
"
if
[
"
$_retcode
"
!=
"0"
]
;
then
_err
"MIAB REST authentication failed on
$_httpmethod
"
return
1
fi
_debug response
"
$response
"
return
0
}
#Usage: _is_json "\[\n "mydomain.com"\n]"
#Reurns "\[\n "mydomain.com"\n]"
#returns the string if it begins and ends with square braces
_is_json
()
{
_str
=
"
$(
echo
"
$1
"
| _normalizeJson
)
"
echo
"
$_str
"
|
grep
'^\[.*\]$'
>
/dev/null 2>&1
}
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