login_ware.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package middleware
  2. import (
  3. "encoding/base64"
  4. "fmt"
  5. "git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
  6. sysmodels "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  7. "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  8. "git.qianqiusoft.com/qianqiusoft/light-apiengine/wfclient"
  9. "github.com/gin-gonic/gin"
  10. "strings"
  11. )
  12. func LoginWare() gin.HandlerFunc {
  13. return func(c *gin.Context) {
  14. //验证登陆
  15. //fmt.Println("header-Authorization:" + c.GetHeader("Authorization"))
  16. s := strings.SplitN(c.GetHeader("Authorization"), " ", 2)
  17. if len(s) != 2 {
  18. fmt.Println("sso header not found.")
  19. c.Redirect(302, "/login")
  20. return
  21. }
  22. b, err := base64.StdEncoding.DecodeString(s[1])
  23. fmt.Println("base64 decode:" + string(b))
  24. if err != nil {
  25. fmt.Println("sso header decode error." + err.Error())
  26. c.Redirect(302, "/login")
  27. return
  28. }
  29. pair := strings.SplitN(string(b), ":", 3)
  30. if len(pair) != 3 {
  31. fmt.Println("sso header len(pair) !=3")
  32. c.Redirect(302, "/login")
  33. return
  34. }
  35. tk := utils.GetGlobalTokenStore().Get(pair[0] + pair[2])
  36. if tk == nil {
  37. c.AbortWithStatusJSON(401, sysmodels.SysReturn{401, "token Invalid", ""})
  38. c.Redirect(302, "/login")
  39. return
  40. }
  41. wfendpoint := config.AppConfig.GetKey("wfendpoint")
  42. wfclient.Instance().Init(wfendpoint, tk.UserId, tk.LoginID, tk.AccessToken, tk.Domain)
  43. c.Set("token", tk)
  44. c.Set("user_id", tk.UserId)
  45. c.Set("domain", tk.Domain)
  46. c.Next()
  47. }
  48. }