You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/servers/controller/index_response_writer.go

51 lines
1.1 KiB

package controller
import (
"bytes"
"fmt"
"net/http"
"strings"
)
const magicValue = `{{DEFAULT_ORG_ID}}`
type indexResponseWriter struct {
statusCode int
header http.Header
body *bytes.Buffer
defaultOrgId string
}
// newindexResponseWriter returns an initialized indexResponseWriter
func newIndexResponseWriter(defaultOrgId string) *indexResponseWriter {
return &indexResponseWriter{
header: make(http.Header),
body: new(bytes.Buffer),
defaultOrgId: defaultOrgId,
}
}
func (i *indexResponseWriter) Header() http.Header {
return i.header
}
func (i *indexResponseWriter) Write(buf []byte) (int, error) {
return i.body.Write(buf)
}
func (i *indexResponseWriter) WriteHeader(code int) {
i.statusCode = code
}
func (i *indexResponseWriter) writeToWriter(w http.ResponseWriter) {
for k, v := range i.header {
for _, h := range v {
w.Header().Add(k, h)
}
}
newBody := []byte(strings.Replace(i.body.String(), magicValue, i.defaultOrgId, 1))
w.Header().Set("content-length", fmt.Sprintf("%d", len(newBody)))
w.WriteHeader(i.statusCode)
w.Write(newBody)
}