diff --git a/web/middleware/logger.go b/web/middleware/logger.go index 72c4115..b8d590a 100644 --- a/web/middleware/logger.go +++ b/web/middleware/logger.go @@ -1,10 +1,8 @@ package middleware import ( - "bufio" "bytes" "log" - "net" "net/http" "time" @@ -93,57 +91,3 @@ func wrapWriter(w http.ResponseWriter) writerProxy { return &bw } } - -type writerProxy interface { - http.ResponseWriter - maybeWriteHeader() - status() int -} - -type basicWriter struct { - http.ResponseWriter - wroteHeader bool - code int -} - -func (b *basicWriter) WriteHeader(code int) { - b.code = code - b.wroteHeader = true - b.ResponseWriter.WriteHeader(code) -} -func (b *basicWriter) Write(buf []byte) (int, error) { - b.maybeWriteHeader() - return b.ResponseWriter.Write(buf) -} -func (b *basicWriter) maybeWriteHeader() { - if !b.wroteHeader { - b.WriteHeader(http.StatusOK) - } -} -func (b *basicWriter) status() int { - return b.code -} -func (b *basicWriter) Unwrap() http.ResponseWriter { - return b.ResponseWriter -} - -type fancyWriter struct { - basicWriter -} - -func (f *fancyWriter) CloseNotify() <-chan bool { - cn := f.basicWriter.ResponseWriter.(http.CloseNotifier) - return cn.CloseNotify() -} -func (f *fancyWriter) Flush() { - fl := f.basicWriter.ResponseWriter.(http.Flusher) - fl.Flush() -} -func (f *fancyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { - hj := f.basicWriter.ResponseWriter.(http.Hijacker) - return hj.Hijack() -} - -var _ http.CloseNotifier = &fancyWriter{} -var _ http.Flusher = &fancyWriter{} -var _ http.Hijacker = &fancyWriter{} diff --git a/web/middleware/writer_proxy.go b/web/middleware/writer_proxy.go new file mode 100644 index 0000000..634bc4e --- /dev/null +++ b/web/middleware/writer_proxy.go @@ -0,0 +1,61 @@ +package middleware + +import ( + "bufio" + "net" + "net/http" +) + +type writerProxy interface { + http.ResponseWriter + maybeWriteHeader() + status() int +} + +type basicWriter struct { + http.ResponseWriter + wroteHeader bool + code int +} + +func (b *basicWriter) WriteHeader(code int) { + b.code = code + b.wroteHeader = true + b.ResponseWriter.WriteHeader(code) +} +func (b *basicWriter) Write(buf []byte) (int, error) { + b.maybeWriteHeader() + return b.ResponseWriter.Write(buf) +} +func (b *basicWriter) maybeWriteHeader() { + if !b.wroteHeader { + b.WriteHeader(http.StatusOK) + } +} +func (b *basicWriter) status() int { + return b.code +} +func (b *basicWriter) Unwrap() http.ResponseWriter { + return b.ResponseWriter +} + +type fancyWriter struct { + basicWriter +} + +func (f *fancyWriter) CloseNotify() <-chan bool { + cn := f.basicWriter.ResponseWriter.(http.CloseNotifier) + return cn.CloseNotify() +} +func (f *fancyWriter) Flush() { + fl := f.basicWriter.ResponseWriter.(http.Flusher) + fl.Flush() +} +func (f *fancyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { + hj := f.basicWriter.ResponseWriter.(http.Hijacker) + return hj.Hijack() +} + +var _ http.CloseNotifier = &fancyWriter{} +var _ http.Flusher = &fancyWriter{} +var _ http.Hijacker = &fancyWriter{}