diff --git a/handle/handle.go b/handle/handle.go index 0dc42c2..babedd3 100644 --- a/handle/handle.go +++ b/handle/handle.go @@ -49,15 +49,29 @@ func WithReferrers(serveFile FileServerFunc, referrers []string) FileServerFunc // to serving the requested file. func WithLogging(serveFile FileServerFunc) FileServerFunc { return func(w http.ResponseWriter, r *http.Request, name string) { - log.Printf( - "REQ from '%s': %s %s %s%s -> %s\n", - r.Referer(), - r.Method, - r.Proto, - r.Host, - r.URL.Path, - name, - ) + referer := r.Referer() + if 0 == len(referer) { + log.Printf( + "REQ from '%s': %s %s %s%s -> %s\n", + r.RemoteAddr, + r.Method, + r.Proto, + r.Host, + r.URL.Path, + name, + ) + } else { + log.Printf( + "REQ from '%s' (REFERER: '%s'): %s %s %s%s -> %s\n", + r.RemoteAddr, + referer, + r.Method, + r.Proto, + r.Host, + r.URL.Path, + name, + ) + } serveFile(w, r, name) } } diff --git a/handle/handle_test.go b/handle/handle_test.go index 0fdded9..11dd6d7 100644 --- a/handle/handle_test.go +++ b/handle/handle_test.go @@ -152,19 +152,29 @@ func TestWithReferrers(t *testing.T) { } func TestBasicWithAndWithoutLogging(t *testing.T) { + referer := "http://localhost" + noReferer := "" testCases := []struct { name string path string code int + refer string contents string }{ - {"Good base dir", "", ok, tmpIndex}, - {"Good base index", tmpIndexName, redirect, nothing}, - {"Good base file", tmpFileName, ok, tmpFile}, - {"Bad base file", tmpBadName, missing, notFound}, - {"Good subdir dir", subDir, ok, tmpSubIndex}, - {"Good subdir index", tmpSubIndexName, redirect, nothing}, - {"Good subdir file", tmpSubFileName, ok, tmpSubFile}, + {"Good base dir", "", ok, referer, tmpIndex}, + {"Good base index", tmpIndexName, redirect, referer, nothing}, + {"Good base file", tmpFileName, ok, referer, tmpFile}, + {"Bad base file", tmpBadName, missing, referer, notFound}, + {"Good subdir dir", subDir, ok, referer, tmpSubIndex}, + {"Good subdir index", tmpSubIndexName, redirect, referer, nothing}, + {"Good subdir file", tmpSubFileName, ok, referer, tmpSubFile}, + {"Good base dir", "", ok, noReferer, tmpIndex}, + {"Good base index", tmpIndexName, redirect, noReferer, nothing}, + {"Good base file", tmpFileName, ok, noReferer, tmpFile}, + {"Bad base file", tmpBadName, missing, noReferer, notFound}, + {"Good subdir dir", subDir, ok, noReferer, tmpSubIndex}, + {"Good subdir index", tmpSubIndexName, redirect, noReferer, nothing}, + {"Good subdir file", tmpSubFileName, ok, noReferer, tmpSubFile}, } for _, serveFile := range serveFileFuncs { @@ -173,6 +183,7 @@ func TestBasicWithAndWithoutLogging(t *testing.T) { t.Run(tc.name, func(t *testing.T) { fullpath := "http://localhost/" + tc.path req := httptest.NewRequest("GET", fullpath, nil) + req.Header.Add("Referer", tc.refer) w := httptest.NewRecorder() handler(w, req)