summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStéphane Mourey <github.com@stephanemourey.fr>2023-04-24 18:36:37 +0200
committerGitHub <noreply@github.com>2023-04-24 10:36:37 -0600
commit2943c41884278ec5fc44bcb55d2b9b088838cdc2 (patch)
treed71f062890fa9f3766fc3a79210ef742c845538b
parent53b6fab125f3f2f149d59fcfe13b1e8b1735da56 (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>
-rw-r--r--modules/caddyhttp/templates/tplcontext.go17
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) {