summaryrefslogtreecommitdiff
path: root/modules/caddyhttp
diff options
context:
space:
mode:
authorHayatoShiba <55432631+HayatoShiba@users.noreply.github.com>2021-09-18 20:51:59 +0900
committerGitHub <noreply@github.com>2021-09-18 05:51:59 -0600
commitd3a025994466c3d055fc3fc62bbb048c76f3e1c2 (patch)
treecb2c9951cd72e9a9f23c0c419724f8ad8c55421f /modules/caddyhttp
parent5fda9610f907482497a7b32abb2ab2f85a4e6906 (diff)
fileserver: Fix displayed file size if it is symlink (#4354)
* Fix file size if it is symlink * change the variable name for readability
Diffstat (limited to 'modules/caddyhttp')
-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.