message.go 2.2 KB

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