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.

55 lines
1.3 KiB

  1. package Messages
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "net/http"
  6. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Database"
  7. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Models"
  8. "git.tovijaeschke.xyz/tovi/Capsule/Backend/Util"
  9. )
  10. type rawMessageData struct {
  11. MessageData Models.MessageData `json:"message_data"`
  12. Messages []Models.Message `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. decodedFile []byte
  20. fileName string
  21. err error
  22. )
  23. err = json.NewDecoder(r.Body).Decode(&messagesData)
  24. if err != nil {
  25. http.Error(w, "Error", http.StatusInternalServerError)
  26. return
  27. }
  28. for _, messageData = range messagesData {
  29. if messageData.MessageData.Data == "" {
  30. decodedFile, err = base64.StdEncoding.DecodeString(messageData.MessageData.Attachment.Data)
  31. fileName, err = Util.WriteFile(decodedFile)
  32. messageData.MessageData.Attachment.FilePath = fileName
  33. }
  34. err = Database.CreateMessageData(&messageData.MessageData)
  35. if err != nil {
  36. http.Error(w, "Error", http.StatusInternalServerError)
  37. return
  38. }
  39. err = Database.CreateMessages(&messageData.Messages)
  40. if err != nil {
  41. http.Error(w, "Error", http.StatusInternalServerError)
  42. return
  43. }
  44. }
  45. w.WriteHeader(http.StatusOK)
  46. }