package jws

import (
	"git.aionnect.com/aionnect/go-common/utils"
	"github.com/gin-gonic/gin"
	"net/http"
)

// JWT中间件,检查token,校验不通过报错
func NeedLogin() gin.HandlerFunc {
	return func(ctxt *gin.Context) {
		token := GetToken(ctxt)
		if token == "" {
			res := utils.E(http.StatusUnauthorized, "无权限访问", nil)
			res.Head.HttpStatus = http.StatusUnauthorized
			panic(res)
			return
		}

		j := NewJWT()
		// parseToken 解析token包含的信息
		claims, err := j.ParseToken(token)
		if err != nil {
			res := utils.E(http.StatusUnauthorized, err.Error(), nil)
			res.Head.HttpStatus = http.StatusUnauthorized
			panic(res)
			return
		}
		claims.Token = token
		// 继续交由下一个路由处理,并将解析出的信息传递下去
		ctxt.Set(Claims, claims)
		ctxt.Next()
	}
}

// JWT中间件,仅通过token获取载荷信息,校验不通过也不报错
func GetClaims() gin.HandlerFunc {
	return func(ctxt *gin.Context) {
		token := GetToken(ctxt)
		if token != "" {
			j := NewJWT()
			// parseToken 解析token包含的信息
			claims, err := j.ParseToken(token)
			if err == nil {
				claims.Token = token
				// 继续交由下一个路由处理,并将解析出的信息传递下去
				ctxt.Set(Claims, claims)
			} else {
				claims = &TokenClaims{Token: token}
			}
		}
		ctxt.Next()
	}
}