message.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 != "" {
  57. if message.Token == "" {
  58. message.Token = c.Request.Header.Get("Authorization")
  59. }
  60. if user.Token != message.Token {
  61. c.JSON(http.StatusForbidden, gin.H{
  62. "success": false,
  63. "message": "无效的 token",
  64. })
  65. return
  66. }
  67. }
  68. if message.Title == "" {
  69. message.Title = common.SystemName
  70. }
  71. if message.Content != "" {
  72. var buf bytes.Buffer
  73. err := goldmark.Convert([]byte(message.Content), &buf)
  74. if err != nil {
  75. common.SysLog(err.Error())
  76. } else {
  77. message.Content = buf.String()
  78. }
  79. } else {
  80. if message.Description != "" {
  81. message.Content = message.Description
  82. } else {
  83. message.Content = "无内容"
  84. }
  85. }
  86. if message.Channel == "" {
  87. message.Channel = user.Channel
  88. if message.Channel == "" {
  89. message.Channel = channel.TypeEmail
  90. }
  91. }
  92. err := message.Send(&user)
  93. if err != nil {
  94. c.JSON(http.StatusOK, gin.H{
  95. "success": false,
  96. "message": err.Error(),
  97. })
  98. return
  99. }
  100. c.JSON(http.StatusOK, gin.H{
  101. "success": true,
  102. "message": "ok",
  103. })
  104. return
  105. }