SsoController.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package partial
  2. import (
  3. "fmt"
  4. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  5. "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
  6. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  7. sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  8. "strconv"
  9. "strings"
  10. "time"
  11. //"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  12. )
  13. // _Login
  14. // @Title _Login
  15. // @Description 用户登录
  16. // @Param logininfo false "登录信息"
  17. // @Success 200 {object} Account
  18. // @Failure 403 :id is empty
  19. func Sso_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. data := sysmodel.LoginReturnInfo{}
  52. data.Id = user.Id
  53. data.LoginId = user.LoginId
  54. data.Name = user.Name
  55. data.Mobile = user.Mobile
  56. data.Email = user.Email
  57. data.Token = token.AccessToken
  58. data.Type = user.Type
  59. data.Domain = user.Domain
  60. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
  61. } else {
  62. //fmt.Println(err.Error())
  63. c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or password incorrect!", nil})
  64. }
  65. }
  66. // _Logout
  67. // @Title _Logout
  68. // @Description 用户退出
  69. // @Success 200 {object} Account
  70. // @Failure 403 :id is empty
  71. func Sso_Logout(c *entitys.CtrlContext) {
  72. token := c.Ctx.GetHeader("token")
  73. fmt.Println("delete token: ", token)
  74. sysutils.GetGlobalTokenStore().Remove(token)
  75. ret := __none_func_sso__()
  76. if ret {
  77. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  78. } else {
  79. c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
  80. }
  81. }
  82. func Sso_Validate(c *entitys.CtrlContext) {
  83. accessToken := c.Ctx.Query("access_token")
  84. loginId := c.Ctx.Query("username")
  85. requesterType := c.Ctx.Query("type")
  86. if requesterType == "app" {
  87. //timestamp := c.Ctx.Query("timestamp")
  88. //signature := c.Ctx.Query("signature")
  89. //token, err := models.ValidateApp(loginId, accessToken, timestamp, signature)
  90. //if err != nil {
  91. // this.Ctx.WriteString(err.Error())
  92. // this.Ctx.Output.SetStatus(401)
  93. // return
  94. //}
  95. //this.Ctx.Output.JSON(token, false, false)
  96. } else {
  97. domain := strings.TrimSpace(strings.ToLower(c.Ctx.Query("domain")))
  98. token, err := sysutils.Validate(accessToken, loginId, domain)
  99. if err != nil {
  100. logs.Error(accessToken, loginId, "校验AccessToken失败:", err)
  101. c.Ctx.Data(401, "text", []byte(err.Error()))
  102. return
  103. }
  104. c.Ctx.JSON(200, token)
  105. }
  106. }
  107. // _TokenValidate
  108. // @Title _TokenValidate
  109. // @Description token验证
  110. // @Param token string false "token"
  111. // @Success 200 {object} Account
  112. // @Failure 403 :id is empty
  113. func Sso_TokenValidate(c *entitys.CtrlContext) {
  114. token := c.Ctx.Query("token")
  115. user, err := sysutils.TokenValidate(token)
  116. if err != nil {
  117. logs.Error(token, "校验AccessToken失败:", err)
  118. c.Ctx.Data(401, "text", []byte(err.Error()))
  119. return
  120. }
  121. c.Ctx.JSON(200, user)
  122. }
  123. func __none_func_sso__(params ...interface{}) bool {
  124. return true
  125. }