databag/net/server/internal/httpUtil.go
2022-01-20 16:26:59 -08:00

75 lines
1.8 KiB
Go

package databag
import (
"os"
"log"
"runtime"
"strings"
"errors"
"encoding/json"
"encoding/base64"
"net/http"
"net/http/httptest"
)
func WriteResponse(w http.ResponseWriter, v interface{}) {
body, err := json.Marshal(v);
if err != nil {
_, file, line, _ := runtime.Caller(1)
p, _ := os.Getwd()
log.Printf("%s:%d %s", strings.TrimPrefix(file, p), line, err.Error())
w.WriteHeader(http.StatusInternalServerError)
} else {
w.Write(body);
}
}
func ReadResponse(w *httptest.ResponseRecorder, v interface{}) error {
resp := w.Result()
if resp.StatusCode != 200 {
return errors.New("response failed");
}
if v == nil {
return nil
}
dec := json.NewDecoder(resp.Body)
dec.Decode(v)
return nil
}
func NewRequest(rest string, path string, obj interface{}) (*http.Request, *httptest.ResponseRecorder, error) {
w := httptest.NewRecorder()
if(obj != nil) {
body, err := json.Marshal(obj)
if err != nil {
return nil, nil, err
}
reader := strings.NewReader(string(body))
return httptest.NewRequest(rest, path, reader), w, nil
}
return httptest.NewRequest(rest, path, nil), w, nil
}
func SetBasicAuth(r *http.Request, login string) {
auth := base64.StdEncoding.EncodeToString([]byte(login))
r.Header.Add("Authorization", "Basic " + auth)
}
func SetBearerAuth(r *http.Request, token string) {
r.Header.Add("Authorization", "Bearer " + token)
}
func SetCredentials(r *http.Request, login string) {
auth := base64.StdEncoding.EncodeToString([]byte(login))
r.Header.Add("Credentials", "Basic " + auth)
}
func ParseRequest(r *http.Request, w http.ResponseWriter, obj interface{}) error {
r.Body = http.MaxBytesReader(w, r.Body, APP_BODYLIMIT)
dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
return dec.Decode(&obj)
}