message.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package controller
  2. import (
  3. "encoding/json"
  4. "github.com/gin-gonic/gin"
  5. "message-pusher/channel"
  6. "message-pusher/common"
  7. "message-pusher/model"
  8. "net/http"
  9. )
  10. func GetPushMessage(c *gin.Context) {
  11. message := channel.Message{
  12. Title: c.Query("title"),
  13. Description: c.Query("description"),
  14. Content: c.Query("content"),
  15. URL: c.Query("url"),
  16. Channel: c.Query("channel"),
  17. Token: c.Query("token"),
  18. }
  19. if message.Description == "" {
  20. // Keep compatible with ServerChan
  21. message.Description = c.Query("desp")
  22. }
  23. if message.Channel == "" {
  24. // Keep compatible with old version
  25. message.Channel = c.Query("type")
  26. }
  27. pushMessageHelper(c, &message)
  28. }
  29. func PostPushMessage(c *gin.Context) {
  30. message := channel.Message{
  31. Title: c.PostForm("title"),
  32. Description: c.PostForm("description"),
  33. Content: c.PostForm("content"),
  34. URL: c.PostForm("url"),
  35. Channel: c.PostForm("channel"),
  36. Token: c.PostForm("token"),
  37. Desp: c.PostForm("desp"),
  38. }
  39. if message == (channel.Message{}) {
  40. // Looks like the user is using JSON
  41. err := json.NewDecoder(c.Request.Body).Decode(&message)
  42. if err != nil {
  43. c.JSON(http.StatusOK, gin.H{
  44. "success": false,
  45. "message": "无法解析请求体,请检查其是否为合法 JSON",
  46. })
  47. return
  48. }
  49. }
  50. if message.Description == "" {
  51. message.Description = message.Desp
  52. }
  53. pushMessageHelper(c, &message)
  54. }
  55. func pushMessageHelper(c *gin.Context, message *channel.Message) {
  56. user := model.User{Username: c.Param("username")}
  57. err := user.FillUserByUsername()
  58. if err != nil {
  59. c.JSON(http.StatusForbidden, gin.H{
  60. "success": false,
  61. "message": err.Error(),
  62. })
  63. return
  64. }
  65. if user.Status == common.UserStatusNonExisted {
  66. c.JSON(http.StatusForbidden, gin.H{
  67. "success": false,
  68. "message": "用户不存在",
  69. })
  70. return
  71. }
  72. if user.Status == common.UserStatusDisabled {
  73. c.JSON(http.StatusForbidden, gin.H{
  74. "success": false,
  75. "message": "用户已被封禁",
  76. })
  77. return
  78. }
  79. if user.Token != "" && user.Token != " " {
  80. if message.Token == "" {
  81. message.Token = c.Request.Header.Get("Authorization")
  82. if message.Token == "" {
  83. c.JSON(http.StatusForbidden, gin.H{
  84. "success": false,
  85. "message": "token 为空",
  86. })
  87. return
  88. }
  89. }
  90. if user.Token != message.Token {
  91. c.JSON(http.StatusForbidden, gin.H{
  92. "success": false,
  93. "message": "无效的 token",
  94. })
  95. return
  96. }
  97. }
  98. if message.Title == "" {
  99. message.Title = common.SystemName
  100. }
  101. if message.Channel == "" {
  102. message.Channel = user.Channel
  103. if message.Channel == "" {
  104. message.Channel = channel.TypeEmail
  105. }
  106. }
  107. err = message.Send(&user)
  108. if err != nil {
  109. c.JSON(http.StatusOK, gin.H{
  110. "success": false,
  111. "message": err.Error(),
  112. })
  113. return
  114. }
  115. c.JSON(http.StatusOK, gin.H{
  116. "success": true,
  117. "message": "ok",
  118. })
  119. return
  120. }