SsoController.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package partial
  2. import (
  3. "git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
  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. "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils/auth"
  9. "strings"
  10. //"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  11. )
  12. // _Login
  13. // @Title _Login
  14. // @Description 用户登录
  15. // @Param logininfo false "登录信息"
  16. // @Success 200 {object} Account
  17. // @Failure 403 :id is empty
  18. func Sso_Login(c *entitys.CtrlContext) {
  19. iauth := getAuth(c)
  20. if iauth == nil {
  21. hostname := sysutils.GetHostname(c.Ctx)
  22. c.Ctx.JSON(500, sysmodel.SysReturn{500, "iauth of " + hostname + " is nil", nil})
  23. return
  24. }
  25. iauth.Login(c)
  26. }
  27. // _Logout
  28. // @Title _Logout
  29. // @Description 用户退出
  30. // @Success 200 {object} Account
  31. // @Failure 403 :id is empty
  32. func Sso_Logout(c *entitys.CtrlContext) {
  33. iauth := getAuth(c)
  34. if iauth == nil {
  35. hostname := sysutils.GetHostname(c.Ctx)
  36. c.Ctx.JSON(500, sysmodel.SysReturn{500, "iauth of " + hostname + " is nil", nil})
  37. return
  38. }
  39. iauth.Logout(c)
  40. }
  41. func Sso_Validate(c *entitys.CtrlContext) {
  42. accessToken := c.Ctx.Query("access_token")
  43. loginId := c.Ctx.Query("username")
  44. requesterType := c.Ctx.Query("type")
  45. if requesterType == "app" {
  46. //timestamp := c.Ctx.Query("timestamp")
  47. //signature := c.Ctx.Query("signature")
  48. //token, err := models.ValidateApp(loginId, accessToken, timestamp, signature)
  49. //if err != nil {
  50. // this.Ctx.WriteString(err.Error())
  51. // this.Ctx.Output.SetStatus(401)
  52. // return
  53. //}
  54. //this.Ctx.Output.JSON(token, false, false)
  55. } else {
  56. domain := strings.TrimSpace(strings.ToLower(c.Ctx.Query("domain")))
  57. token, err := sysutils.Validate(accessToken, loginId, domain)
  58. if err != nil {
  59. logs.Error(accessToken, loginId, "校验AccessToken失败:", err)
  60. c.Ctx.Data(401, "text", []byte(err.Error()))
  61. return
  62. }
  63. c.Ctx.JSON(200, token)
  64. }
  65. }
  66. // _TokenValidate
  67. // @Title _TokenValidate
  68. // @Description token验证
  69. // @Param token string false "token"
  70. // @Success 200 {object} Account
  71. // @Failure 403 :id is empty
  72. func Sso_TokenValidate(c *entitys.CtrlContext) {
  73. token := c.Ctx.Query("token")
  74. user, err := sysutils.TokenValidate(token)
  75. if err != nil {
  76. logs.Error(token, "校验AccessToken失败:", err)
  77. c.Ctx.Data(401, "text", []byte(err.Error()))
  78. return
  79. }
  80. c.Ctx.JSON(200, user)
  81. }
  82. func getAuth(c *entitys.CtrlContext) auth.IAuth {
  83. var iauth auth.IAuth = nil
  84. authMode := config.AppConfig.GetKey("auth_mode")
  85. if authMode == "local" {
  86. iauth = auth.GetAuth("qianqiusoft.com")
  87. } else {
  88. hostnames := sysutils.GetHostnames(c.Ctx)
  89. for i := range hostnames {
  90. iauth = auth.GetAuth(hostnames[i])
  91. if iauth != nil {
  92. break
  93. }
  94. }
  95. }
  96. return iauth
  97. }
  98. func __none_func_sso__(params ...interface{}) bool {
  99. return true
  100. }