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
5141d177
Unverified
Commit
5141d177
authored
Sep 08, 2022
by
neil
Committed by
GitHub
Sep 08, 2022
Browse files
Merge pull request #3873 from Marvo2011/dev
Added Selfhost DNS API
parents
374af996
a6ecdbae
Changes
1
Show whitespace changes
Inline
Side-by-side
dnsapi/dns_selfhost.sh
0 → 100644
View file @
5141d177
#!/usr/bin/env sh
#
# Author: Marvin Edeler
# Report Bugs here: https://github.com/Marvo2011/acme.sh/issues/1
# Last Edit: 17.02.2022
dns_selfhost_add
()
{
fulldomain
=
$1
txt
=
$2
_info
"Calling acme-dns on selfhost"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txt
"
SELFHOSTDNS_UPDATE_URL
=
"https://selfhost.de/cgi-bin/api.pl"
# Get values, but don't save until we successfully validated
SELFHOSTDNS_USERNAME
=
"
${
SELFHOSTDNS_USERNAME
:-
$(
_readaccountconf_mutable SELFHOSTDNS_USERNAME
)
}
"
SELFHOSTDNS_PASSWORD
=
"
${
SELFHOSTDNS_PASSWORD
:-
$(
_readaccountconf_mutable SELFHOSTDNS_PASSWORD
)
}
"
# These values are domain dependent, so read them from there
SELFHOSTDNS_MAP
=
"
${
SELFHOSTDNS_MAP
:-
$(
_readdomainconf SELFHOSTDNS_MAP
)
}
"
# Selfhost api can't dynamically add TXT record,
# so we have to store the last used RID of the domain to support a second RID for wildcard domains
# (format: 'fulldomainA:lastRid fulldomainB:lastRid ...')
SELFHOSTDNS_MAP_LAST_USED_INTERNAL
=
$(
_readdomainconf SELFHOSTDNS_MAP_LAST_USED_INTERNAL
)
if
[
-z
"
${
SELFHOSTDNS_USERNAME
:-}
"
]
||
[
-z
"
${
SELFHOSTDNS_PASSWORD
:-}
"
]
;
then
_err
"SELFHOSTDNS_USERNAME and SELFHOSTDNS_PASSWORD must be set"
return
1
fi
# get the domain entry from SELFHOSTDNS_MAP
# only match full domains (at the beginning of the string or with a leading whitespace),
# e.g. don't match mytest.example.com or sub.test.example.com for test.example.com
# if the domain is defined multiple times only the last occurance will be matched
mapEntry
=
$(
echo
"
$SELFHOSTDNS_MAP
"
|
sed
-n
-E
"s/(^|^.*[[:space:]])(
$fulldomain
)(:[[:digit:]]+)([:]?[[:digit:]]*)(.*)/
\2\3\4
/p"
)
_debug2 mapEntry
"
$mapEntry
"
if
test
-z
"
$mapEntry
"
;
then
_err
"SELFHOSTDNS_MAP must contain the fulldomain incl. prefix and at least one RID"
return
1
fi
# get the RIDs from the map entry
rid1
=
$(
echo
"
$mapEntry
"
|
cut
-d
:
-f2
)
rid2
=
$(
echo
"
$mapEntry
"
|
cut
-d
:
-f3
)
# read last used rid domain
lastUsedRidForDomainEntry
=
$(
echo
"
$SELFHOSTDNS_MAP_LAST_USED_INTERNAL
"
|
sed
-n
-E
"s/(^|^.*[[:space:]])(
$fulldomain
:[[:digit:]]+)(.*)/
\2
/p"
)
_debug2 lastUsedRidForDomainEntry
"
$lastUsedRidForDomainEntry
"
lastUsedRidForDomain
=
$(
echo
"
$lastUsedRidForDomainEntry
"
|
cut
-d
:
-f2
)
rid
=
"
$rid1
"
if
[
"
$lastUsedRidForDomain
"
=
"
$rid
"
]
&&
!
test
-z
"
$rid2
"
;
then
rid
=
"
$rid2
"
fi
_info
"Trying to add
$txt
on selfhost for rid:
$rid
"
data
=
"?username=
$SELFHOSTDNS_USERNAME
&password=
$SELFHOSTDNS_PASSWORD
&rid=
$rid
&content=
$txt
"
response
=
"
$(
_get
"
$SELFHOSTDNS_UPDATE_URL$data
"
)
"
if
!
echo
"
$response
"
|
grep
"200 OK"
>
/dev/null
;
then
_err
"Invalid response of acme-dns for selfhost"
return
1
fi
# write last used rid domain
newLastUsedRidForDomainEntry
=
"
$fulldomain
:
$rid
"
if
!
test
-z
"
$lastUsedRidForDomainEntry
"
;
then
# replace last used rid entry for domain
SELFHOSTDNS_MAP_LAST_USED_INTERNAL
=
$(
echo
"
$SELFHOSTDNS_MAP_LAST_USED_INTERNAL
"
|
sed
-n
-E
"s/
$lastUsedRidForDomainEntry
/
$newLastUsedRidForDomainEntry
/p"
)
else
# add last used rid entry for domain
if
test
-z
"
$SELFHOSTDNS_MAP_LAST_USED_INTERNAL
"
;
then
SELFHOSTDNS_MAP_LAST_USED_INTERNAL
=
"
$newLastUsedRidForDomainEntry
"
else
SELFHOSTDNS_MAP_LAST_USED_INTERNAL
=
"
$SELFHOSTDNS_MAP_LAST_USED_INTERNAL
$newLastUsedRidForDomainEntry
"
fi
fi
# Now that we know the values are good, save them
_saveaccountconf_mutable SELFHOSTDNS_USERNAME
"
$SELFHOSTDNS_USERNAME
"
_saveaccountconf_mutable SELFHOSTDNS_PASSWORD
"
$SELFHOSTDNS_PASSWORD
"
# These values are domain dependent, so store them there
_savedomainconf SELFHOSTDNS_MAP
"
$SELFHOSTDNS_MAP
"
_savedomainconf SELFHOSTDNS_MAP_LAST_USED_INTERNAL
"
$SELFHOSTDNS_MAP_LAST_USED_INTERNAL
"
}
dns_selfhost_rm
()
{
fulldomain
=
$1
txt
=
$2
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txt
"
_info
"Creating and removing of records is not supported by selfhost API, will not delete anything."
}
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