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.

72 lines
1.8 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. package Messages
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "net/http"
  6. "time"
  7. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
  8. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  9. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Util"
  10. )
  11. type rawMessageData struct {
  12. MessageData Models.MessageData `json:"message_data"`
  13. Messages []Models.Message `json:"message"`
  14. }
  15. // CreateMessage sends a message
  16. func CreateMessage(w http.ResponseWriter, r *http.Request) {
  17. var (
  18. messagesData []rawMessageData
  19. messageData rawMessageData
  20. message Models.Message
  21. t time.Time
  22. decodedFile []byte
  23. fileName string
  24. i int
  25. err error
  26. )
  27. err = json.NewDecoder(r.Body).Decode(&messagesData)
  28. if err != nil {
  29. http.Error(w, "Error", http.StatusInternalServerError)
  30. return
  31. }
  32. for _, messageData = range messagesData {
  33. if messageData.MessageData.Data == "" {
  34. decodedFile, err = base64.StdEncoding.DecodeString(messageData.MessageData.Attachment.Data)
  35. fileName, err = Util.WriteFile(decodedFile)
  36. messageData.MessageData.Attachment.FilePath = fileName
  37. }
  38. for i, message = range messageData.Messages {
  39. t, err = time.Parse("2006-01-02T15:04:05Z", message.ExpiryRaw)
  40. if err != nil {
  41. http.Error(w, "Error", http.StatusInternalServerError)
  42. return
  43. }
  44. err = messageData.Messages[i].Expiry.Scan(t)
  45. if err != nil {
  46. http.Error(w, "Error", http.StatusInternalServerError)
  47. return
  48. }
  49. }
  50. err = Database.CreateMessageData(&messageData.MessageData)
  51. if err != nil {
  52. http.Error(w, "Error", http.StatusInternalServerError)
  53. return
  54. }
  55. err = Database.CreateMessages(&messageData.Messages)
  56. if err != nil {
  57. http.Error(w, "Error", http.StatusInternalServerError)
  58. return
  59. }
  60. }
  61. w.WriteHeader(http.StatusNoContent)
  62. }