diff options
author | Matthew Holt <[email protected]> | 2024-05-22 18:47:03 -0600 |
---|---|---|
committer | Matthew Holt <[email protected]> | 2024-05-22 18:47:03 -0600 |
commit | 2ce5c6526938b604586c987fa3d31117721e40a6 (patch) | |
tree | 17390ca92b2830874de0831db059563dfc068b71 | |
parent | 61917c34434204ae676411d41facffa7c7633d3a (diff) | |
download | caddy-2ce5c6526938b604586c987fa3d31117721e40a6.tar.gz caddy-2ce5c6526938b604586c987fa3d31117721e40a6.zip |
core: Fix bug in AppIfConfigured (fix #6336)
-rw-r--r-- | context.go | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/context.go b/context.go index 53d94a524..5b8c10703 100644 --- a/context.go +++ b/context.go @@ -455,20 +455,27 @@ func (ctx Context) App(name string) (any, error) { // AppIfConfigured is like App, but it returns an error if the // app has not been configured. This is useful when the app is -// required and its absence is a configuration error, or when +// required and its absence is a configuration error; or when // the app is optional and you don't want to instantiate a -// new one that hasn't been explicitly configured. +// new one that hasn't been explicitly configured. If the app +// is not in the configuration, the error wraps ErrNotConfigured. func (ctx Context) AppIfConfigured(name string) (any, error) { + if ctx.cfg == nil { + return nil, fmt.Errorf("app module %s: %w", name, ErrNotConfigured) + } if app, ok := ctx.cfg.apps[name]; ok { return app, nil } appRaw := ctx.cfg.AppsRaw[name] if appRaw == nil { - return nil, fmt.Errorf("app module %s is not configured", name) + return nil, fmt.Errorf("app module %s: %w", name, ErrNotConfigured) } return ctx.App(name) } +// ErrNotConfigured indicates a module is not configured. +var ErrNotConfigured = fmt.Errorf("module not configured") + // Storage returns the configured Caddy storage implementation. func (ctx Context) Storage() certmagic.Storage { return ctx.cfg.storage |