dashboard-v2/app/http/middleware/authenticatetoken.go
2020-05-11 18:49:07 +01:00

58 lines
1.2 KiB
Go

package middleware
import (
"fmt"
"github.com/TicketsBot/GoPanel/config"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
"strconv"
)
func AuthenticateToken(ctx *gin.Context) {
header := ctx.GetHeader("Authorization")
token, err := jwt.Parse(header, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
}
return []byte(config.Conf.Server.Secret), nil
})
if err != nil {
ctx.AbortWithStatusJSON(403, gin.H{
"success": false,
"error": err.Error(),
})
return
}
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
userId, hasUserId := claims["userid"]
if !hasUserId {
ctx.AbortWithStatusJSON(403, gin.H{
"success": false,
"error": "Token is invalid",
})
return
}
parsedId, err := strconv.ParseUint(userId.(string), 10, 64)
if err != nil {
ctx.AbortWithStatusJSON(403, gin.H{
"success": false,
"error": "Token is invalid",
})
return
}
ctx.Keys["userid"] = parsedId
} else {
ctx.AbortWithStatusJSON(403, gin.H{
"success": false,
"error": "Token is invalid",
})
return
}
}