auth.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package middleware
  2. import (
  3. "bytes"
  4. "dsbqj-admin/pkg/serializer"
  5. "dsbqj-admin/pkg/util"
  6. "github.com/gin-gonic/gin"
  7. "github.com/goccy/go-json"
  8. "io/ioutil"
  9. "os"
  10. )
  11. // CurrentUser 获取登录用户
  12. //func CurrentUser() gin.HandlerFunc {
  13. // return func(c *gin.Context) {
  14. // session := sessions.Default(c)
  15. // uid := session.Get("user_id")
  16. // if uid != nil {
  17. // user, err := model.GetUser(uid)
  18. // if err == nil {
  19. // c.Set("user", &user)
  20. // }
  21. // }
  22. // c.Next()
  23. // }
  24. //}
  25. // CurrentAdmin 获取登录用户
  26. //func CurrentAdmin() gin.HandlerFunc {
  27. // return func(c *gin.Context) {
  28. // session := sessions.Default(c)
  29. // uid := session.Get("admin_id")
  30. // if uid != nil {
  31. // admin, err := model.GetAdmin(uid)
  32. // if err == nil {
  33. // c.Set("admin", &admin)
  34. // }
  35. // }
  36. // c.Next()
  37. // }
  38. //}
  39. // AuthRequired 需要登录
  40. func AuthRequired() gin.HandlerFunc {
  41. return func(c *gin.Context) {
  42. var loginToken util.Token
  43. token := c.GetHeader("Token")
  44. info := util.ParseToken(token, os.Getenv("TOKEN_SECRET"))
  45. if len(info) == 0 {
  46. c.JSON(200, serializer.Response{
  47. Code: 403,
  48. Msg: "token解析失败",
  49. })
  50. c.Abort()
  51. return
  52. }
  53. json.Unmarshal(info, &loginToken)
  54. if loginToken.Status == "active" || loginToken.Status == "host" {
  55. if util.GetNowSecond()-loginToken.ExpiresIn < 24*60*60*1000 {
  56. c.Set("user", &loginToken)
  57. c.Next()
  58. return
  59. }
  60. } else {
  61. c.JSON(200, serializer.Response{
  62. Code: 402,
  63. Msg: "需要完善数据",
  64. })
  65. c.Abort()
  66. return
  67. }
  68. c.JSON(200, serializer.Response{
  69. Code: 401,
  70. Msg: "需要登录",
  71. })
  72. c.Abort()
  73. }
  74. }
  75. func AdminRequired() gin.HandlerFunc {
  76. return func(c *gin.Context) {
  77. var loginToken util.Token
  78. token := c.GetHeader("Token")
  79. info := util.ParseToken(token, os.Getenv("TOKEN_SECRET"))
  80. if len(info) == 0 {
  81. c.JSON(200, serializer.Response{
  82. Code: 403,
  83. Msg: "token解析失败",
  84. })
  85. c.Abort()
  86. return
  87. }
  88. json.Unmarshal(info, &loginToken)
  89. if util.GetNowSecond()-loginToken.ExpiresIn < 24*60*60*1000 {
  90. c.Set("user", &loginToken)
  91. c.Next()
  92. return
  93. }
  94. c.JSON(200, serializer.Response{
  95. Code: 401,
  96. Msg: "需要登录",
  97. })
  98. c.Abort()
  99. }
  100. }
  101. func WebRequired() gin.HandlerFunc {
  102. return func(c *gin.Context) {
  103. var loginToken util.Token
  104. token := c.GetHeader("Token")
  105. if token == "DCciDkTCPwFxTYxFzdgxYoOQVXJesKwQccNddefRMmYUfXnXcgQdPaAHcVJWENJHBh" { // 管理平台发送的请求 特殊处理
  106. loginToken.Role = "web"
  107. c.Set("user", &loginToken)
  108. c.Next()
  109. return
  110. }
  111. c.JSON(200, serializer.Response{
  112. Code: 401,
  113. Msg: "没有请求权限",
  114. })
  115. c.Abort()
  116. }
  117. }
  118. func BodyHandler() gin.HandlerFunc {
  119. return func(c *gin.Context) {
  120. payload, err := c.GetRawData()
  121. if err != nil {
  122. c.JSON(200, serializer.Response{
  123. Code: 501,
  124. Msg: "数据读取错误",
  125. })
  126. c.Abort()
  127. return
  128. }
  129. //todo test use it, need delete it after test
  130. // payloadstr := util.EncryptDES_ECB(payload, os.Getenv("CRYPRO_SECRET"))
  131. // payload = []byte(payloadstr)
  132. if len(payload) != 0 {
  133. res, err := util.DecryptDES_ECB(string(payload), os.Getenv("CRYPRO_SECRET"))
  134. if err != nil {
  135. c.JSON(200, serializer.Response{
  136. Code: 501,
  137. Msg: "数据解析错误",
  138. })
  139. c.Abort()
  140. return
  141. }
  142. j := map[string]interface{}{}
  143. json.Unmarshal([]byte(res), &j)
  144. buf, _ := json.Marshal(j)
  145. c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(buf))
  146. }
  147. c.Next()
  148. }
  149. }