package partial import ( "fmt" "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs" sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" "strconv" "strings" "time" //"git.qianqiusoft.com/qianqiusoft/light-apiengine/models" ) // _Login // @Title _Login // @Description 用户登录 // @Param logininfo false "登录信息" // @Success 200 {object} Account // @Failure 403 :id is empty func Sso_Login(c *entitys.CtrlContext) { var logininfo sysmodel.LoginInfo c.Ctx.BindJSON(&logininfo) //fmt.Println(logininfo) var user sysmodel.SysUser ret, err := c.PlatformDbEngine.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user) if ret && err == nil { //TODO check password timestamp := uint64(time.Now().UnixNano()) md5Pwd := sysutils.HashPassword(logininfo.Password, "") //密码错误 if !strings.EqualFold(user.Password, md5Pwd) { c.Ctx.JSON(200, sysmodel.SysReturn{400, "password incorrect!", nil}) return } token := &entitys.Token{} timestamp_str := strconv.FormatUint(timestamp, 10) sec_tooken := sysutils.GenerateToken(logininfo.Account + timestamp_str) if v := sysutils.GetGlobalTokenStore().Get(sec_tooken); v == nil { token.AccessToken = sec_tooken token.RefreshToken = sec_tooken token.LoginID = logininfo.Account token.UserId = user.Id token.Result = 200 //token.Password = pwd token.ServerIp = "" token.Domain = user.Domain sysutils.GetGlobalTokenStore().Set(sec_tooken, token) //sysutils.GetGlobalTokenStore().Set(token.LoginID+user.Domain, token) } else { token = v } data := sysmodel.LoginReturnInfo{} data.Id = user.Id data.LoginId = user.LoginId data.Name = user.Name data.Mobile = user.Mobile data.Email = user.Email data.Token = token.AccessToken data.Type = user.Type data.Domain = user.Domain c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data}) } else { //fmt.Println(err.Error()) c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or password incorrect!", nil}) } } // _Logout // @Title _Logout // @Description 用户退出 // @Success 200 {object} Account // @Failure 403 :id is empty func Sso_Logout(c *entitys.CtrlContext) { token := c.Ctx.GetHeader("token") fmt.Println("delete token: ", token) sysutils.GetGlobalTokenStore().Remove(token) ret := __none_func_sso__() if ret { c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil}) } else { c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil}) } } func Sso_Validate(c *entitys.CtrlContext) { accessToken := c.Ctx.Query("access_token") loginId := c.Ctx.Query("username") requesterType := c.Ctx.Query("type") if requesterType == "app" { //timestamp := c.Ctx.Query("timestamp") //signature := c.Ctx.Query("signature") //token, err := models.ValidateApp(loginId, accessToken, timestamp, signature) //if err != nil { // this.Ctx.WriteString(err.Error()) // this.Ctx.Output.SetStatus(401) // return //} //this.Ctx.Output.JSON(token, false, false) } else { domain := strings.TrimSpace(strings.ToLower(c.Ctx.Query("domain"))) token, err := sysutils.Validate(accessToken, loginId, domain) if err != nil { logs.Error(accessToken, loginId, "校验AccessToken失败:", err) c.Ctx.Data(401, "text", []byte(err.Error())) return } c.Ctx.JSON(200, token) } } func __none_func_sso__(params ...interface{}) bool { return true }