func deleteNotification(w http.ResponseWriter, r *twocloud.RequestBundle) { username := r.Request.URL.Query().Get(":username") user := r.AuthUser if strings.ToLower(username) != strings.ToLower(r.AuthUser.Username) { if !r.AuthUser.IsAdmin { Respond(w, r, http.StatusUnauthorized, "You don't have access to that user's notifications.", []interface{}{}) return } id, err := r.GetUserID(username) if err != nil { r.Log.Error(err.Error()) Respond(w, r, http.StatusInternalServerError, "Internal server error", []interface{}{}) return } user, err = r.GetUser(id) if err != nil { r.Log.Error(err.Error()) Respond(w, r, http.StatusInternalServerError, "Internal server error", []interface{}{}) return } } notificationID, err := strconv.ParseUint(r.Request.URL.Query().Get(":notification"), 10, 64) if err != nil { Respond(w, r, http.StatusBadRequest, "Invalid notification ID", []interface{}{}) return } notification, err := r.GetNotification(notificationID) if err != nil { Respond(w, r, http.StatusInternalServerError, "Internal server error", []interface{}{}) return } if notification.DestinationType == "user" && notification.Destination != user.ID { Respond(w, r, http.StatusBadRequest, "That notification doesn't belong to that user.", []interface{}{}) return } else if notification.DestinationType == "device" { device, err := r.GetDevice(notification.Destination) if err != nil { Respond(w, r, http.StatusInternalServerError, "Internal server error", []interface{}{}) return } if device.UserID != user.ID { Respond(w, r, http.StatusBadRequest, "That notification does not belong to that user.", []interface{}{}) return } } err = r.DeleteNotification(notification) if err != nil { Respond(w, r, http.StatusInternalServerError, "Internal server error", []interface{}{}) return } Respond(w, r, http.StatusOK, "Successfully deleted the notification", []interface{}{notification}) return }