tls: accept placeholders in string values of certificate loaders (#5963)

* tls: loader: accept placeholders in string values

* appease the linter
This commit is contained in:
Mohammed Al Sahaf 2023-12-04 19:23:15 +03:00 committed by Matthew Holt
parent 2f7ceb5774
commit 908e956927
4 changed files with 79 additions and 3 deletions

View File

@ -29,6 +29,26 @@ func init() {
// FileLoader loads certificates and their associated keys from disk. // FileLoader loads certificates and their associated keys from disk.
type FileLoader []CertKeyFilePair type FileLoader []CertKeyFilePair
// Provision implements caddy.Provisioner.
func (fl FileLoader) Provision(ctx caddy.Context) error {
repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
if !ok {
repl = caddy.NewReplacer()
}
for k, pair := range fl {
for i, tag := range pair.Tags {
pair.Tags[i] = repl.ReplaceKnown(tag, "")
}
fl[k] = CertKeyFilePair{
Certificate: repl.ReplaceKnown(pair.Certificate, ""),
Key: repl.ReplaceKnown(pair.Key, ""),
Format: repl.ReplaceKnown(pair.Format, ""),
Tags: pair.Tags,
}
}
return nil
}
// CaddyModule returns the Caddy module information. // CaddyModule returns the Caddy module information.
func (FileLoader) CaddyModule() caddy.ModuleInfo { func (FileLoader) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{ return caddy.ModuleInfo{
@ -87,4 +107,7 @@ func (fl FileLoader) LoadCertificates() ([]Certificate, error) {
} }
// Interface guard // Interface guard
var _ CertificateLoader = (FileLoader)(nil) var (
_ CertificateLoader = (FileLoader)(nil)
_ caddy.Provisioner = (FileLoader)(nil)
)

View File

@ -43,6 +43,18 @@ func (FolderLoader) CaddyModule() caddy.ModuleInfo {
} }
} }
// Provision implements caddy.Provisioner.
func (fl FolderLoader) Provision(ctx caddy.Context) error {
repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
if !ok {
repl = caddy.NewReplacer()
}
for k, path := range fl {
fl[k] = repl.ReplaceKnown(path, "")
}
return nil
}
// LoadCertificates loads all the certificates+keys in the directories // LoadCertificates loads all the certificates+keys in the directories
// listed in fl from all files ending with .pem. This method of loading // listed in fl from all files ending with .pem. This method of loading
// certificates expects the certificate and key to be bundled into the // certificates expects the certificate and key to be bundled into the
@ -146,4 +158,7 @@ func tlsCertFromCertAndKeyPEMBundle(bundle []byte) (tls.Certificate, error) {
return cert, nil return cert, nil
} }
var _ CertificateLoader = (FolderLoader)(nil) var (
_ CertificateLoader = (FolderLoader)(nil)
_ caddy.Provisioner = (FolderLoader)(nil)
)

View File

@ -30,6 +30,25 @@ func init() {
// of not needing to store them on disk at all. // of not needing to store them on disk at all.
type PEMLoader []CertKeyPEMPair type PEMLoader []CertKeyPEMPair
// Provision implements caddy.Provisioner.
func (pl PEMLoader) Provision(ctx caddy.Context) error {
repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
if !ok {
repl = caddy.NewReplacer()
}
for k, pair := range pl {
for i, tag := range pair.Tags {
pair.Tags[i] = repl.ReplaceKnown(tag, "")
}
pl[k] = CertKeyPEMPair{
CertificatePEM: repl.ReplaceKnown(pair.CertificatePEM, ""),
KeyPEM: repl.ReplaceKnown(pair.KeyPEM, ""),
Tags: pair.Tags,
}
}
return nil
}
// CaddyModule returns the Caddy module information. // CaddyModule returns the Caddy module information.
func (PEMLoader) CaddyModule() caddy.ModuleInfo { func (PEMLoader) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{ return caddy.ModuleInfo{
@ -69,4 +88,7 @@ func (pl PEMLoader) LoadCertificates() ([]Certificate, error) {
} }
// Interface guard // Interface guard
var _ CertificateLoader = (PEMLoader)(nil) var (
_ CertificateLoader = (PEMLoader)(nil)
_ caddy.Provisioner = (PEMLoader)(nil)
)

View File

@ -52,6 +52,22 @@ func (StorageLoader) CaddyModule() caddy.ModuleInfo {
func (sl *StorageLoader) Provision(ctx caddy.Context) error { func (sl *StorageLoader) Provision(ctx caddy.Context) error {
sl.storage = ctx.Storage() sl.storage = ctx.Storage()
sl.ctx = ctx sl.ctx = ctx
repl, ok := ctx.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
if !ok {
repl = caddy.NewReplacer()
}
for k, pair := range sl.Pairs {
for i, tag := range pair.Tags {
pair.Tags[i] = repl.ReplaceKnown(tag, "")
}
sl.Pairs[k] = CertKeyFilePair{
Certificate: repl.ReplaceKnown(pair.Certificate, ""),
Key: repl.ReplaceKnown(pair.Key, ""),
Format: repl.ReplaceKnown(pair.Format, ""),
Tags: pair.Tags,
}
}
return nil return nil
} }