From 5ba6bfe74941be97e807a5b4c05c07481ea4d49b Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 3 Jan 2024 18:31:58 +0800 Subject: [PATCH] Update Guards to accept Request object instead of gin.Context --- sui/api/guards.go | 27 ++++++++++++++++++++++----- sui/api/request.go | 2 +- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/sui/api/guards.go b/sui/api/guards.go index 8dbe93fe..81f2e221 100644 --- a/sui/api/guards.go +++ b/sui/api/guards.go @@ -13,7 +13,7 @@ import ( ) // Guards middlewares -var Guards = map[string]func(c *gin.Context) error{ +var Guards = map[string]func(c *Request) error{ "bearer-jwt": guardBearerJWT, // Bearer JWT "query-jwt": guardQueryJWT, // Get JWT Token from query string "__tk" "cookie-jwt": guardCookieJWT, // Get JWT Token from cookie "__tk" @@ -21,8 +21,11 @@ var Guards = map[string]func(c *gin.Context) error{ } // JWT Bearer JWT -func guardBearerJWT(c *gin.Context) error { - +func guardBearerJWT(r *Request) error { + if r.context == nil { + return fmt.Errorf("No permission") + } + c := r.context tokenString := c.Request.Header.Get("Authorization") tokenString = strings.TrimSpace(strings.TrimPrefix(tokenString, "Bearer ")) if tokenString == "" { @@ -33,11 +36,17 @@ func guardBearerJWT(c *gin.Context) error { claims := helper.JwtValidate(tokenString) c.Set("__sid", claims.SID) + r.Sid = claims.SID return nil } // JWT Bearer JWT -func guardCookieJWT(c *gin.Context) error { +func guardCookieJWT(r *Request) error { + if r.context == nil { + return fmt.Errorf("No permission") + } + c := r.context + tokenString, err := c.Cookie("__tk") if err != nil { c.JSON(403, gin.H{"code": 403, "message": "No permission"}) @@ -53,11 +62,17 @@ func guardCookieJWT(c *gin.Context) error { claims := helper.JwtValidate(tokenString) c.Set("__sid", claims.SID) + r.Sid = claims.SID return nil } // JWT Bearer JWT -func guardQueryJWT(c *gin.Context) error { +func guardQueryJWT(r *Request) error { + if r.context == nil { + return fmt.Errorf("No permission") + } + c := r.context + tokenString := c.Query("__tk") if tokenString == "" { c.JSON(403, gin.H{"code": 403, "message": "No permission"}) @@ -67,6 +82,7 @@ func guardQueryJWT(c *gin.Context) error { claims := helper.JwtValidate(tokenString) c.Set("__sid", claims.SID) + r.Sid = claims.SID return nil } @@ -130,6 +146,7 @@ func (r *Request) processGuard(name string) error { if data, ok := v.(map[string]interface{}); ok { if sid, ok := data["__sid"].(string); ok { c.Set("__sid", sid) + r.Sid = sid } if global, ok := data["__global"].(map[string]interface{}); ok { diff --git a/sui/api/request.go b/sui/api/request.go index 316eaf10..34ef558b 100644 --- a/sui/api/request.go +++ b/sui/api/request.go @@ -136,7 +136,7 @@ func (r *Request) Render() (string, int, error) { if c.Guard != "" && r.context != nil { if guard, has := Guards[c.Guard]; has { - err := guard(r.context) + err := guard(r) if err != nil { ex := exception.Err(err, 403) return "", ex.Code, fmt.Errorf("%s", ex.Message)