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.

75 lines
1.8 KiB

  1. package Friends
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "net/http"
  6. "time"
  7. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Database"
  8. "git.tovijaeschke.xyz/tovi/Envelope/Backend/Models"
  9. "github.com/gorilla/mux"
  10. )
  11. // AcceptFriendRequest accepts friend requests
  12. func AcceptFriendRequest(w http.ResponseWriter, r *http.Request) {
  13. var (
  14. oldFriendRequest Models.FriendRequest
  15. newFriendRequest Models.FriendRequest
  16. urlVars map[string]string
  17. friendRequestID string
  18. requestBody []byte
  19. ok bool
  20. err error
  21. )
  22. urlVars = mux.Vars(r)
  23. friendRequestID, ok = urlVars["requestID"]
  24. if !ok {
  25. http.Error(w, "Not Found", http.StatusNotFound)
  26. return
  27. }
  28. oldFriendRequest, err = Database.GetFriendRequestByID(friendRequestID)
  29. if err != nil {
  30. http.Error(w, "Error", http.StatusInternalServerError)
  31. w.WriteHeader(http.StatusInternalServerError)
  32. return
  33. }
  34. oldFriendRequest.AcceptedAt.Time = time.Now()
  35. oldFriendRequest.AcceptedAt.Valid = true
  36. requestBody, err = ioutil.ReadAll(r.Body)
  37. if err != nil {
  38. http.Error(w, "Error", http.StatusInternalServerError)
  39. w.WriteHeader(http.StatusInternalServerError)
  40. return
  41. }
  42. err = json.Unmarshal(requestBody, &newFriendRequest)
  43. if err != nil {
  44. http.Error(w, "Error", http.StatusInternalServerError)
  45. w.WriteHeader(http.StatusInternalServerError)
  46. return
  47. }
  48. err = Database.UpdateFriendRequest(&oldFriendRequest)
  49. if err != nil {
  50. http.Error(w, "Error", http.StatusInternalServerError)
  51. w.WriteHeader(http.StatusInternalServerError)
  52. return
  53. }
  54. newFriendRequest.AcceptedAt.Time = time.Now()
  55. newFriendRequest.AcceptedAt.Valid = true
  56. err = Database.CreateFriendRequest(&newFriendRequest)
  57. if err != nil {
  58. http.Error(w, "Error", http.StatusInternalServerError)
  59. w.WriteHeader(http.StatusInternalServerError)
  60. return
  61. }
  62. w.WriteHeader(http.StatusNoContent)
  63. }