Fixed remote address logging and added appropriate unit tests.

This commit is contained in:
Jeromy Streets 2019-04-08 12:23:29 -07:00
parent 95b3a1c7d3
commit 7793fde0ca
2 changed files with 41 additions and 16 deletions

View File

@ -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)
}
}

View File

@ -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)