diff --git a/gin_server_admin/api/v1/custom/customhandle.go b/gin_server_admin/api/v1/custom/customhandle.go index 1db495c..33d4abf 100644 --- a/gin_server_admin/api/v1/custom/customhandle.go +++ b/gin_server_admin/api/v1/custom/customhandle.go @@ -2,6 +2,7 @@ package custom import ( "encoding/json" + "fmt" "strconv" "github.com/flipped-aurora/gin-vue-admin/server/api/admin/systemuser" @@ -207,3 +208,134 @@ func (cu *CustomHandle) SystemLogin(c *gin.Context) { // response.FailWithMessage("验证码错误", c) // } } + +//oauth2.0 +func (cu *CustomHandle) OauthTwo(c *gin.Context) { + var requestData getData + err := c.ShouldBindJSON(&requestData) + if err != nil { + response.Result(101, err, "单点登录登录失败!", c) + return + } + if requestData.Number == "" { + response.Result(102, err, "单点登录登录失败!", c) + return + } + redisClient := redishandel.RunRedis() + tokenErr, token := redisClient.Get("system:Oauth2_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + requestData.Number) + if tokenErr == true { + saveData := commonus.MapOut() + saveData["token"] = token + response.Result(0, saveData, "登录成功!", c) + } else { + userAgent := c.Request.Header.Get("User-Agent") + var md5JiaMi commonus.Md5Encryption + md5JiaMi.Md5EncryptionInit(userAgent) + md5Token := md5JiaMi.Md5EncryptionAlgorithm() + + var md5Number commonus.Md5Encryption + md5Number.Md5EncryptionInit(requestData.Number) + md5NumberToken := md5Number.Md5EncryptionAlgorithm() + + sha1Str := fmt.Sprintf("%v-%v-%v", md5Token, requestData.Number, md5NumberToken) + sha1Token := commonus.Sha1Encryption(sha1Str) + + saveData := commonus.MapOut() + saveData["token"] = sha1Token + redisClient.SetRedisTime(10800) + redisClient.Set("system:Oauth2_"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+requestData.Number, sha1Token) + response.Result(0, saveData, "Token获取成功!", c) + } +} + +//企业微信单点登录 +func (cu *CustomHandle) SingleSignOn(c *gin.Context) { + var requestData oneLogin + err := c.ShouldBindJSON(&requestData) + if err != nil { + response.Result(101, err, "单点登录登录失败!", c) + return + } + if requestData.Number == "" { + response.Result(102, err, "单点登录登录失败!", c) + return + } + if requestData.Token == "" { + response.Result(102, err, "单点登录登录失败!", c) + return + } + if requestData.OpenId == "" { + response.Result(102, err, "单点登录登录失败!", c) + return + } + redisClient := redishandel.RunRedis() + tokenErr, token := redisClient.Get("system:Oauth2_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + requestData.Number) + if tokenErr != true { + response.Result(103, err, "单点登录登录失败!", c) + return + } + if token != requestData.Token { + response.Result(103, err, "单点登录登录失败!", c) + return + } + isTrue, userInfo := commonus.GetUesrContForWechatID(requestData.OpenId) + if isTrue != true { + response.Result(103, err, "单点登录登录失败!", c) + return + } + + //获取操作人 + userFileStr := "worker_man.*,worker_man_data.*" + //操作人条件 + userWherAry := commonus.MapOut() + // userWherAry["wm_key"] = "WoBenShanLiang_3" //"WoBenShanLiang_3" + userWherAry["wm_key"] = userInfo.Key + userConting, userIsTrue := commonus.GetUserInfoPublic(userFileStr, userWherAry) + if userIsTrue != true { + response.Result(103, err, "单点登录登录失败!", c) + return + } + userAgent := c.Request.Header.Get("User-Agent") + + var md5JiaMi commonus.Md5Encryption + md5JiaMi.Md5EncryptionInit(userAgent) + md5Token := md5JiaMi.Md5EncryptionAlgorithm() + + sha1Str := fmt.Sprintf("%v%v%v%v", userConting.Key, userConting.Number, userConting.Password, md5Token) + sha1Token := commonus.Sha1Encryption(sha1Str) + + saveData := commonus.MapOut() + saveData["key"] = userConting.Key + saveData["token"] = sha1Token + saveData["userinfo"] = userConting + + writeRedisData := map[string]interface{}{ + "userkey": userInfo.Key, + "usernumber": userInfo.Number, + "userpwd": userConting.Password, + "usertoken": sha1Token, + } + redisClient.SetRedisTime(10800) + redisKey := fmt.Sprintf("system:Identification_%v_%v", global.GVA_CONFIG.RedisPrefix.Alias, userInfo.Key) + redisClient.HashMsetAdd(redisKey, writeRedisData) + + userInfoMap := commonus.MapOut() + userInfoMap["id"] = userConting.Id + userInfoMap["number"] = userConting.Number + userInfoMap["departmentid"] = userConting.DepartmentId + userInfoMap["workshopid"] = userConting.WorkshopId + userInfoMap["postid"] = userConting.PostId + userInfoMap["key"] = userConting.Key + userInfoMap["group"] = userConting.Group + userInfoMap["tema"] = userConting.Tema + userInfoMap["workwechatid"] = userConting.WorkWechatId + userInfoMap["wechatid"] = userConting.WechatId + userInfoMap["name"] = userConting.Name + userInfoMap["nickname"] = userConting.NickName + + redisUserClient := redishandel.RunRedis() + redisUserClient.SetRedisTime(0) + redisKeyMap := fmt.Sprintf("system:userContent_%v_%v", global.GVA_CONFIG.RedisPrefix.Alias, userInfo.Key) + redisUserClient.HashMsetAdd(redisKeyMap, userInfoMap) + response.Result(0, saveData, "登录成功!", c) +} diff --git a/gin_server_admin/api/v1/custom/customtype.go b/gin_server_admin/api/v1/custom/customtype.go index dea43ac..e99b15e 100644 --- a/gin_server_admin/api/v1/custom/customtype.go +++ b/gin_server_admin/api/v1/custom/customtype.go @@ -5,3 +5,12 @@ import "github.com/mojocn/base64Captcha" var store = base64Captcha.DefaultMemStore type CustomHandle struct{} + +type getData struct { + Number string `json:"number"` +} +type oneLogin struct { + getData + Token string `json:"token"` + OpenId string `json:"openid"` +} diff --git a/gin_server_admin/router/system/sys_base.go b/gin_server_admin/router/system/sys_base.go index c367c57..d02cf21 100644 --- a/gin_server_admin/router/system/sys_base.go +++ b/gin_server_admin/router/system/sys_base.go @@ -18,6 +18,9 @@ func (s *BaseRouter) InitBaseRouter(Router *gin.RouterGroup) (R gin.IRoutes) { //自定义登录 baseRouter.POST("mylogin", customApi.CustomLogin) baseRouter.POST("mysystemlogin", customApi.SystemLogin) + //Oauth2.0 + baseRouter.POST("oauth2", customApi.OauthTwo) + baseRouter.POST("singlesignon", customApi.SingleSignOn) //单点登录 } return baseRouter }