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.

104 lines
2.4 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. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/Auth"
  10. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  11. )
  12. // ConversationList returns an encrypted list of all Conversations
  13. func ConversationList(w http.ResponseWriter, r *http.Request) {
  14. var (
  15. conversationDetails []Database.UserConversation
  16. userSession Database.Session
  17. returnJSON []byte
  18. values url.Values
  19. page int
  20. err error
  21. )
  22. values = r.URL.Query()
  23. page, err = strconv.Atoi(values.Get("page"))
  24. if err != nil {
  25. page = 0
  26. }
  27. userSession, _ = Auth.CheckCookie(r)
  28. conversationDetails, err = Database.GetUserConversationsByUserId(
  29. userSession.UserID.String(),
  30. page,
  31. )
  32. if err != nil {
  33. http.Error(w, "Error", http.StatusInternalServerError)
  34. return
  35. }
  36. returnJSON, err = json.MarshalIndent(conversationDetails, "", " ")
  37. if err != nil {
  38. http.Error(w, "Error", http.StatusInternalServerError)
  39. return
  40. }
  41. w.WriteHeader(http.StatusOK)
  42. w.Write(returnJSON)
  43. }
  44. // ConversationDetailsList returns an encrypted list of all ConversationDetails
  45. func ConversationDetailsList(w http.ResponseWriter, r *http.Request) {
  46. var (
  47. conversationDetails []Database.ConversationDetail
  48. detail Database.ConversationDetail
  49. query url.Values
  50. conversationIds []string
  51. messageExpiryRaw driver.Value
  52. returnJSON []byte
  53. i int
  54. ok bool
  55. err error
  56. )
  57. query = r.URL.Query()
  58. conversationIds, ok = query["conversation_detail_ids"]
  59. if !ok {
  60. http.Error(w, "Invalid Data", http.StatusBadGateway)
  61. return
  62. }
  63. conversationIds = strings.Split(conversationIds[0], ",")
  64. conversationDetails, err = Database.GetConversationDetailsByIds(
  65. conversationIds,
  66. )
  67. if err != nil {
  68. http.Error(w, "Error", http.StatusInternalServerError)
  69. return
  70. }
  71. for i, detail = range conversationDetails {
  72. messageExpiryRaw, _ = detail.MessageExpiryDefault.Value()
  73. conversationDetails[i].MessageExpiry, _ = messageExpiryRaw.(string)
  74. if detail.AttachmentID == nil {
  75. continue
  76. }
  77. conversationDetails[i].Attachment.ImageLink = detail.Attachment.FilePath
  78. }
  79. returnJSON, err = json.MarshalIndent(conversationDetails, "", " ")
  80. if err != nil {
  81. http.Error(w, "Error", http.StatusInternalServerError)
  82. return
  83. }
  84. w.WriteHeader(http.StatusOK)
  85. w.Write(returnJSON)
  86. }