Set filename in Content-Disposition if filename=x is passed in URI query

License: MIT
Signed-off-by: Iaroslav Gridin <voker57@gmail.com>
This commit is contained in:
Iaroslav Gridin 2017-08-29 02:30:45 +03:00
parent 2140aa9578
commit 7b34b7f533
No known key found for this signature in database
GPG Key ID: 5B0BE39D93A8E0AC
2 changed files with 14 additions and 2 deletions

View File

@ -6,6 +6,7 @@ import (
"fmt"
"io"
"net/http"
"net/url"
"os"
gopath "path"
"runtime/debug"
@ -131,7 +132,6 @@ func (i *gatewayHandler) optionsHandler(w http.ResponseWriter, r *http.Request)
}
func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) {
urlPath := r.URL.Path
escapedURLPath := r.URL.EscapedPath()
@ -266,7 +266,14 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
}
if !dir {
name := gopath.Base(urlPath)
urlFilename := r.URL.Query().Get("filename")
var name string
if urlFilename != "" {
w.Header().Set("Content-Disposition", fmt.Sprintf("inline; filename*=UTF-8''%s", url.PathEscape(urlFilename)))
name = urlFilename
} else {
name = gopath.Base(urlPath)
}
i.serveFile(w, r, name, modtime, dr)
return
}

View File

@ -31,6 +31,11 @@ test_expect_success "GET IPFS path succeeds" '
curl -sfo actual "http://127.0.0.1:$port/ipfs/$HASH"
'
test_expect_success "GET IPFS path with explicit filename succeeds with proper header" "
curl -fo actual -D actual_headers 'http://127.0.0.1:$port/ipfs/$HASH?filename=testтест' &&
grep -F \"Content-Disposition: inline; filename*=UTF-8''test%D1%82%D0%B5%D1%81%D1%82\" actual_headers
"
test_expect_success "GET IPFS path output looks good" '
test_cmp expected actual &&
rm actual