From 2943c41884278ec5fc44bcb55d2b9b088838cdc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Mourey?= Date: Mon, 24 Apr 2023 18:36:37 +0200 Subject: templates: Add `fileStat` function (#5497) * Add isDir template function * Update modules/caddyhttp/templates/tplcontext.go Co-authored-by: Mohammed Al Sahaf * 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 --- modules/caddyhttp/templates/tplcontext.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'modules/caddyhttp/templates') 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) { -- cgit v1.2.3