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() } }