应用集成平台服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

167 lines
5.5 KiB

package interceptor
import (
"fmt"
"appPlatform/middleware/grocerystore"
"appPlatform/models/modelshr"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"github.com/gin-gonic/gin"
"github.com/mitchellh/mapstructure"
)
// 身份验证器
func IdentificationToken() gin.HandlerFunc {
return func(c *gin.Context) {
userToken := c.Request.Header.Get("token")
randomNumber := c.Request.Header.Get("number")
ContentType := c.Request.Header.Get("Content-Type")
Origin := c.Request.Header.Get("Origin")
userAgent := c.Request.Header.Get("User-Agent")
if ContentType == "" || userToken == "" || userAgent == "" || randomNumber == "" {
iii := publicmethod.MapOut[string]()
iii["ContentType"] = ContentType
iii["userToken"] = userToken
iii["userAgent"] = userAgent
iii["Origin"] = Origin
iii["randomNumber"] = randomNumber
publicmethod.Result(2001, "请输入关键信息数据!", c)
c.Abort()
return
}
//设定redis Key名称
redisKey := fmt.Sprintf("Authentication:ApiAuthent_%v", userToken)
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS3)
tokenInfo, isTrue := redisClient.HashGetAll(redisKey)
if isTrue != true {
iii := publicmethod.MapOut[string]()
iii["ContentType"] = ContentType
iii["userToken"] = userToken
iii["userAgent"] = userAgent
iii["Origin"] = Origin
iii["randomNumber"] = randomNumber
iii["redisKey"] = redisKey
iii["isTrue"] = isTrue
publicmethod.Result(2002, "您的指令不正确!或已经超时!请重新获取指令!", c)
c.Abort()
return
}
var validator ValidatorToken
identityErr := mapstructure.Decode(tokenInfo, &validator)
if identityErr != nil {
publicmethod.Result(2003, "对不起!身份验证失败!", c)
c.Abort()
return
}
//密码加密
var passWordMd5 publicmethod.Md5Encryption
passWordMd5.Md5EncryptionInit(validator.PassWord)
passWordMd5Str := passWordMd5.Md5EncryptionAlgorithm()
var empowerUser modelshr.EmpowerUser
userErr := empowerUser.GetCont(map[string]interface{}{"userkey": validator.UserKey, "password": passWordMd5Str}, "verification_code")
if userErr != nil {
publicmethod.Result(2000, userErr, c)
return
}
//头文件加密
//ContentType
var ContentTypeMd5 publicmethod.Md5Encryption
ContentTypeMd5.Md5EncryptionInit(ContentType)
if empowerUser.VerificationCode != "" {
ContentTypeMd5.AppKey = empowerUser.VerificationCode
}
fmt.Printf("ContentTypeMd5Str ----->%v\n", ContentTypeMd5)
ContentTypeMd5Str := ContentTypeMd5.Md5EncryptionAlgorithm()
//Origin
var OriginMd5 publicmethod.Md5Encryption
OriginMd5.Md5EncryptionInit(Origin)
if empowerUser.VerificationCode != "" {
OriginMd5.AppKey = empowerUser.VerificationCode
}
originMd5Str := OriginMd5.Md5EncryptionAlgorithm()
//userAgent
var userAgentMd5 publicmethod.Md5Encryption
userAgentMd5.Md5EncryptionInit(userAgent)
if empowerUser.VerificationCode != "" {
userAgentMd5.AppKey = empowerUser.VerificationCode
}
userAgentMd5Str := userAgentMd5.Md5EncryptionAlgorithm()
//随机数加密
var randomNumberMd5 publicmethod.Md5Encryption
randomNumberMd5.Md5EncryptionInit(validator.Number)
if empowerUser.VerificationCode != "" {
randomNumberMd5.AppKey = empowerUser.VerificationCode
}
numberMd5 := randomNumberMd5.Md5EncryptionAlgorithm()
//用户名加密
var userKeyMd5 publicmethod.Md5Encryption
userKeyMd5.Md5EncryptionInit(validator.UserKey)
if empowerUser.VerificationCode != "" {
userKeyMd5.AppKey = empowerUser.VerificationCode
}
userKeyMd5Str := userKeyMd5.Md5EncryptionAlgorithm()
clearCodeToken := fmt.Sprintf("%v-%v-%v-%v-%v-%v", ContentTypeMd5Str, originMd5Str, userAgentMd5Str, numberMd5, userKeyMd5Str, passWordMd5Str)
fmt.Printf("redisKey---->ContentTypeMd5Str:%v-originMd5Str:%v-userAgentMd5Str:%v-numberMd5:%v-userKeyMd5Str:%v-passwordMd5Str:%v\n", ContentTypeMd5Str, originMd5Str, userAgentMd5Str, numberMd5, userKeyMd5Str, passWordMd5Str)
//token 加密
var tokenMd5 publicmethod.Md5Encryption
tokenMd5.Md5EncryptionInit(clearCodeToken)
if empowerUser.VerificationCode != "" {
tokenMd5.AppKey = empowerUser.VerificationCode
}
fmt.Printf("tokenMd5Appk ----->%v\n", tokenMd5)
tokenMd5Str := tokenMd5.Md5EncryptionAlgorithm()
clearTokenStr := fmt.Sprintf("%v-%v", tokenMd5Str, numberMd5)
var clearTokenMd5 publicmethod.Md5Encryption
clearTokenMd5.Md5EncryptionInit(clearTokenStr)
if empowerUser.VerificationCode != "" {
clearTokenMd5.AppKey = empowerUser.VerificationCode
}
clearTokenMd5Str := clearTokenMd5.Md5EncryptionAlgorithm()
//提交Token转化
submitTokenStr := fmt.Sprintf("%v-%v", userToken, randomNumber)
var submitTokenMd5 publicmethod.Md5Encryption
submitTokenMd5.Md5EncryptionInit(submitTokenStr)
if empowerUser.VerificationCode != "" {
submitTokenMd5.AppKey = empowerUser.VerificationCode
}
submitTokenMd5Str := submitTokenMd5.Md5EncryptionAlgorithm()
if submitTokenMd5Str != clearTokenMd5Str {
sss := publicmethod.MapOut[string]()
sss["numberMd5"] = numberMd5
sss["submitTokenMd5Str"] = submitTokenMd5Str
sss["clearTokenMd5Str"] = clearTokenMd5Str
sss["tokenMd5Str"] = tokenMd5Str
sss["clearCodeToken"] = clearCodeToken
sss["submitTokenStr"] = submitTokenStr
sss["clearTokenStr"] = clearTokenStr
sss["userToken"] = userToken
// tokenMd5Str, numberMd5
// publicmethod.Result(2004, "对不起!非法令牌!不可访问系统", c)
publicmethod.Result(2004, sss, c, "对不起!非法令牌!不可访问系统")
c.Abort()
return
}
c.Set("token", validator)
c.Next()
}
}