Files
core/http/handler/util/util.go
2022-08-18 10:27:33 +03:00

79 lines
1.5 KiB
Go

package util
import (
"fmt"
"io"
"net/url"
"strings"
"github.com/datarhei/core/v16/encoding/json"
"github.com/labstack/echo/v4"
)
func ShouldBindJSONValidation(c echo.Context, obj interface{}, validate bool) error {
req := c.Request()
if req.ContentLength == 0 {
return fmt.Errorf("request doesn't contain any content")
}
ctype := req.Header.Get(echo.HeaderContentType)
if !strings.HasPrefix(ctype, echo.MIMEApplicationJSON) {
return fmt.Errorf("request doesn't contain JSON content")
}
body, err := io.ReadAll(req.Body)
if err != nil {
return err
}
if err := json.Unmarshal(body, obj); err != nil {
return json.FormatError(body, err)
}
if validate {
return c.Validate(obj)
}
return nil
}
// ShouldBindJSON binds the body data of the request to the given object. An error is
// returned if the body data is not valid JSON or the validation of the unmarshalled
// data failed.
func ShouldBindJSON(c echo.Context, obj interface{}) error {
return ShouldBindJSONValidation(c, obj, true)
}
func PathWildcardParam(c echo.Context) string {
return "/" + PathParam(c, "*")
}
func PathParam(c echo.Context, name string) string {
param := c.Param(name)
param, err := url.PathUnescape(param)
if err != nil {
return ""
}
return param
}
func DefaultQuery(c echo.Context, name, defValue string) string {
param := c.QueryParam(name)
if len(param) == 0 {
return defValue
}
param, err := url.QueryUnescape(param)
if err != nil {
return defValue
}
return param
}