diff options
author | Stéphane Mourey <github.com@stephanemourey.fr> | 2023-04-24 18:36:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-24 10:36:37 -0600 |
commit | 2943c41884278ec5fc44bcb55d2b9b088838cdc2 (patch) | |
tree | d71f062890fa9f3766fc3a79210ef742c845538b /modules/caddyhttp | |
parent | 53b6fab125f3f2f149d59fcfe13b1e8b1735da56 (diff) |
templates: Add `fileStat` function (#5497)
* Add isDir template function
* Update modules/caddyhttp/templates/tplcontext.go
Co-authored-by: Mohammed Al Sahaf <msaa1990@gmail.com>
* Fix funcIsDir return value on error
* Fix funcIsDir return false when root file system not specified
* Add stat function, remove isDir function
* Remove isDir function (really)
* Rename stat to fileStat
---------
Co-authored-by: Mohammed Al Sahaf <msaa1990@gmail.com>
Diffstat (limited to 'modules/caddyhttp')
-rw-r--r-- | modules/caddyhttp/templates/tplcontext.go | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/modules/caddyhttp/templates/tplcontext.go b/modules/caddyhttp/templates/tplcontext.go index ddad24f..c500381 100644 --- a/modules/caddyhttp/templates/tplcontext.go +++ b/modules/caddyhttp/templates/tplcontext.go @@ -18,6 +18,7 @@ import ( "bytes" "fmt" "io" + "io/fs" "net" "net/http" "os" @@ -79,6 +80,7 @@ func (c *TemplateContext) NewTemplate(tplName string) *template.Template { "markdown": c.funcMarkdown, "splitFrontMatter": c.funcSplitFrontMatter, "listFiles": c.funcListFiles, + "fileStat": c.funcFileStat, "env": c.funcEnv, "placeholder": c.funcPlaceholder, "fileExists": c.funcFileExists, @@ -395,6 +397,21 @@ func (c TemplateContext) funcFileExists(filename string) (bool, error) { return false, nil } +// funcStat returns Stat of a filename +func (c TemplateContext) funcFileStat(filename string) (fs.FileInfo, error) { + if c.Root == nil { + return nil, fmt.Errorf("root file system not specified") + } + + file, err := c.Root.Open(path.Clean(filename)) + if err != nil { + return nil, err + } + defer file.Close() + + return file.Stat() +} + // funcHTTPError returns a structured HTTP handler error. EXPERIMENTAL; SUBJECT TO CHANGE. // Example usage: `{{if not (fileExists $includeFile)}}{{httpError 404}}{{end}}` func (c TemplateContext) funcHTTPError(statusCode int) (bool, error) { |