| package oasmiddleware | |
| import ( | |
| "bytes" | |
| "net/http" | |
| ) | |
| // ResponseWriterWrapper leverage to the original response write to be able to access | |
| // the written body and the status code of the response. This is used in the response middleware | |
| // but can also be used in a logging middleware to log the status code of the response. | |
| type ResponseWriterWrapper struct { | |
| w *http.ResponseWriter | |
| body *bytes.Buffer | |
| statusCode *int | |
| } | |
| func (rww ResponseWriterWrapper) Body() *bytes.Buffer { | |
| return rww.body | |
| } | |
| func (rww ResponseWriterWrapper) StatusCode() *int { | |
| return rww.statusCode | |
| } | |
| func NewResponseWriterWrapper(w http.ResponseWriter) ResponseWriterWrapper { | |
| var ( | |
| buf bytes.Buffer | |
| statusCode = 200 | |
| ) | |
| return ResponseWriterWrapper{ | |
| w: &w, | |
| body: &buf, | |
| statusCode: &statusCode, | |
| } | |
| } | |
| // Write function overwrites the http.ResponseWriter Header() function | |
| func (rww ResponseWriterWrapper) Write(buf []byte) (int, error) { | |
| rww.body.Write(buf) | |
| return (*rww.w).Write(buf) | |
| } | |
| // Header function overwrites the http.ResponseWriter Header() function | |
| func (rww ResponseWriterWrapper) Header() http.Header { | |
| return (*rww.w).Header() | |
| } | |
| // WriteHeader function overwrites the http.ResponseWriter WriteHeader() function | |
| func (rww ResponseWriterWrapper) WriteHeader(statusCode int) { | |
| *rww.statusCode = statusCode | |
| (*rww.w).WriteHeader(statusCode) | |
| } | |
| func (rww ResponseWriterWrapper) Unwrap() http.ResponseWriter { | |
| return *rww.w | |
| } | |