diff options
author | Vitaly Takmazov | 2021-08-27 13:27:05 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2021-08-27 13:27:05 +0300 |
commit | 174c1af0738a3839586aa3b932540ad9c0c9537b (patch) | |
tree | b4ef03446920a385a3ce1d817c7040c0c05182b5 | |
parent | 41ed7f3739d89ac1f5f77c36aaca36ea4c261601 (diff) |
ActivityPub: respond with NOT_FOUND when message is not found
-rw-r--r-- | src/main/java/com/juick/www/api/activity/Profile.java | 19 | ||||
-rw-r--r-- | src/test/java/com/juick/server/tests/ServerTests.java | 3 |
2 files changed, 15 insertions, 7 deletions
diff --git a/src/main/java/com/juick/www/api/activity/Profile.java b/src/main/java/com/juick/www/api/activity/Profile.java index c2b36cbe..618ae387 100644 --- a/src/main/java/com/juick/www/api/activity/Profile.java +++ b/src/main/java/com/juick/www/api/activity/Profile.java @@ -77,6 +77,7 @@ import java.io.InputStream; import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.NoSuchElementException; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -274,12 +275,15 @@ public class Profile { @GetMapping(value = "/n/{mid}-{rid}", produces = { Context.LD_JSON_MEDIA_TYPE, Context.ACTIVITYSTREAMS_PROFILE_MEDIA_TYPE }) public Context showNote(@PathVariable int mid, @PathVariable int rid) { - if (rid > 0) { - // reply - return Context.build(activityPubManager.makeNote(messagesService.getReply(mid, rid))); + try { + Message message = rid > 0 ? messagesService.getReply(mid, rid) : messagesService.getMessage(mid).get(); + if (message != null) { + return Context.build(activityPubManager.makeNote(message)); + } + } catch (NoSuchElementException e) { + throw new HttpNotFoundException(); } - return Context.build( - activityPubManager.makeNote(messagesService.getMessage(mid).orElseThrow(IllegalStateException::new))); + throw new HttpNotFoundException(); } @PostMapping(value = "/api/inbox", consumes = { Context.LD_JSON_MEDIA_TYPE, @@ -362,13 +366,14 @@ public class Profile { messagesService.updateReplyUri(result.getNewMessage().get(), noteId); return new ResponseEntity<>(result, HttpStatus.OK); } - } + } } } else { if (note.getTo().stream().anyMatch(recipient -> recipient.startsWith(baseUri))) { logger.warn("Possible direct message from {}", note.getAttributedTo()); applicationEventPublisher.publishEvent(new DirectMessageEvent(this, note)); - return new ResponseEntity<>(CommandResult.fromString("Message accepted"), HttpStatus.ACCEPTED); + return new ResponseEntity<>(CommandResult.fromString("Message accepted"), + HttpStatus.ACCEPTED); } } logger.warn("Request with invalid recipient from {}", activity.getActor()); diff --git a/src/test/java/com/juick/server/tests/ServerTests.java b/src/test/java/com/juick/server/tests/ServerTests.java index 3ba5d7e3..8583642f 100644 --- a/src/test/java/com/juick/server/tests/ServerTests.java +++ b/src/test/java/com/juick/server/tests/ServerTests.java @@ -1849,6 +1849,9 @@ public class ServerTests { .get(); json = jsonMapper.writeValueAsString(Context.build( activityPubManager.makeNote(messagesService.getReply(replyToExt.getMid(), replyToExt.getRid())))); + mockMvc.perform(get("/n/2-0")).andExpect(status().isOk()); + mockMvc.perform(get("/n/2222-0")).andExpect(status().isNotFound()); + mockMvc.perform(get("/n/2-14")).andExpect(status().isNotFound()); } @Test |