diff options
author | Matthew Holt <mholt@users.noreply.github.com> | 2019-08-21 15:50:02 -0600 |
---|---|---|
committer | Matthew Holt <mholt@users.noreply.github.com> | 2019-08-21 15:50:02 -0600 |
commit | c0da7d487abcdcd9761220d75400f75584482b5f (patch) | |
tree | 2ea5f400a1c2bb58b8317d46f2e7f28006ee8351 | |
parent | 8420a2f250cf467a06c0081cb47a8f73b70e7f3f (diff) |
file_server: Automatically hide all involved Caddyfiles
-rw-r--r-- | caddyconfig/httpcaddyfile/directives.go | 20 | ||||
-rw-r--r-- | caddyconfig/httpcaddyfile/httptype.go | 1 | ||||
-rw-r--r-- | modules/caddyhttp/fileserver/caddyfile.go | 9 |
3 files changed, 30 insertions, 0 deletions
diff --git a/caddyconfig/httpcaddyfile/directives.go b/caddyconfig/httpcaddyfile/directives.go index 526ac87..dad27ba 100644 --- a/caddyconfig/httpcaddyfile/directives.go +++ b/caddyconfig/httpcaddyfile/directives.go @@ -81,6 +81,26 @@ type Helper struct { *caddyfile.Dispenser warnings *[]caddyconfig.Warning matcherDefs map[string]map[string]json.RawMessage + parentBlock caddyfile.ServerBlock +} + +// Caddyfiles returns the list of config files from +// which tokens in the current server block were loaded. +func (h Helper) Caddyfiles() []string { + // first obtain set of names of files involved + // in this server block, without duplicates + files := make(map[string]struct{}) + for _, segment := range h.parentBlock.Segments { + for _, token := range segment { + files[token.File] = struct{}{} + } + } + // then convert the set into a slice + filesSlice := make([]string, 0, len(files)) + for file := range files { + filesSlice = append(filesSlice, file) + } + return filesSlice } // JSON converts val into JSON. Any errors are added to warnings. diff --git a/caddyconfig/httpcaddyfile/httptype.go b/caddyconfig/httpcaddyfile/httptype.go index e7e7c87..00ce2cf 100644 --- a/caddyconfig/httpcaddyfile/httptype.go +++ b/caddyconfig/httpcaddyfile/httptype.go @@ -95,6 +95,7 @@ func (st ServerType) Setup(originalServerBlocks []caddyfile.ServerBlock, Dispenser: caddyfile.NewDispenser(segment), warnings: &warnings, matcherDefs: matcherDefs, + parentBlock: sb.block, }) if err != nil { return nil, warnings, fmt.Errorf("parsing caddyfile tokens for '%s': %v", dir, err) diff --git a/modules/caddyhttp/fileserver/caddyfile.go b/modules/caddyhttp/fileserver/caddyfile.go index 6fa94e7..902bd14 100644 --- a/modules/caddyhttp/fileserver/caddyfile.go +++ b/modules/caddyhttp/fileserver/caddyfile.go @@ -76,6 +76,15 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) fsrv.Root = "{http.var.root}" } + // hide the Caddyfile (and any imported Caddyfiles) + if configFiles := h.Caddyfiles(); len(configFiles) > 0 { + for _, file := range configFiles { + if !fileHidden(file, fsrv.Hide) { + fsrv.Hide = append(fsrv.Hide, file) + } + } + } + return &fsrv, nil } |