Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
2.7 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. package Messages
  2. import (
  3. "database/sql/driver"
  4. "encoding/json"
  5. "net/http"
  6. "net/url"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/Auth"
  11. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  12. )
  13. // ConversationList returns an encrypted list of all Conversations
  14. func ConversationList(w http.ResponseWriter, r *http.Request) {
  15. var (
  16. conversationDetails []Database.UserConversation
  17. userSession Database.Session
  18. returnJSON []byte
  19. values url.Values
  20. page int
  21. err error
  22. )
  23. values = r.URL.Query()
  24. page, err = strconv.Atoi(values.Get("page"))
  25. if err != nil {
  26. page = 0
  27. }
  28. userSession, _ = Auth.CheckCookie(r)
  29. conversationDetails, err = Database.GetUserConversationsByUserId(
  30. userSession.UserID.String(),
  31. page,
  32. )
  33. if err != nil {
  34. http.Error(w, "Error", http.StatusInternalServerError)
  35. return
  36. }
  37. returnJSON, err = json.MarshalIndent(conversationDetails, "", " ")
  38. if err != nil {
  39. http.Error(w, "Error", http.StatusInternalServerError)
  40. return
  41. }
  42. w.WriteHeader(http.StatusOK)
  43. w.Write(returnJSON)
  44. }
  45. // ConversationDetailsList returns an encrypted list of all ConversationDetails
  46. func ConversationDetailsList(w http.ResponseWriter, r *http.Request) {
  47. var (
  48. conversationDetails []Database.ConversationDetail
  49. detail Database.ConversationDetail
  50. query url.Values
  51. conversationIds []string
  52. updatedAtString []string
  53. updatedAt time.Time
  54. messageExpiryRaw driver.Value
  55. returnJSON []byte
  56. i int
  57. ok bool
  58. err error
  59. )
  60. query = r.URL.Query()
  61. conversationIds, ok = query["conversation_detail_ids"]
  62. if !ok {
  63. http.Error(w, "Invalid Data", http.StatusBadGateway)
  64. return
  65. }
  66. conversationIds = strings.Split(conversationIds[0], ",")
  67. updatedAtString, ok = query["updated_at"]
  68. if ok {
  69. updatedAt, err = time.Parse(time.RFC3339, updatedAtString[0])
  70. if err != nil {
  71. http.Error(w, "Invalid Data", http.StatusBadGateway)
  72. return
  73. }
  74. }
  75. conversationDetails, err = Database.GetConversationDetailsByIds(
  76. conversationIds,
  77. updatedAt,
  78. )
  79. if err != nil {
  80. http.Error(w, "Error", http.StatusInternalServerError)
  81. return
  82. }
  83. for i, detail = range conversationDetails {
  84. messageExpiryRaw, _ = detail.MessageExpiryDefault.Value()
  85. conversationDetails[i].MessageExpiry, _ = messageExpiryRaw.(string)
  86. if detail.AttachmentID == nil {
  87. continue
  88. }
  89. conversationDetails[i].Attachment.ImageLink = detail.Attachment.FilePath
  90. }
  91. returnJSON, err = json.MarshalIndent(conversationDetails, "", " ")
  92. if err != nil {
  93. http.Error(w, "Error", http.StatusInternalServerError)
  94. return
  95. }
  96. w.WriteHeader(http.StatusOK)
  97. w.Write(returnJSON)
  98. }