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.

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