package auth import ( "fmt" "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" "strconv" "strings" "time" ) type LightAuth struct { } func init() { lightAuth := &LightAuth{} RegisterAuth("qianqiusoft.com", lightAuth) } func (la *LightAuth) Init() { } func (la *LightAuth) 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 } // 查找Business对应的用户信息 var businessUser sysmodel.SysUser _, err = c.App.GetBusinessDb(user.Domain).Table(new(sysmodel.SysUser)).ID(user.Id).Get(&businessUser) if err != nil { c.Ctx.JSON(200, sysmodel.SysReturn{400, "business db con't found user!", nil}) return } data := sysmodel.LoginReturnInfo{} data.Id = user.Id data.LoginId = user.LoginId data.Token = token.AccessToken data.Type = user.Type data.Domain = user.Domain data.OrgId = businessUser.OrgId data.Name = businessUser.Name data.Mobile = businessUser.Mobile data.Email = businessUser.Email // 查找用户对应角色 var roles []sysmodel.SysRole c.App.GetBusinessDb(user.Domain).SQL("select sys_role.* from sys_user_role, sys_role where sys_user_role.role_id = sys_role.id and sys_role.del_flag = 0 and sys_user_role.user_id = ? order by sys_role.priority asc", user.Id).Find(&roles) data.Roles = roles 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}) } } func (la *LightAuth) Logout(c *entitys.CtrlContext) { token := c.Ctx.GetHeader("token") fmt.Println("delete token: ", token) sysutils.GetGlobalTokenStore().Remove(token) c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil}) }