79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package jwtSet
|
||
|
||
import (
|
||
"github.com/iris-contrib/middleware/jwt"
|
||
"github.com/kataras/iris/v12"
|
||
"github.com/sirupsen/logrus"
|
||
"main/database"
|
||
"main/model"
|
||
"main/utils"
|
||
"time"
|
||
)
|
||
|
||
var Jwt *jwt.Middleware
|
||
var keys model.JwtKeys
|
||
|
||
func GetJwtKeys() model.JwtKeys {
|
||
db := database.GetInstance().GetMysqlDb()
|
||
if utils.DataIsNil(keys) || keys.Date != time.Now().Format("2006-01-02") {
|
||
keys = model.JwtKeys{}
|
||
if err := db.Where("date = ? and token = ''", time.Now().Format("2006-01-02")).First(&keys).Error; err != nil {
|
||
logrus.Errorln("sql执行失败:", err)
|
||
//return model.JwtKeys{}
|
||
}
|
||
}
|
||
if keys.Key == "" {
|
||
keys.Date = time.Now().Format("2006-01-02")
|
||
keys.Key = utils.NewKey(32)
|
||
if err := db.Create(&keys).Error; err != nil {
|
||
logrus.Errorln("sql执行失败:", err)
|
||
return model.JwtKeys{}
|
||
}
|
||
}
|
||
if !keys.Updated && !utils.DataIsNil(Jwt) {
|
||
UpdateJwt()
|
||
}
|
||
return keys
|
||
}
|
||
func Init() {
|
||
if utils.DataIsNil(keys) {
|
||
GetJwtKeys()
|
||
}
|
||
Jwt = jwt.New(jwt.Config{
|
||
ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
|
||
return []byte(keys.Key), nil
|
||
},
|
||
ErrorHandler: func(context iris.Context, err error) {
|
||
if err == nil {
|
||
return
|
||
}
|
||
context.StopExecution()
|
||
context.StatusCode(iris.StatusUnauthorized)
|
||
context.SetErr(err)
|
||
},
|
||
Extractor: jwt.FromAuthHeader,
|
||
SigningMethod: jwt.SigningMethodHS256,
|
||
})
|
||
db := database.GetInstance().GetMysqlDb()
|
||
keys.Updated = true
|
||
if err := db.Updates(&keys).Error; err != nil {
|
||
logrus.Errorln("sql执行失败:", err)
|
||
return
|
||
}
|
||
}
|
||
|
||
func UpdateJwt() {
|
||
if utils.DataIsNil(keys) {
|
||
GetJwtKeys()
|
||
}
|
||
Jwt.Config.ValidationKeyGetter = func(token *jwt.Token) (interface{}, error) {
|
||
return []byte(keys.Key), nil
|
||
}
|
||
db := database.GetInstance().GetMysqlDb()
|
||
keys.Updated = true
|
||
if err := db.Updates(&keys).Error; err != nil {
|
||
logrus.Errorln("sql执行失败:", err)
|
||
return
|
||
}
|
||
}
|