github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/sign/gin.go (about) 1 package sign 2 3 import ( 4 "bytes" 5 "fmt" 6 "net/http" 7 8 "github.com/gin-gonic/gin" 9 10 "github.com/artisanhe/tools/courier/status_error" 11 "github.com/artisanhe/tools/httplib" 12 ) 13 14 func WithSignBy(exchangeSecret SecretExchanger) gin.HandlerFunc { 15 return func(c *gin.Context) { 16 req := SignParams{} 17 err := httplib.TransToReq(c, &req) 18 if err != nil { 19 httplib.WriteError(c, err) 20 c.Abort() 21 return 22 } 23 24 query := c.Request.URL.Query() 25 26 expectSign, origin, err := getSign(c.Request, query, exchangeSecret) 27 if err != nil { 28 httplib.WriteError(c, err) 29 c.Abort() 30 return 31 } 32 33 if req.Sign != string(expectSign) { 34 errForSign := status_error.SignFailed.StatusError(). 35 WithDesc(fmt.Sprintf("Origin %s&secret=***, Sign:[%s], Expected:[%s]", bytes.Split(origin, []byte("secret"))[0], req.Sign, expectSign)) 36 httplib.WriteError(c, errForSign) 37 c.Abort() 38 return 39 } 40 } 41 } 42 43 func ValidateSign(exchangeSecret SecretExchanger, request *http.Request, sign string) error { 44 query := request.URL.Query() 45 46 expectSign, origin, err := getSign(request, query, exchangeSecret) 47 if err != nil { 48 return err 49 } 50 51 if sign != string(expectSign) { 52 errForSign := status_error.SignFailed.StatusError(). 53 WithDesc(fmt.Sprintf("Origin %s&secret=***, Sign:[%s], Expected:[%s]", bytes.Split(origin, []byte("secret"))[0], sign, expectSign)) 54 return errForSign 55 } 56 57 return nil 58 }