|
|
|
|
package identification
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"hr_server/grocerystore"
|
|
|
|
|
"hr_server/models"
|
|
|
|
|
"hr_server/overall"
|
|
|
|
|
"hr_server/overall/overallhandle"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/mitchellh/mapstructure"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 验证器
|
|
|
|
|
func Validator() 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 := overallhandle.MapOut()
|
|
|
|
|
iii["ContentType"] = ContentType
|
|
|
|
|
iii["userToken"] = userToken
|
|
|
|
|
iii["userAgent"] = userAgent
|
|
|
|
|
iii["Origin"] = Origin
|
|
|
|
|
iii["randomNumber"] = randomNumber
|
|
|
|
|
overallhandle.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 := overallhandle.MapOut()
|
|
|
|
|
iii["ContentType"] = ContentType
|
|
|
|
|
iii["userToken"] = userToken
|
|
|
|
|
iii["userAgent"] = userAgent
|
|
|
|
|
iii["Origin"] = Origin
|
|
|
|
|
iii["randomNumber"] = randomNumber
|
|
|
|
|
iii["redisKey"] = redisKey
|
|
|
|
|
iii["isTrue"] = isTrue
|
|
|
|
|
overallhandle.Result(2002, "您的指令不正确!或已经超时!请重新获取指令!", c)
|
|
|
|
|
c.Abort()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var validator ValidatorType
|
|
|
|
|
identityErr := mapstructure.Decode(tokenInfo, &validator)
|
|
|
|
|
if identityErr != nil {
|
|
|
|
|
overallhandle.Result(2003, "对不起!身份验证失败!", c)
|
|
|
|
|
c.Abort()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//密码加密
|
|
|
|
|
var passWordMd5 overallhandle.Md5Encryption
|
|
|
|
|
passWordMd5.Md5EncryptionInit(validator.PassWord)
|
|
|
|
|
passWordMd5Str := passWordMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
var empowerUser models.EmpowerUser
|
|
|
|
|
userErr := empowerUser.GetCont(map[string]interface{}{"userkey": validator.UserKey, "password": passWordMd5Str}, "verification_code")
|
|
|
|
|
if userErr != nil {
|
|
|
|
|
overallhandle.Result(2000, userErr, c)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//头文件加密
|
|
|
|
|
//ContentType
|
|
|
|
|
var ContentTypeMd5 overallhandle.Md5Encryption
|
|
|
|
|
ContentTypeMd5.Md5EncryptionInit(ContentType)
|
|
|
|
|
if empowerUser.VerificationCode != "" {
|
|
|
|
|
ContentTypeMd5.AppKey = empowerUser.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Printf("ContentTypeMd5Str ----->%v\n", ContentTypeMd5)
|
|
|
|
|
|
|
|
|
|
ContentTypeMd5Str := ContentTypeMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//Origin
|
|
|
|
|
var OriginMd5 overallhandle.Md5Encryption
|
|
|
|
|
OriginMd5.Md5EncryptionInit(Origin)
|
|
|
|
|
if empowerUser.VerificationCode != "" {
|
|
|
|
|
OriginMd5.AppKey = empowerUser.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
originMd5Str := OriginMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
//userAgent
|
|
|
|
|
var userAgentMd5 overallhandle.Md5Encryption
|
|
|
|
|
userAgentMd5.Md5EncryptionInit(userAgent)
|
|
|
|
|
if empowerUser.VerificationCode != "" {
|
|
|
|
|
userAgentMd5.AppKey = empowerUser.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
userAgentMd5Str := userAgentMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
//随机数加密
|
|
|
|
|
var randomNumberMd5 overallhandle.Md5Encryption
|
|
|
|
|
randomNumberMd5.Md5EncryptionInit(validator.Number)
|
|
|
|
|
if empowerUser.VerificationCode != "" {
|
|
|
|
|
randomNumberMd5.AppKey = empowerUser.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
numberMd5 := randomNumberMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
//用户名加密
|
|
|
|
|
var userKeyMd5 overallhandle.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 overallhandle.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 overallhandle.Md5Encryption
|
|
|
|
|
clearTokenMd5.Md5EncryptionInit(clearTokenStr)
|
|
|
|
|
if empowerUser.VerificationCode != "" {
|
|
|
|
|
clearTokenMd5.AppKey = empowerUser.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
clearTokenMd5Str := clearTokenMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
//提交Token转化
|
|
|
|
|
submitTokenStr := fmt.Sprintf("%v-%v", userToken, randomNumber)
|
|
|
|
|
|
|
|
|
|
var submitTokenMd5 overallhandle.Md5Encryption
|
|
|
|
|
submitTokenMd5.Md5EncryptionInit(submitTokenStr)
|
|
|
|
|
if empowerUser.VerificationCode != "" {
|
|
|
|
|
submitTokenMd5.AppKey = empowerUser.VerificationCode
|
|
|
|
|
}
|
|
|
|
|
submitTokenMd5Str := submitTokenMd5.Md5EncryptionAlgorithm()
|
|
|
|
|
|
|
|
|
|
if submitTokenMd5Str != clearTokenMd5Str {
|
|
|
|
|
sss := overallhandle.MapOut()
|
|
|
|
|
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
|
|
|
|
|
// overallhandle.Result(2004, "对不起!非法令牌!不可访问系统", c)
|
|
|
|
|
overallhandle.Result(2004, numberMd5, c, "对不起!非法令牌!不可访问系统")
|
|
|
|
|
c.Abort()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// fmt.Printf("拦截")
|
|
|
|
|
c.Next()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 拦截器
|
|
|
|
|
func Interceptor() gin.HandlerFunc {
|
|
|
|
|
return func(c *gin.Context) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 内部人员身份认证
|
|
|
|
|
func Internaluthentication() gin.HandlerFunc {
|
|
|
|
|
return func(c *gin.Context) {
|
|
|
|
|
userKey := c.Request.Header.Get("user-key")
|
|
|
|
|
userToken := c.Request.Header.Get("user-token")
|
|
|
|
|
userAgent := c.Request.Header.Get("User-Agent")
|
|
|
|
|
userAgent = overall.CONSTANT_CONFIG.Appsetup.AppKey
|
|
|
|
|
if userKey == "" || userToken == "" || userAgent == "" {
|
|
|
|
|
overallhandle.Result(2001, "未登录或非法访问", c)
|
|
|
|
|
c.Abort()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
redisFileKey := fmt.Sprintf("ScanCode:Authentication:LoginApi_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, userKey)
|
|
|
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS5)
|
|
|
|
|
userRedisToken, isTrue := redisClient.HashGetAll(redisFileKey)
|
|
|
|
|
if isTrue == false {
|
|
|
|
|
overallhandle.Result(2001, "未登录或非法访问", c)
|
|
|
|
|
c.Abort()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if userToken != userRedisToken["usertoken"] {
|
|
|
|
|
overallhandle.Result(2001, "令牌不正确!非法访问!", c)
|
|
|
|
|
c.Abort()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
myCont, myErr := overallhandle.GetUserRedisCont(userRedisToken["usernumber"])
|
|
|
|
|
if myErr != nil {
|
|
|
|
|
overallhandle.Result(2001, "登录超时!请重新登录", c)
|
|
|
|
|
c.Abort()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
fmt.Printf("\n\n\n获取登录信息------>%v------>%v\n\n\n", overall.MyContJwt, myCont)
|
|
|
|
|
c.Set(overall.MyContJwt, myCont)
|
|
|
|
|
writeRedisData := overallhandle.MapOut()
|
|
|
|
|
for i, v := range userRedisToken {
|
|
|
|
|
writeRedisData[i] = v
|
|
|
|
|
}
|
|
|
|
|
redisClient.SetRedisTime(10800)
|
|
|
|
|
redisClient.HashMsetAdd(redisFileKey, writeRedisData)
|
|
|
|
|
myContRedis := overallhandle.MapOut()
|
|
|
|
|
myContRedis["id"] = myCont.Id
|
|
|
|
|
myContRedis["number"] = myCont.Number //员工工号
|
|
|
|
|
myContRedis["name"] = myCont.Name //姓名
|
|
|
|
|
myContRedis["icon"] = myCont.Icon //头像
|
|
|
|
|
myContRedis["hireclass"] = myCont.HireClass //雇佣类型(1:雇佣入职;2:再入职;)
|
|
|
|
|
myContRedis["emptype"] = myCont.EmpType //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)
|
|
|
|
|
myContRedis["company"] = myCont.Company //入职公司
|
|
|
|
|
myContRedis["maindeparment"] = myCont.MainDeparment //主部门
|
|
|
|
|
myContRedis["sunmaindeparment"] = myCont.SunMainDeparment //二级主部门
|
|
|
|
|
myContRedis["deparment"] = myCont.Deparment //部门
|
|
|
|
|
myContRedis["adminorg"] = myCont.AdminOrg //所属行政组织
|
|
|
|
|
myContRedis["teamid"] = myCont.TeamId //班组
|
|
|
|
|
myContRedis["position"] = myCont.Position //职位
|
|
|
|
|
myContRedis["jobclass"] = myCont.JobClass //职务分类
|
|
|
|
|
myContRedis["jobid"] = myCont.JobId //职务
|
|
|
|
|
myContRedis["jobleve"] = myCont.JobLeve //职务等级
|
|
|
|
|
myContRedis["wechat"] = myCont.Wechat //微信UserId
|
|
|
|
|
myContRedis["workwechat"] = myCont.WorkWechat //企业微信UserId
|
|
|
|
|
myContRedis["state"] = myCont.State //状态(1:启用;2:禁用;3:删除)
|
|
|
|
|
myContRedis["key"] = myCont.Key //key
|
|
|
|
|
myContRedis["isadmin"] = myCont.IsAdmin //是否为管理员(1:不是;2:分公司;3:集团管理员;4:超级管
|
|
|
|
|
myContRedis["password"] = myCont.Password //密码
|
|
|
|
|
myContRedis["role"] = myCont.Role //角色
|
|
|
|
|
myContRedis["idcardno"] = myCont.Idcardno //身份证号
|
|
|
|
|
myContRedis["passportno"] = myCont.Passportno //护照号码
|
|
|
|
|
myContRedis["globalroaming"] = myCont.Globalroaming //国际区号
|
|
|
|
|
myContRedis["mobilephone"] = myCont.Mobilephone //手机号码
|
|
|
|
|
myContRedis["email"] = myCont.Email //电子邮件
|
|
|
|
|
myContRedis["gender"] = myCont.Gender //性别(1:男性;2:女性;3:中性)
|
|
|
|
|
myContRedis["birthday"] = myCont.Birthday //birthday
|
|
|
|
|
myContRedis["myfolk"] = myCont.Myfolk //民族
|
|
|
|
|
myContRedis["nativeplace"] = myCont.Nativeplace //籍贯
|
|
|
|
|
myContRedis["idcardstartdate"] = myCont.Idcardstartdate //身份证有效期开始
|
|
|
|
|
myContRedis["idcardenddate"] = myCont.Idcardenddate //身份证有效期结束
|
|
|
|
|
myContRedis["idcardaddress"] = myCont.Idcardaddress //身份证地址
|
|
|
|
|
myContRedis["idcardIssued"] = myCont.IdcardIssued //身份证签发机关
|
|
|
|
|
myContRedis["health"] = myCont.Health //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)
|
|
|
|
|
myContRedis["maritalstatus"] = myCont.Maritalstatus //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)
|
|
|
|
|
myContRedis["internaltelephone"] = myCont.Internaltelephone //内线电话
|
|
|
|
|
myContRedis["currentresidence"] = myCont.Currentresidence //现居住地址
|
|
|
|
|
myContRedis["constellationing"] = myCont.Constellation //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)
|
|
|
|
|
myContRedis["isdoubleworker"] = myCont.Isdoubleworker //是否双职工(1:是;2:否)
|
|
|
|
|
myContRedis["isveterans"] = myCont.Isveterans //是否为退役军人(1:是;2:否)
|
|
|
|
|
myContRedis["veteransnumber"] = myCont.Veteransnumber //退役证编号
|
|
|
|
|
myContRedis["jobstartdate"] = myCont.Jobstartdate //参加工作日期
|
|
|
|
|
myContRedis["entrydate"] = myCont.Entrydate //入职日期
|
|
|
|
|
myContRedis["probationperiod"] = myCont.Probationperiod //试用期
|
|
|
|
|
myContRedis["planformaldate"] = myCont.Planformaldate //预计转正日期
|
|
|
|
|
myContRedis["political_outlook"] = myCont.PoliticalOutlook //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)
|
|
|
|
|
redisMyContKey := fmt.Sprintf("ScanCode:Authentication:UserCont_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, myCont.Number)
|
|
|
|
|
redisClient.HashMsetAdd(redisMyContKey, myContRedis)
|
|
|
|
|
var powerCont EmpowerCont
|
|
|
|
|
powerCont.RoleName, powerCont.PointId, powerCont.Operation, powerCont.Level = overallhandle.GetNewAccredit("kpi", myCont.Role, myCont.Key, myCont.AdminOrg, myCont.Position)
|
|
|
|
|
c.Set(overall.MyContJwtPower, powerCont)
|
|
|
|
|
c.Next()
|
|
|
|
|
}
|
|
|
|
|
}
|