forked from cretz/caddy-tlsconsul
-
-
Notifications
You must be signed in to change notification settings - Fork 18
/
module.go
126 lines (111 loc) · 2.55 KB
/
module.go
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package storageconsul
import (
"os"
"strconv"
"github.com/caddyserver/caddy/v2"
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
"github.com/caddyserver/certmagic"
)
func init() {
caddy.RegisterModule(ConsulStorage{})
}
func (ConsulStorage) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{
ID: "caddy.storage.consul",
New: func() caddy.Module {
return New()
},
}
}
// Provision is called by Caddy to prepare the module
func (cs *ConsulStorage) Provision(ctx caddy.Context) error {
cs.logger = ctx.Logger(cs).Sugar()
// override default values from ENV
if aesKey := os.Getenv(EnvNameAESKey); aesKey != "" {
cs.AESKey = []byte(aesKey)
}
if prefix := os.Getenv(EnvNamePrefix); prefix != "" {
cs.Prefix = prefix
}
if valueprefix := os.Getenv(EnvValuePrefix); valueprefix != "" {
cs.ValuePrefix = valueprefix
}
err := cs.createConsulClient()
if err != nil {
return err
}
peers, _ := cs.ConsulClient.Status().Peers()
cs.logger.Infof("TLS storage is using Consul at %v", peers)
return nil
}
func (cs *ConsulStorage) CertMagicStorage() (certmagic.Storage, error) {
return cs, nil
}
// UnmarshalCaddyfile parses plugin settings from Caddyfile
//
// storage consul {
// address "127.0.0.1:8500"
// token "consul-access-token"
// timeout 10
// prefix "caddytls"
// value_prefix "myprefix"
// aes_key "consultls-1234567890-caddytls-32"
// tls_enabled "false"
// tls_insecure "true"
// }
func (cs *ConsulStorage) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
for d.Next() {
key := d.Val()
var value string
if !d.Args(&value) {
continue
}
switch key {
case "address":
if value != "" {
parsedAddress, err := caddy.ParseNetworkAddress(value)
if err == nil {
cs.Address = parsedAddress.JoinHostPort(0)
}
}
case "token":
if value != "" {
cs.Token = value
}
case "timeout":
if value != "" {
timeParse, err := strconv.Atoi(value)
if err == nil {
cs.Timeout = timeParse
}
}
case "prefix":
if value != "" {
cs.Prefix = value
}
case "value_prefix":
if value != "" {
cs.ValuePrefix = value
}
case "aes_key":
if value != "" {
cs.AESKey = []byte(value)
}
case "tls_enabled":
if value != "" {
tlsParse, err := strconv.ParseBool(value)
if err == nil {
cs.TlsEnabled = tlsParse
}
}
case "tls_insecure":
if value != "" {
tlsInsecureParse, err := strconv.ParseBool(value)
if err == nil {
cs.TlsInsecure = tlsInsecureParse
}
}
}
}
return nil
}