blob: fd672f8434811dfd9fbb54e49f3f8bcdc3ec5f5e [file] [log] [blame]
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +01001package eu.mulk.mulkcms2.benki.lazychat;
2
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +02003import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
4
5import eu.mulk.mulkcms2.benki.posts.Post;
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +02006import eu.mulk.mulkcms2.benki.posts.PostFilter;
7import eu.mulk.mulkcms2.benki.posts.PostResource;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +01008import io.quarkus.security.Authenticated;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +01009import java.net.URI;
10import java.net.URISyntaxException;
11import java.time.OffsetDateTime;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020012import java.util.Objects;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010013import javax.transaction.Transactional;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020014import javax.ws.rs.ForbiddenException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010015import javax.ws.rs.FormParam;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020016import javax.ws.rs.GET;
17import javax.ws.rs.NotFoundException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010018import javax.ws.rs.POST;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010019import javax.ws.rs.Path;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020020import javax.ws.rs.PathParam;
21import javax.ws.rs.Produces;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010022import javax.ws.rs.core.Response;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010023
24@Path("/lazychat")
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020025public class LazychatResource extends PostResource {
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010026
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020027 public LazychatResource() {
28 super(PostFilter.LAZYCHAT_MESSAGES_ONLY, "Lazy Chat");
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010029 }
30
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010031 @POST
32 @Transactional
33 @Authenticated
34 public Response postMessage(
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020035 @FormParam("text") String text, @FormParam("visibility") Post.Visibility visibility)
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010036 throws URISyntaxException {
37
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020038 var user = getCurrentUser();
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010039
40 var message = new LazychatMessage();
41 message.content = text;
42 message.format = "markdown";
43 message.owner = user;
44 message.date = OffsetDateTime.now();
45
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020046 assignPostTargets(visibility, user, message);
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010047
48 message.persistAndFlush();
49
50 return Response.seeOther(new URI("/lazychat")).build();
51 }
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020052
53 @POST
54 @Transactional
55 @Authenticated
56 @Path("/p/{id}/edit")
57 public Response patchMessage(
58 @PathParam("id") int id,
59 @FormParam("text") String text,
60 @FormParam("visibility") Post.Visibility visibility)
61 throws URISyntaxException {
62
63 var user = getCurrentUser();
64
65 var message = getSession().byId(LazychatMessage.class).load(id);
66
67 if (message == null) {
68 throw new NotFoundException();
69 }
70
71 if (!Objects.equals(message.owner.id, user.id)) {
72 throw new ForbiddenException();
73 }
74
75 message.content = text;
76 message.format = "markdown";
77
78 assignPostTargets(visibility, user, message);
79
80 return Response.seeOther(new URI("/lazychat")).build();
81 }
82
83 @GET
84 @Transactional
85 @Produces(APPLICATION_JSON)
86 @Path("/p/{id}")
87 public LazychatMessage getMessage(@PathParam("id") int id) {
88
89 var user = getCurrentUser();
90
91 var message = getSession().byId(LazychatMessage.class).load(id);
92
93 if (!user.canSee(message)) {
94 throw new ForbiddenException();
95 }
96
97 return message;
98 }
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010099}