protecting backend images

This commit is contained in:
2025-09-14 19:09:28 +01:00
parent 3ebc0810e7
commit 29c56bee1c

View File

@ -37,12 +37,26 @@ type ImagesReturn struct {
} }
func (h *ImageHandler) serveImage(w http.ResponseWriter, r *http.Request) { func (h *ImageHandler) serveImage(w http.ResponseWriter, r *http.Request) {
imageId, err := middleware.GetPathParamID(h.logger, "id", w, r) imageID, err := middleware.GetPathParamID(h.logger, "id", w, r)
if err != nil { if err != nil {
return return
} }
image, err := h.imageModel.Get(r.Context(), imageId) ctx := r.Context()
userID, err := middleware.GetUserID(ctx, h.logger, w)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
}
isAuthorized := h.imageModel.IsUserAuthorized(ctx, imageID, userID)
if !isAuthorized {
w.WriteHeader(http.StatusUnauthorized)
return
}
image, err := h.imageModel.Get(r.Context(), imageID)
if err != nil { if err != nil {
w.WriteHeader(http.StatusNotFound) w.WriteHeader(http.StatusNotFound)
fmt.Fprintf(w, "Could not get image") fmt.Fprintf(w, "Could not get image")
@ -235,15 +249,13 @@ func (h *ImageHandler) reprocessImage(w http.ResponseWriter, r *http.Request) {
func (h *ImageHandler) CreateRoutes(r chi.Router) { func (h *ImageHandler) CreateRoutes(r chi.Router) {
h.logger.Info("Mounting image router") h.logger.Info("Mounting image router")
// Public route for serving images (not protected)
r.Get("/{id}", h.serveImage)
// Protected routes // Protected routes
r.Group(func(r chi.Router) { r.Group(func(r chi.Router) {
r.Use(middleware.ProtectedRoute) r.Use(middleware.ProtectedRoute)
r.Use(middleware.SetJson) r.Use(middleware.SetJson)
r.Get("/", h.listImages) r.Get("/", h.listImages)
r.Get("/{id}", h.serveImage)
r.Post("/{name}", middleware.WithLimit(h.logger, h.limitsManager.HasReachedImageLimit, h.uploadImage)) r.Post("/{name}", middleware.WithLimit(h.logger, h.limitsManager.HasReachedImageLimit, h.uploadImage))
r.Delete("/{image-id}", h.deleteImage) r.Delete("/{image-id}", h.deleteImage)
}) })