mirror of
				https://github.com/datarhei/core.git
				synced 2025-10-31 19:32:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| }
 | 
