5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 23:02:19 +08:00
wails/v2/pkg/assetserver/body_recorder.go
stffabi 30d17a760d
[assetserver] Inject runtime/IPC into all index html files (#2203)
It will also be injected into all html files returned when requesting a folder path.
2023-10-23 20:35:18 +11:00

62 lines
1.1 KiB
Go

package assetserver
import (
"bytes"
"net/http"
)
type bodyRecorder struct {
http.ResponseWriter
doRecord func(code int, header http.Header) bool
body *bytes.Buffer
code int
wroteHeader bool
}
func (rw *bodyRecorder) Write(buf []byte) (int, error) {
rw.writeHeader(buf, http.StatusOK)
if rw.body != nil {
return rw.body.Write(buf)
}
return rw.ResponseWriter.Write(buf)
}
func (rw *bodyRecorder) WriteHeader(code int) {
rw.writeHeader(nil, code)
}
func (rw *bodyRecorder) Code() int {
return rw.code
}
func (rw *bodyRecorder) Body() *bytes.Buffer {
return rw.body
}
func (rw *bodyRecorder) writeHeader(buf []byte, code int) {
if rw.wroteHeader {
return
}
if rw.doRecord != nil {
header := rw.Header()
if len(buf) != 0 {
if _, hasType := header[HeaderContentType]; !hasType {
header.Set(HeaderContentType, http.DetectContentType(buf))
}
}
if rw.doRecord(code, header) {
rw.body = bytes.NewBuffer(nil)
}
}
if rw.body == nil {
rw.ResponseWriter.WriteHeader(code)
}
rw.code = code
rw.wroteHeader = true
}