# dehydrated-digitalocean.sh -rw-r--r-- 974 bytes View raw
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/sh -eu

cmd=$1
domain=$2
token=$4

find_zone() {
	doctl compute domain list --no-header --format Domain | while read name; do
		if [ "${domain%.$name}" != "$domain" ]; then
			echo "$name"
		fi
	done
}

zone=$(find_zone)
if [ -z "$zone" ]; then
	echo >&2 "Cannot find apprioriate zone for $domain"
	exit 1
fi

challenge_domain="_acme-challenge.$domain"

case "$cmd" in
deploy_challenge)
	doctl compute domain records create "$zone" --record-name "$challenge_domain." --record-ttl 300 --record-type TXT --record-data "$token"
	;;
clean_challenge)
	doctl compute domain records list "$zone" --no-header --format ID,Type,Name,Data | while read rec_id rec_type rec_name rec_data; do
		if [ "$rec_type" = TXT ] && [ "$rec_name.$zone" = "$challenge_domain" ] && [ "$rec_data" = "$token" ]; then
			echo "Deleting record $rec_id"
			doctl compute domain records delete --force "$zone" "$rec_id"
			break
		fi
	done
	;;
*)
	echo >&2 "Unrecognized subcommand"
	exit 1
	;;
esac