122 lines
2.3 KiB
Go
122 lines
2.3 KiB
Go
package gosh
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
type RequestHelper struct {
|
|
r *http.Request
|
|
}
|
|
|
|
func (r *RequestHelper) GetQuery(key string) string {
|
|
return r.r.URL.Query().Get(key)
|
|
}
|
|
|
|
func (r *RequestHelper) GetBodyStr() string {
|
|
body, err := ioutil.ReadAll(r.r.Body)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return string(body)
|
|
}
|
|
|
|
func (r *RequestHelper) GetHeader(key string) string {
|
|
return r.r.Header.Get(key)
|
|
}
|
|
|
|
func (r *RequestHelper) getJSONBody() (map[string]interface{}, error) {
|
|
body, err := ioutil.ReadAll(r.r.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[string]interface{})
|
|
err = json.Unmarshal(body, &m)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
func (r *RequestHelper) getFormBody() (map[string]interface{}, error) {
|
|
err := r.r.ParseForm()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
m := make(map[string]interface{})
|
|
for key, values := range r.r.Form {
|
|
if len(values) == 1 {
|
|
m[key] = values[0]
|
|
} else {
|
|
m[key] = values
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
func (r *RequestHelper) GetBody() map[string]interface{} {
|
|
contentType := r.r.Header.Get("Content-Type")
|
|
switch contentType {
|
|
case "application/json":
|
|
m, err := r.getJSONBody()
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return m
|
|
case "application/x-www-form-urlencoded":
|
|
m, err := r.getFormBody()
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return m
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type ResponseHelper struct {
|
|
w http.ResponseWriter
|
|
}
|
|
|
|
func (r *ResponseHelper) SetHeader(key, value string) {
|
|
r.w.Header().Set(key, value)
|
|
}
|
|
|
|
func (r *ResponseHelper) WriteStr(s string) {
|
|
r.w.Write([]byte(s))
|
|
}
|
|
|
|
func (r *ResponseHelper) WriteJSON(v interface{}) error {
|
|
r.w.Header().Set("Content-Type", "application/json")
|
|
data, err := json.Marshal(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = r.w.Write(data)
|
|
return err
|
|
}
|
|
|
|
func (r *ResponseHelper) Status(code int) {
|
|
r.w.WriteHeader(code)
|
|
}
|
|
|
|
func (r *ResponseHelper) StatusOk() {
|
|
r.w.WriteHeader(http.StatusOK)
|
|
}
|
|
|
|
func (r *ResponseHelper) StatusBadRequest() {
|
|
r.w.WriteHeader(http.StatusBadRequest)
|
|
}
|
|
|
|
func (r *ResponseHelper) StatusNotFound() {
|
|
r.w.WriteHeader(http.StatusNotFound)
|
|
}
|
|
|
|
func (r *ResponseHelper) StatusInternalServerError() {
|
|
r.w.WriteHeader(http.StatusInternalServerError)
|
|
}
|
|
|
|
func (r *ResponseHelper) StatusForbidden() {
|
|
r.w.WriteHeader(http.StatusForbidden)
|
|
}
|