From 0b7a185ed9170215eebf59340574489ab4f0ea14 Mon Sep 17 00:00:00 2001 From: wernerr Date: Thu, 12 May 2022 13:54:20 +0200 Subject: [PATCH] Add an option to allow empty root in the fsHandler this is necessary to restore the capabilities before the commit https://github.com/valyala/fasthttp/commit/c7576cc10cabfc9c993317a2d3f8355497bea156 and to allow further functionality to be docked from the outside which is not affected by setting the root dir afterwards https://github.com/gofiber/fiber/pull/1882#issuecomment-1120832500 --- fs.go | 22 +++++++++++++--------- go.sum | 1 - 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/fs.go b/fs.go index d92484881f..24b88c6e0a 100644 --- a/fs.go +++ b/fs.go @@ -128,6 +128,7 @@ var ( rootFSOnce sync.Once rootFS = &FS{ Root: "", + AllowEmptyRoot: true, GenerateIndexPages: true, Compress: true, CompressBrotli: true, @@ -229,6 +230,12 @@ type FS struct { // Path to the root directory to serve files from. Root string + // Empty root specifications are always filled with the absolute path which exists in the current execution location of the application + // with this setting you can prevent this, for example if you want to handle absolute and relative paths with the requestUri + // + // By default the setting is false + AllowEmptyRoot bool + // List of index file names to try opening during directory access. // // For example: @@ -384,16 +391,13 @@ func (fs *FS) NewRequestHandler() RequestHandler { func (fs *FS) initRequestHandler() { root := fs.Root - // rootFS' handleRequest will do special treatment of absolute and relative paths - if fs != rootFS { - // serve files from the current working directory if root is empty - if len(root) == 0 || !filepath.IsAbs(root) { - path, err := os.Getwd() - if err != nil { - path = "." - } - root = path + "/" + root + // serve files from the current working directory if root is empty + if (!fs.AllowEmptyRoot && len(root) == 0) || (len(root) > 0 && !filepath.IsAbs(root)) { + path, err := os.Getwd() + if err != nil { + path = "." } + root = path + "/" + root // convert the root directory slashes to the native format root = filepath.FromSlash(root) } diff --git a/go.sum b/go.sum index 8595e94eba..381cb8a3cf 100644 --- a/go.sum +++ b/go.sum @@ -19,7 +19,6 @@ golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1i golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=