From 517ff1ad411f198e69dc52186f4bb14be5e8c0ff Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Mon, 23 Feb 2026 17:01:05 -0600 Subject: [PATCH] MME-30 Fix null pointer exception when getUser returns null; better querying of Images. --- .../app/mealsmadeeasy/api/image/ImageController.java | 12 ++++-------- .../app/mealsmadeeasy/api/image/ImageService.java | 2 +- .../app/mealsmadeeasy/api/image/S3ImageService.java | 11 ----------- 3 files changed, 5 insertions(+), 20 deletions(-) diff --git a/src/main/java/app/mealsmadeeasy/api/image/ImageController.java b/src/main/java/app/mealsmadeeasy/api/image/ImageController.java index 1c84deb..025231e 100644 --- a/src/main/java/app/mealsmadeeasy/api/image/ImageController.java +++ b/src/main/java/app/mealsmadeeasy/api/image/ImageController.java @@ -60,8 +60,7 @@ public class ImageController { @PathVariable String username, @PathVariable String filename ) throws IOException { - final User owner = this.userService.getUser(username); - final Image image = this.imageService.getByOwnerAndFilename(owner, filename, principal); + final Image image = this.imageService.getByUsernameAndFilename(username, filename, principal); final InputStream imageInputStream = this.imageService.getImageContent(image, principal); return ResponseEntity.status(200) .contentType(MediaType.parseMediaType(image.getMimeType())) @@ -74,8 +73,7 @@ public class ImageController { @PathVariable String username, @PathVariable String filename ) { - final User owner = this.userService.getUser(username); - final Image image = this.imageService.getByOwnerAndFilename(owner, filename, principal); + final Image image = this.imageService.getByUsernameAndFilename(username, filename, principal); return ResponseEntity.ok( this.imageToViewConverter.convert(image, principal, false) ); @@ -116,8 +114,7 @@ public class ImageController { @PathVariable String filename, @RequestBody ImageUpdateBody body ) { - final User owner = this.userService.getUser(username); - final Image image = this.imageService.getByOwnerAndFilename(owner, filename, principal); + final Image image = this.imageService.getByUsernameAndFilename(username, filename, principal); final Image updated = this.imageService.update( image, principal, @@ -142,8 +139,7 @@ public class ImageController { @PathVariable String username, @PathVariable String filename ) throws IOException { - final User owner = this.userService.getUser(username); - final Image image = this.imageService.getByOwnerAndFilename(owner, filename, principal); + final Image image = this.imageService.getByUsernameAndFilename(username, filename, principal); this.imageService.deleteImage(image, principal); return ResponseEntity.noContent().build(); } diff --git a/src/main/java/app/mealsmadeeasy/api/image/ImageService.java b/src/main/java/app/mealsmadeeasy/api/image/ImageService.java index 5755f22..2ee07c3 100644 --- a/src/main/java/app/mealsmadeeasy/api/image/ImageService.java +++ b/src/main/java/app/mealsmadeeasy/api/image/ImageService.java @@ -17,7 +17,7 @@ public interface ImageService { throws IOException, ImageException; Image getById(Integer id, @Nullable User viewer); - Image getByOwnerAndFilename(User owner, String filename, User viewer); + Image getByUsernameAndFilename(String username, String filename, User viewer); InputStream getImageContent(Image image, @Nullable User viewer) throws IOException; diff --git a/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java b/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java index 70741c4..036682e 100644 --- a/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java +++ b/src/main/java/app/mealsmadeeasy/api/image/S3ImageService.java @@ -231,17 +231,6 @@ public class S3ImageService implements ImageService { return this.imageRepository.findById(id).orElseThrow(() -> new NoSuchEntityWithIdException(Image.class, id)); } - @Override - @PostAuthorize("@imageSecurity.isViewableBy(returnObject, #viewer)") - public Image getByOwnerAndFilename(User owner, String filename, User viewer) { - return this.imageRepository.findByOwnerAndUserFilename(owner, filename) - .orElseThrow(() -> new NoSuchEntityWithUsernameAndFilenameException( - Image.class, - owner.getUsername(), - filename - )); - } - @Override @PostAuthorize("@imageSecurity.isViewableBy(returnObject, #viewer)") public Image getByUsernameAndFilename(String username, String filename, User viewer) {