]>
Commit | Line | Data |
---|---|---|
0f54cf83 S |
1 | #!/usr/bin/env sh |
2 | #Author StefanAbl | |
3 | #Usage specify a private keyfile to use with dynv6 'export KEY="path/to/keyfile"' | |
4 | #if no keyfile is specified, you will be asked if you want to create one in /home/$USER/.ssh/dynv6 and /home/$USER/.ssh/dynv6.pub | |
5 | ######## Public functions ##################### | |
6 | # Please Read this guide first: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide | |
7 | #Usage: dns_myapi_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" | |
8 | dns_dynv6_add() { | |
9 | fulldomain=$1 | |
10 | txtvalue=$2 | |
11 | _info "Using dynv6 api" | |
12 | _debug fulldomain "$fulldomain" | |
13 | _debug txtvalue "$txtvalue" | |
14 | _get_keyfile | |
0f54cf83 S |
15 | _info "using keyfile $dynv6_keyfile" |
16 | _get_domain "$fulldomain" | |
17 | _your_hosts="$(ssh -i "$dynv6_keyfile" api@dynv6.com hosts)" | |
18 | if ! _contains "$_your_hosts" "$_host"; then | |
19 | _debug "The host is $_host and the record $_record" | |
20 | _debug "Dynv6 returned $_your_hosts" | |
eca57bee | 21 | _err "The host $_host does not exist on your dynv6 account" |
0f54cf83 S |
22 | return 1 |
23 | fi | |
24 | _debug "found host on your account" | |
25 | returnval="$(ssh -i "$dynv6_keyfile" api@dynv6.com hosts \""$_host"\" records set \""$_record"\" txt data \""$txtvalue"\")" | |
26 | _debug "Dynv6 returend this after record was added: $returnval" | |
27 | if _contains "$returnval" "created"; then | |
28 | return 0 | |
29 | elif _contains "$returnval" "updated"; then | |
30 | return 0 | |
31 | else | |
32 | _err "Something went wrong! it does not seem like the record was added succesfully" | |
33 | return 1 | |
34 | fi | |
35 | return 1 | |
36 | } | |
37 | #Usage: fulldomain txtvalue | |
38 | #Remove the txt record after validation. | |
39 | dns_dynv6_rm() { | |
40 | fulldomain=$1 | |
41 | txtvalue=$2 | |
42 | _info "Using dynv6 api" | |
43 | _debug fulldomain "$fulldomain" | |
44 | _debug txtvalue "$txtvalue" | |
45 | _get_keyfile | |
46 | _info "using keyfile $dynv6_keyfile" | |
47 | _get_domain "$fulldomain" | |
48 | _your_hosts="$(ssh -i "$dynv6_keyfile" api@dynv6.com hosts)" | |
49 | if ! _contains "$_your_hosts" "$_host"; then | |
50 | _debug "The host is $_host and the record $_record" | |
51 | _debug "Dynv6 returned $_your_hosts" | |
eca57bee | 52 | _err "The host $_host does not exist on your dynv6 account" |
0f54cf83 S |
53 | return 1 |
54 | fi | |
55 | _debug "found host on your account" | |
56 | _info "$(ssh -i "$dynv6_keyfile" api@dynv6.com hosts "\"$_host\"" records del "\"$_record\"" txt)" | |
57 | return 0 | |
58 | ||
59 | } | |
60 | #################### Private functions below ################################## | |
61 | #Usage: No Input required | |
62 | #returns | |
63 | #dynv6_keyfile the path to the new keyfile that has been generated | |
64 | _generate_new_key() { | |
65 | dynv6_keyfile="$(eval echo ~"$USER")/.ssh/dynv6" | |
66 | _info "Path to key file used: $dynv6_keyfile" | |
67 | if [ ! -f "$dynv6_keyfile" ] && [ ! -f "$dynv6_keyfile.pub" ]; then | |
68 | _debug "generating key in $dynv6_keyfile and $dynv6_keyfile.pub" | |
69 | ssh-keygen -f "$dynv6_keyfile" -t ssh-ed25519 -N '' | |
70 | else | |
71 | _err "There is already a file in $dynv6_keyfile or $dynv6_keyfile.pub" | |
72 | return 1 | |
73 | fi | |
0f54cf83 S |
74 | } |
75 | #Usage: _acme-challenge.www.example.dynv6.net | |
76 | #returns | |
77 | #_host= example.dynv6.net | |
78 | #_record=_acme-challenge.www | |
79 | #aborts if not a valid domain | |
80 | _get_domain() { | |
81 | _full_domain="$1" | |
82 | _debug "getting domain for $_full_domain" | |
70b49980 | 83 | if ! _contains "$_full_domain" 'dynv6.net' && ! _contains "$_full_domain" 'dns.army' && ! _contains "$_full_domain" 'dns.navy' && ! _contains "$_full_domain" 'v6.rocks'; then |
0f54cf83 S |
84 | _err "The hosts does not seem to be a dynv6 host" |
85 | return 1 | |
86 | fi | |
87 | _record="${_full_domain%.*}" | |
88 | _record="${_record%.*}" | |
89 | _record="${_record%.*}" | |
90 | _debug "The record we are ging to use is $_record" | |
91 | _host="$_full_domain" | |
92 | while [ "$(echo "$_host" | grep -o '\.' | wc -l)" != "2" ]; do | |
93 | _host="${_host#*.}" | |
94 | done | |
95 | _debug "And the host is $_host" | |
96 | return 0 | |
97 | ||
98 | } | |
99 | ||
100 | # Usage: No input required | |
101 | #returns | |
102 | #dynv6_keyfile path to the key that will be used | |
103 | _get_keyfile() { | |
6e3ba3ca | 104 | _debug "get keyfile method called" |
0f54cf83 S |
105 | dynv6_keyfile="${dynv6_keyfile:-$(_readaccountconf_mutable dynv6_keyfile)}" |
106 | _debug Your key is "$dynv6_keyfile" | |
107 | if [ -z "$dynv6_keyfile" ]; then | |
108 | if [ -z "$KEY" ]; then | |
109 | _err "You did not specify a key to use with dynv6" | |
110 | _info "Creating new dynv6 api key to add to dynv6.com" | |
111 | _generate_new_key | |
112 | _info "Please add this key to dynv6.com $(cat "$dynv6_keyfile.pub")" | |
113 | _info "Hit Enter to contiue" | |
6e3ba3ca | 114 | read -r _ |
0f54cf83 S |
115 | #save the credentials to the account conf file. |
116 | else | |
117 | dynv6_keyfile="$KEY" | |
118 | fi | |
119 | _saveaccountconf_mutable dynv6_keyfile "$dynv6_keyfile" | |
120 | fi | |
0f54cf83 | 121 | } |