Initial commit: DSH Web Manager
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// Only use for bounded JSON responses, never file or runtime streams. Register
|
||||
// flush before lock-release defers so a slow client cannot hold storage locks.
|
||||
func deferJSONResponse(w http.ResponseWriter) (http.ResponseWriter, func()) {
|
||||
b := &jsonResponseBuffer{ResponseWriter: w}
|
||||
return b, func() {
|
||||
if b.status != 0 {
|
||||
w.WriteHeader(b.status)
|
||||
}
|
||||
if b.body.Len() > 0 {
|
||||
_, _ = w.Write(b.body.Bytes())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type jsonResponseBuffer struct {
|
||||
http.ResponseWriter
|
||||
body bytes.Buffer
|
||||
status int
|
||||
}
|
||||
|
||||
func (w *jsonResponseBuffer) WriteHeader(status int) {
|
||||
if w.status == 0 {
|
||||
w.status = status
|
||||
}
|
||||
}
|
||||
func (w *jsonResponseBuffer) Write(p []byte) (int, error) {
|
||||
if w.status == 0 {
|
||||
w.status = http.StatusOK
|
||||
}
|
||||
return w.body.Write(p)
|
||||
}
|
||||
func (w *jsonResponseBuffer) Unwrap() http.ResponseWriter { return w.ResponseWriter }
|
||||
Reference in New Issue
Block a user