message.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. err := json.NewDecoder(c.Request.Body).Decode(&message)
  32. if err != nil {
  33. c.JSON(http.StatusOK, gin.H{
  34. "success": false,
  35. "message": "无法解析请求体,请检查其是否为合法 JSON",
  36. })
  37. return
  38. }
  39. pushMessageHelper(c, &message)
  40. }
  41. func pushMessageHelper(c *gin.Context, message *channel.Message) {
  42. user := model.User{Username: c.Param("username")}
  43. user.FillUserByUsername()
  44. if user.Status == common.UserStatusNonExisted {
  45. c.JSON(http.StatusForbidden, gin.H{
  46. "success": false,
  47. "message": "用户不存在",
  48. })
  49. return
  50. }
  51. if user.Status == common.UserStatusDisabled {
  52. c.JSON(http.StatusForbidden, gin.H{
  53. "success": false,
  54. "message": "用户已被封禁",
  55. })
  56. return
  57. }
  58. if user.Token != "" && user.Token != " " {
  59. if message.Token == "" {
  60. message.Token = c.Request.Header.Get("Authorization")
  61. if message.Token == "" {
  62. c.JSON(http.StatusForbidden, gin.H{
  63. "success": false,
  64. "message": "token 为空",
  65. })
  66. return
  67. }
  68. }
  69. if user.Token != message.Token {
  70. c.JSON(http.StatusForbidden, gin.H{
  71. "success": false,
  72. "message": "无效的 token",
  73. })
  74. return
  75. }
  76. }
  77. if message.Title == "" {
  78. message.Title = common.SystemName
  79. }
  80. if message.Channel == "" {
  81. message.Channel = user.Channel
  82. if message.Channel == "" {
  83. message.Channel = channel.TypeEmail
  84. }
  85. }
  86. err := message.Send(&user)
  87. if err != nil {
  88. c.JSON(http.StatusOK, gin.H{
  89. "success": false,
  90. "message": err.Error(),
  91. })
  92. return
  93. }
  94. c.JSON(http.StatusOK, gin.H{
  95. "success": true,
  96. "message": "ok",
  97. })
  98. return
  99. }