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
9dd50899
Commit
9dd50899
authored
Jul 13, 2020
by
StefanAbl
Browse files
formatting
parent
06e7ebbd
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_dynv6.sh
View file @
9dd50899
...
...
@@ -11,6 +11,7 @@ dns_dynv6_add() {
_info
"Using dynv6 api"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
<<<<<<
< HEAD
_get_keyfile
_info
"using keyfile
$dynv6_keyfile
"
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
...
...
@@ -27,6 +28,30 @@ dns_dynv6_add() {
return
0
else
_err
"Something went wrong! it does not seem like the record was added succesfully"
=======
_get_authentication
if
[
"
$dynv6_token
"
]
;
then
_dns_dynv6_add_http
return
$?
else
_info
"using key file
$dynv6_keyfile
"
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
if
!
_get_domain
"
$fulldomain
"
"
$_your_hosts
"
;
then
_err
"Host not found on your account"
return
1
fi
_debug
"found host on your account"
returnval
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
\"
"
$_host
"
\"
records
set
\"
"
$_record
"
\"
txt data
\"
"
$txtvalue
"
\"
)
"
_debug
"Dynv6 returned this after record was added:
$returnval
"
if
_contains
"
$returnval
"
"created"
;
then
return
0
elif
_contains
"
$returnval
"
"updated"
;
then
return
0
else
_err
"Something went wrong! it does not seem like the record was added successfully"
return
1
fi
>>>>>>>
formatting
return
1
fi
return
1
...
...
@@ -39,12 +64,29 @@ dns_dynv6_rm() {
_info
"Using dynv6 api"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
<<<<<<
< HEAD
_get_keyfile
_info
"using keyfile
$dynv6_keyfile
"
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
if
!
_get_domain
"
$fulldomain
"
"
$_your_hosts
"
;
then
_err
"Host not found on your account"
return
1
=======
_get_authentication
if
[
"
$dynv6_token
"
]
;
then
_dns_dynv6_rm_http
return
$?
else
_info
"using key file
$dynv6_keyfile
"
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
if
!
_get_domain
"
$fulldomain
"
"
$_your_hosts
"
;
then
_err
"Host not found on your account"
return
1
fi
_debug
"found host on your account"
_info
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
"
\"
$_host
\"
"
records del
"
\"
$_record
\"
"
txt
)
"
return
0
>>>>>>>
formatting
fi
_debug
"found host on your account"
_info
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
"
\"
$_host
\"
"
records del
"
\"
$_record
\"
"
txt
)
"
...
...
@@ -94,6 +136,7 @@ _get_domain() {
# Usage: No input required
#returns
#dynv6_keyfile path to the key that will be used
<<<<<<
< HEAD
_get_keyfile
()
{
_debug
"get keyfile method called"
dynv6_keyfile
=
"
${
dynv6_keyfile
:-
$(
_readaccountconf_mutable dynv6_keyfile
)
}
"
...
...
@@ -111,5 +154,174 @@ _get_keyfile() {
dynv6_keyfile
=
"
$KEY
"
fi
_saveaccountconf_mutable dynv6_keyfile
"
$dynv6_keyfile
"
=======
_get_authentication
()
{
if
[
"
$DYNV6_TOKEN
"
]
;
then
_debug
"Going to use the HTTP Token you specifed and saving it for futur use"
_saveaccountconf_mutable dynv6_token
"
$DYNV6_TOKEN
"
dynv6_token
=
"
$DYNV6_TOKEN
"
elif
[
"
$(
_readaccountconf_mutable dynv6_token
)
"
]
;
then
_debug
"Found a previously used HTTP token going to use that"
dynv6_token
=
"
$(
_readaccountconf_mutable dynv6_token
)
"
else
_debug
"no HTTP token found. Looking for an SSH key"
dynv6_keyfile
=
"
${
dynv6_keyfile
:-
$(
_readaccountconf_mutable dynv6_keyfile
)
}
"
_debug
"Your key is
$dynv6_keyfile
"
if
[
-z
"
$dynv6_keyfile
"
]
;
then
if
[
-z
"
$KEY
"
]
;
then
_err
"You did not specify a key to use with dynv6"
_info
"Creating new dynv6 API key to add to dynv6.com"
_generate_new_key
_info
"Please add this key to dynv6.com
$(
cat
"
$dynv6_keyfile
.pub"
)
"
_info
"Hit Enter to continue"
read
-r
_
#save the credentials to the account conf file.
else
dynv6_keyfile
=
"
$KEY
"
fi
_saveaccountconf_mutable dynv6_keyfile
"
$dynv6_keyfile
"
fi
fi
}
_dns_dynv6_add_http
()
{
_debug
"Got HTTP token form _get_authentication method. Going to use the HTTP API"
if
!
_get_zone_id
"
$fulldomain
"
;
then
_err
"Could not find a matching zone for
$fulldomain
. Maybe your HTTP Token is not authorized to access the zone"
return
1
fi
_get_zone_name
"
$_zone_id
"
record
=
"
${
fulldomain
%%.
$_zone_name
}
"
_set_record TXT
"
$record
"
"
$txtvalue
"
if
_contains
"
$response
"
"
$txtvalue
"
;
then
_info
"Successfully added record"
return
0
else
_err
"Something went wrong while adding the record"
return
1
fi
}
_dns_dynv6_rm_http
()
{
_debug
"Got HTTP token form _get_authentication method. Going to use the HTTP API"
if
!
_get_zone_id
"
$fulldomain
"
;
then
_err
"Could not find a matching zone for
$fulldomain
. Maybe your HTTP Token is not authorized to access the zone"
return
1
fi
_get_zone_name
"
$_zone_id
"
record
=
"
${
fulldomain
%%.
$_zone_name
}
"
_get_record_id
"
$_zone_id
"
"
$record
"
"
$txtvalue
"
_del_record
"
$_zone_id
"
"
$_record_id
"
if
[
-z
"
$response
"
]
;
then
_info
"Successfully deleted record"
return
0
else
_err
"Something went wrong while deleting the record"
return
1
fi
}
#get the zoneid for a specifc record or zone
#usage: _get_zone_id §record
#where $record is the record to get the id for
#returns _zone_id the id of the zone
_get_zone_id
()
{
record
=
"
$1
"
_debug
"getting zone id for
$record
"
_dynv6_rest GET zones
zones
=
"
$(
echo
"
$response
"
|
tr
'}'
'\n'
|
tr
','
'\n'
|
grep
name |
sed
's/\[//g'
|
tr
-d
'{'
|
tr
-d
'"'
)
"
#echo $zones
selected
=
""
for
z
in
$zones
;
do
z
=
"
${
z
#name
:
}
"
_debug zone:
"
$z
"
if
_contains
"
$record
"
"
$z
"
;
then
_debug
"
$z
found in
$record
"
selected
=
"
$z
"
fi
done
if
[
-z
"
$selected
"
]
;
then
_err
"no zone found"
return
1
fi
zone_id
=
"
$(
echo
"
$response
"
|
tr
'}'
'\n'
|
grep
"
$selected
"
|
tr
','
'\n'
|
grep id
|
tr
-d
'"'
)
"
_zone_id
=
"
${
zone_id
#id
:
}
"
_debug
"zone id:
$_zone_id
"
}
_get_zone_name
()
{
_zone_id
=
"
$1
"
_dynv6_rest GET zones/
"
$_zone_id
"
_zone_name
=
"
$(
echo
"
$response
"
|
tr
','
'\n'
|
tr
-d
'{'
|
grep
name |
tr
-d
'"'
)
"
_zone_name
=
"
${
_zone_name
#name
:
}
"
}
#usaage _get_record_id $zone_id $record
# where zone_id is thevalue returned by _get_zone_id
# and record ist in the form _acme.www for an fqdn of _acme.www.example.com
# returns _record_id
_get_record_id
()
{
_zone_id
=
"
$1
"
record
=
"
$2
"
value
=
"
$3
"
_dynv6_rest GET
"zones/
$_zone_id
/records"
if
!
_get_record_id_from_response
"
$response
"
;
then
_err
"no such record
$record
found in zone
$_zone_id
"
return
1
fi
}
_get_record_id_from_response
()
{
response
=
"
$1
"
_record_id
=
"
$(
echo
"
$response
"
|
tr
'}'
'\n'
|
grep
"
\"
name
\"
:
\"
$record
\"
"
|
grep
"
\"
data
\"
:
\"
$value
\"
"
|
tr
','
'\n'
|
grep id
|
tr
-d
'"'
|
tr
-d
'id:'
)
"
#_record_id="${_record_id#id:}"
if
[
-z
"
$_record_id
"
]
;
then
_err
"no such record:
$record
found in zone
$_zone_id
"
return
1
fi
_debug
"record id:
$_record_id
"
return
0
}
#usage: _set_record TXT _acme_challenge.www longvalue 12345678
#zone id is optional can also be set as vairable bevor calling this method
_set_record
()
{
type
=
"
$1
"
record
=
"
$2
"
value
=
"
$3
"
if
[
"
$4
"
]
;
then
_zone_id
=
"
$4
"
fi
data
=
"{
\"
name
\"
:
\"
$record
\"
,
\"
data
\"
:
\"
$value
\"
,
\"
type
\"
:
\"
$type
\"
}"
#data='{ "name": "acme.test.thorn.dynv6.net", "type": "A", "data": "192.168.0.1"}'
echo
"
$data
"
#"{\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"ttl\":120}"
_dynv6_rest POST
"zones/
$_zone_id
/records"
"
$data
"
}
_del_record
()
{
_zone_id
=
$1
_record_id
=
$2
_dynv6_rest DELETE zones/
"
$_zone_id
"
/records/
"
$_record_id
"
}
_dynv6_rest
()
{
m
=
$1
#method GET,POST,DELETE or PUT
ep
=
"
$2
"
#the endpoint
data
=
"
$3
"
_debug
"
$ep
"
token_trimmed
=
$(
echo
"
$dynv6_token
"
|
tr
-d
'"'
)
export
_H1
=
"Authorization: Bearer
$token_trimmed
"
export
_H2
=
"Content-Type: application/json"
if
[
"
$m
"
!=
"GET"
]
;
then
_debug data
"
$data
"
response
=
"
$(
_post
"
$data
"
"
$dynv6_api
/
$ep
"
""
"
$m
"
)
"
else
response
=
"
$(
_get
"
$dynv6_api
/
$ep
"
)
"
>>>>>>>
formatting
fi
}
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