summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/caddyhttp/fileserver/browse.go7
-rw-r--r--modules/caddyhttp/fileserver/browsetplcontext.go20
2 files changed, 21 insertions, 6 deletions
diff --git a/modules/caddyhttp/fileserver/browse.go b/modules/caddyhttp/fileserver/browse.go
index cd9bcbc..92a1e6e 100644
--- a/modules/caddyhttp/fileserver/browse.go
+++ b/modules/caddyhttp/fileserver/browse.go
@@ -137,7 +137,12 @@ func (fsrv *FileServer) loadDirectoryContents(dir *os.File, root, urlPath string
// user can presumably browse "up" to parent folder if path is longer than "/"
canGoUp := len(urlPath) > 1
- return fsrv.directoryListing(files, canGoUp, root, urlPath, repl), nil
+ l, err := fsrv.directoryListing(files, canGoUp, root, urlPath, repl)
+ if err != nil {
+ return browseTemplateContext{}, err
+ }
+
+ return l, nil
}
// browseApplyQueryParams applies query parameters to the listing.
diff --git a/modules/caddyhttp/fileserver/browsetplcontext.go b/modules/caddyhttp/fileserver/browsetplcontext.go
index 6aa7501..7dc4f08 100644
--- a/modules/caddyhttp/fileserver/browsetplcontext.go
+++ b/modules/caddyhttp/fileserver/browsetplcontext.go
@@ -27,7 +27,7 @@ import (
"github.com/dustin/go-humanize"
)
-func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root, urlPath string, repl *caddy.Replacer) browseTemplateContext {
+func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root, urlPath string, repl *caddy.Replacer) (browseTemplateContext, error) {
filesToHide := fsrv.transformHidePaths(repl)
var dirCount, fileCount int
@@ -52,11 +52,21 @@ func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root
fileCount++
}
+ fileIsSymlink := isSymlink(f)
+ size := f.Size()
+ if fileIsSymlink {
+ info, err := os.Stat(name)
+ if err != nil {
+ return browseTemplateContext{}, err
+ }
+ size = info.Size()
+ }
+
fileInfos = append(fileInfos, fileInfo{
IsDir: isDir,
- IsSymlink: isSymlink(f),
- Name: f.Name(),
- Size: f.Size(),
+ IsSymlink: fileIsSymlink,
+ Name: name,
+ Size: size,
URL: u.String(),
ModTime: f.ModTime().UTC(),
Mode: f.Mode(),
@@ -70,7 +80,7 @@ func (fsrv *FileServer) directoryListing(files []os.FileInfo, canGoUp bool, root
Items: fileInfos,
NumDirs: dirCount,
NumFiles: fileCount,
- }
+ }, nil
}
// browseTemplateContext provides the template context for directory listings.