Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS
Mirrored from https://github.com/Slazee/caddy.git
Synced Nov 12, 20:45 UTC
tls: accept placeholders in string values of certificate loaders (#5963)
* tls: loader: accept placeholders in string values * appease the linter
Mohammed Al Sahaf committed
Dec 4, 2023 at 19:23 UTC
4173e2c77ab883a509ef3be1cbdc868442c5a9b8
4 files changed
+79
-3
modules/caddytls/fileloader.go
+24
-1
@@ -29,6 +29,26 @@ func init() {
29
// FileLoader loads certificates and their associated keys from disk.
30
type FileLoader []CertKeyFilePair
31
32
+// Provision implements caddy.Provisioner.
33
+func (fl FileLoader) Provision(ctx caddy.Context) error {
34
+ repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
35
+ if !ok {
36
+ repl = caddy.NewReplacer()
37
+ }
38
+ for k, pair := range fl {
39
+ for i, tag := range pair.Tags {
40
+ pair.Tags[i] = repl.ReplaceKnown(tag, "")
41
+ }
42
+ fl[k] = CertKeyFilePair{
43
+ Certificate: repl.ReplaceKnown(pair.Certificate, ""),
44
+ Key: repl.ReplaceKnown(pair.Key, ""),
45
+ Format: repl.ReplaceKnown(pair.Format, ""),
46
+ Tags: pair.Tags,
47
+ }
48
+ }
49
+ return nil
50
+}
51
+
52
// CaddyModule returns the Caddy module information.
53
func (FileLoader) CaddyModule() caddy.ModuleInfo {
54
return caddy.ModuleInfo{
@@ -87,4 +107,7 @@ func (fl FileLoader) LoadCertificates() ([]Certificate, error) {
107
}
108
109
// Interface guard
90
-var _ CertificateLoader = (FileLoader)(nil)
110
+var (
111
+ _ CertificateLoader = (FileLoader)(nil)
112
+ _ caddy.Provisioner = (FileLoader)(nil)
113
+)
modules/caddytls/folderloader.go
+16
-1
@@ -43,6 +43,18 @@ func (FolderLoader) CaddyModule() caddy.ModuleInfo {
43
}
44
}
45
46
+// Provision implements caddy.Provisioner.
47
+func (fl FolderLoader) Provision(ctx caddy.Context) error {
48
+ repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
49
+ if !ok {
50
+ repl = caddy.NewReplacer()
51
+ }
52
+ for k, path := range fl {
53
+ fl[k] = repl.ReplaceKnown(path, "")
54
+ }
55
+ return nil
56
+}
57
+
58
// LoadCertificates loads all the certificates+keys in the directories
59
// listed in fl from all files ending with .pem. This method of loading
60
// certificates expects the certificate and key to be bundled into the
@@ -146,4 +158,7 @@ func tlsCertFromCertAndKeyPEMBundle(bundle []byte) (tls.Certificate, error) {
158
return cert, nil
159
}
160
149
-var _ CertificateLoader = (FolderLoader)(nil)
161
+var (
162
+ _ CertificateLoader = (FolderLoader)(nil)
163
+ _ caddy.Provisioner = (FolderLoader)(nil)
164
+)
modules/caddytls/pemloader.go
+23
-1
@@ -30,6 +30,25 @@ func init() {
30
// of not needing to store them on disk at all.
31
type PEMLoader []CertKeyPEMPair
32
33
+// Provision implements caddy.Provisioner.
34
+func (pl PEMLoader) Provision(ctx caddy.Context) error {
35
+ repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
36
+ if !ok {
37
+ repl = caddy.NewReplacer()
38
+ }
39
+ for k, pair := range pl {
40
+ for i, tag := range pair.Tags {
41
+ pair.Tags[i] = repl.ReplaceKnown(tag, "")
42
+ }
43
+ pl[k] = CertKeyPEMPair{
44
+ CertificatePEM: repl.ReplaceKnown(pair.CertificatePEM, ""),
45
+ KeyPEM: repl.ReplaceKnown(pair.KeyPEM, ""),
46
+ Tags: pair.Tags,
47
+ }
48
+ }
49
+ return nil
50
+}
51
+
52
// CaddyModule returns the Caddy module information.
53
func (PEMLoader) CaddyModule() caddy.ModuleInfo {
54
return caddy.ModuleInfo{
@@ -69,4 +88,7 @@ func (pl PEMLoader) LoadCertificates() ([]Certificate, error) {
88
}
89
90
// Interface guard
72
-var _ CertificateLoader = (PEMLoader)(nil)
91
+var (
92
+ _ CertificateLoader = (PEMLoader)(nil)
93
+ _ caddy.Provisioner = (PEMLoader)(nil)
94
+)
modules/caddytls/storageloader.go
+16
@@ -52,6 +52,22 @@ func (StorageLoader) CaddyModule() caddy.ModuleInfo {
52
func (sl *StorageLoader) Provision(ctx caddy.Context) error {
53
sl.storage = ctx.Storage()
54
sl.ctx = ctx
55
+
56
+ repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
57
+ if !ok {
58
+ repl = caddy.NewReplacer()
59
+ }
60
+ for k, pair := range sl.Pairs {
61
+ for i, tag := range pair.Tags {
62
+ pair.Tags[i] = repl.ReplaceKnown(tag, "")
63
+ }
64
+ sl.Pairs[k] = CertKeyFilePair{
65
+ Certificate: repl.ReplaceKnown(pair.Certificate, ""),
66
+ Key: repl.ReplaceKnown(pair.Key, ""),
67
+ Format: repl.ReplaceKnown(pair.Format, ""),
68
+ Tags: pair.Tags,
69
+ }
70
+ }
71
return nil
72
}
73