forked from TrueCloudLab/frostfs-s3-gw
Add a separate package to encapsulate http related stuff
This commit is contained in:
parent
1aa22329fa
commit
b2289ba10b
1 changed files with 58 additions and 0 deletions
58
http/http.go
Normal file
58
http/http.go
Normal file
|
@ -0,0 +1,58 @@
|
|||
package http
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/minio/minio/legacy/crypto"
|
||||
)
|
||||
|
||||
type (
|
||||
HTTPResponseWriter struct {
|
||||
serverName string
|
||||
serverRegion string
|
||||
}
|
||||
|
||||
// MimeType represents various MIME type used API responses.
|
||||
MimeType string
|
||||
|
||||
// ContextKey is a custom type used to pass values within contexts.
|
||||
ContextKey string
|
||||
)
|
||||
|
||||
const BearerTokenContextKey ContextKey = "bearer-token"
|
||||
|
||||
const (
|
||||
// MimeType_None means no response type.
|
||||
MimeType_None MimeType = ""
|
||||
// MimeType_ApplicationJSON means response type is JSON.
|
||||
MimeType_ApplicationJSON MimeType = "application/json"
|
||||
// MimeType_ApplicationXML means response type is XML.
|
||||
MimeType_ApplicationXML MimeType = "application/xml"
|
||||
)
|
||||
|
||||
func NewHTTPResponseWriter(appName, appVersion, region string) *HTTPResponseWriter {
|
||||
return &HTTPResponseWriter{
|
||||
serverName: fmt.Sprintf("%s/%s", appName, appVersion),
|
||||
serverRegion: region,
|
||||
}
|
||||
}
|
||||
|
||||
func (rw *HTTPResponseWriter) writeResponse(w http.ResponseWriter, statusCode int, response []byte, mimeType MimeType) {
|
||||
w.Header().Set("Server", rw.serverName)
|
||||
if len(rw.serverRegion) > 0 {
|
||||
w.Header().Set("X-Amz-Bucket-Region", rw.serverRegion)
|
||||
}
|
||||
w.Header().Set("Accept-Ranges", "bytes")
|
||||
crypto.RemoveSensitiveHeaders(w.Header())
|
||||
if mimeType != MimeType_None {
|
||||
w.Header().Set("Content-Type", string(mimeType))
|
||||
}
|
||||
w.Header().Set("Content-Length", strconv.Itoa(len(response)))
|
||||
w.WriteHeader(statusCode)
|
||||
if response != nil {
|
||||
w.Write(response)
|
||||
w.(http.Flusher).Flush()
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue