message.go 2.5 KB

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