light_auth.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package auth
  2. import (
  3. "fmt"
  4. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  5. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  6. sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. type LightAuth struct {
  12. }
  13. func init() {
  14. lightAuth := &LightAuth{}
  15. RegisterAuth("qianqiusoft.com", lightAuth)
  16. }
  17. func (la *LightAuth) Init() {
  18. }
  19. func (la *LightAuth) Login(c *entitys.CtrlContext) {
  20. var logininfo sysmodel.LoginInfo
  21. c.Ctx.BindJSON(&logininfo)
  22. //fmt.Println(logininfo)
  23. var user sysmodel.SysUser
  24. ret, err := c.PlatformDbEngine.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user)
  25. if ret && err == nil {
  26. //TODO check password
  27. timestamp := uint64(time.Now().UnixNano())
  28. md5Pwd := sysutils.HashPassword(logininfo.Password, "")
  29. //密码错误
  30. if !strings.EqualFold(user.Password, md5Pwd) {
  31. c.Ctx.JSON(200, sysmodel.SysReturn{400, "password incorrect!", nil})
  32. return
  33. }
  34. token := &entitys.Token{}
  35. timestamp_str := strconv.FormatUint(timestamp, 10)
  36. sec_tooken := sysutils.GenerateToken(logininfo.Account + timestamp_str)
  37. if v := sysutils.GetGlobalTokenStore().Get(sec_tooken); v == nil {
  38. token.AccessToken = sec_tooken
  39. token.RefreshToken = sec_tooken
  40. token.LoginID = logininfo.Account
  41. token.UserId = user.Id
  42. token.Result = 200
  43. //token.Password = pwd
  44. token.ServerIp = ""
  45. token.Domain = user.Domain
  46. sysutils.GetGlobalTokenStore().Set(sec_tooken, token)
  47. //sysutils.GetGlobalTokenStore().Set(token.LoginID+user.Domain, token)
  48. } else {
  49. token = v
  50. }
  51. // 查找Business对应的用户信息
  52. var businessUser sysmodel.SysUser
  53. _, err = c.App.GetBusinessDb(user.Domain).Table(new(sysmodel.SysUser)).ID(user.Id).Get(&businessUser)
  54. if err != nil {
  55. c.Ctx.JSON(200, sysmodel.SysReturn{400, "business db con't found user!", nil})
  56. return
  57. }
  58. data := sysmodel.LoginReturnInfo{}
  59. data.Id = user.Id
  60. data.LoginId = user.LoginId
  61. data.Token = token.AccessToken
  62. data.Type = user.Type
  63. data.Domain = user.Domain
  64. data.OrgId = businessUser.OrgId
  65. data.Name = businessUser.Name
  66. data.Mobile = businessUser.Mobile
  67. data.Email = businessUser.Email
  68. // 查找用户对应角色
  69. var roles []sysmodel.SysRole
  70. 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)
  71. data.Roles = roles
  72. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
  73. } else {
  74. //fmt.Println(err.Error())
  75. c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or password incorrect!", nil})
  76. }
  77. }
  78. func (la *LightAuth) Logout(c *entitys.CtrlContext) {
  79. token := c.Ctx.GetHeader("token")
  80. fmt.Println("delete token: ", token)
  81. sysutils.GetGlobalTokenStore().Remove(token)
  82. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  83. }