]>
Commit | Line | Data |
---|---|---|
693d692a | 1 | #!/usr/bin/env sh |
2 | ||
3 | # MyDevil.net API (2019-02-03) | |
4 | # | |
5 | # MyDevil.net already supports automatic Let's Encrypt certificates, | |
6 | # except for wildcard domains. | |
7 | # | |
8 | # This script depends on `devil` command that MyDevil.net provides, | |
9 | # which means that it works only on server side. | |
10 | # | |
11 | # Author: Marcin Konicki <https://ahwayakchih.neoni.net> | |
12 | # | |
13 | ######## Public functions ##################### | |
14 | ||
15 | # Usage: mydevil_deploy domain keyfile certfile cafile fullchain | |
16 | mydevil_deploy() { | |
17 | _cdomain="$1" | |
18 | _ckey="$2" | |
19 | _ccert="$3" | |
20 | _cca="$4" | |
21 | _cfullchain="$5" | |
22 | ip="" | |
23 | ||
24 | _debug _cdomain "$_cdomain" | |
25 | _debug _ckey "$_ckey" | |
26 | _debug _ccert "$_ccert" | |
27 | _debug _cca "$_cca" | |
28 | _debug _cfullchain "$_cfullchain" | |
29 | ||
30 | if ! _exists "devil"; then | |
31 | _err "Could not find 'devil' command." | |
32 | return 1 | |
33 | fi | |
34 | ||
35 | ip=$(mydevil_get_ip "$_cdomain") | |
36 | if [ -z "$ip" ]; then | |
37 | _err "Could not find IP for domain $_cdomain." | |
38 | return 1 | |
39 | fi | |
40 | ||
41 | # Delete old certificate first | |
42 | _info "Removing old certificate for $_cdomain at $ip" | |
43 | devil ssl www del "$ip" "$_cdomain" | |
44 | ||
45 | # Add new certificate | |
46 | _info "Adding new certificate for $_cdomain at $ip" | |
47 | devil ssl www add "$ip" "$_cfullchain" "$_ckey" "$_cdomain" || return 1 | |
48 | ||
49 | return 0 | |
50 | } | |
51 | ||
52 | #################### Private functions below ################################## | |
53 | ||
54 | # Usage: ip=$(mydevil_get_ip domain.com) | |
55 | # echo $ip | |
56 | mydevil_get_ip() { | |
57 | devil dns list "$1" | cut -w -s -f 3,7 | grep "^A$(printf '\t')" | cut -w -s -f 2 || return 1 | |
58 | return 0 | |
59 | } |