aboutsummaryrefslogtreecommitdiff
path: root/internal/api/enclosure.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api/enclosure.go')
-rw-r--r--internal/api/enclosure.go80
1 files changed, 80 insertions, 0 deletions
diff --git a/internal/api/enclosure.go b/internal/api/enclosure.go
new file mode 100644
index 00000000..45222b33
--- /dev/null
+++ b/internal/api/enclosure.go
@@ -0,0 +1,80 @@
+// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+package api // import "miniflux.app/v2/internal/api"
+
+import (
+ json_parser "encoding/json"
+ "net/http"
+
+ "miniflux.app/v2/internal/http/request"
+ "miniflux.app/v2/internal/http/response/json"
+ "miniflux.app/v2/internal/model"
+ "miniflux.app/v2/internal/validator"
+)
+
+func (h *handler) getEnclosureById(w http.ResponseWriter, r *http.Request) {
+ enclosureID := request.RouteInt64Param(r, "enclosureID")
+
+ enclosure, err := h.store.GetEnclosure(enclosureID)
+
+ if err != nil {
+ json.NotFound(w, r)
+ return
+ }
+
+ userID := request.UserID(r)
+
+ if enclosure.UserID != userID {
+ json.NotFound(w, r)
+ return
+ }
+
+ enclosure.ProxifyEnclosureURL(h.router)
+
+ json.OK(w, r, enclosure)
+}
+
+func (h *handler) updateEnclosureById(w http.ResponseWriter, r *http.Request) {
+ enclosureID := request.RouteInt64Param(r, "enclosureID")
+
+ var enclosureUpdateRequest model.EnclosureUpdateRequest
+
+ if err := json_parser.NewDecoder(r.Body).Decode(&enclosureUpdateRequest); err != nil {
+ json.BadRequest(w, r, err)
+ return
+ }
+
+ if err := validator.ValidateEnclosureUpdateRequest(&enclosureUpdateRequest); err != nil {
+ json.BadRequest(w, r, err)
+ return
+ }
+
+ enclosure, err := h.store.GetEnclosure(enclosureID)
+
+ if err != nil {
+ json.BadRequest(w, r, err)
+ return
+ }
+
+ if enclosure == nil {
+ json.NotFound(w, r)
+ return
+ }
+
+ userID := request.UserID(r)
+
+ if enclosure.UserID != userID {
+ json.NotFound(w, r)
+ return
+ }
+
+ enclosure.MediaProgression = enclosureUpdateRequest.MediaProgression
+
+ if err := h.store.UpdateEnclosure(enclosure); err != nil {
+ json.ServerError(w, r, err)
+ return
+ }
+
+ json.NoContent(w, r)
+}