blob: 270a3d02ad7ce6905c56c68faba36ee449959bfe [file] [log] [blame]
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +01001package eu.mulk.mulkcms2.benki.lazychat;
2
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +02003import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
4import static javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
5import static javax.ws.rs.core.MediaType.WILDCARD;
6
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +02007import eu.mulk.mulkcms2.benki.posts.Post;
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +02008import eu.mulk.mulkcms2.benki.posts.PostFilter;
9import eu.mulk.mulkcms2.benki.posts.PostResource;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010010import io.quarkus.security.Authenticated;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010011import java.net.URI;
12import java.net.URISyntaxException;
Matthias Andreas Benkardcf0fe882020-04-19 18:33:37 +020013import java.security.NoSuchAlgorithmException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010014import java.time.OffsetDateTime;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020015import java.util.Objects;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010016import javax.transaction.Transactional;
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020017import javax.validation.constraints.NotNull;
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020018import javax.ws.rs.Consumes;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020019import javax.ws.rs.ForbiddenException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010020import javax.ws.rs.FormParam;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020021import javax.ws.rs.NotFoundException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010022import javax.ws.rs.POST;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010023import javax.ws.rs.Path;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020024import javax.ws.rs.PathParam;
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020025import javax.ws.rs.Produces;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010026import javax.ws.rs.core.Response;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010027
28@Path("/lazychat")
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020029public class LazychatResource extends PostResource {
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010030
Matthias Andreas Benkardcf0fe882020-04-19 18:33:37 +020031 public LazychatResource() throws NoSuchAlgorithmException {
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020032 super(PostFilter.LAZYCHAT_MESSAGES_ONLY, "Lazy Chat");
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010033 }
34
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010035 @POST
36 @Transactional
37 @Authenticated
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020038 @Produces(WILDCARD)
39 @Consumes({APPLICATION_FORM_URLENCODED, MULTIPART_FORM_DATA})
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010040 public Response postMessage(
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020041 @FormParam("text") @NotNull String text,
42 @FormParam("visibility") @NotNull Post.Visibility visibility)
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010043 throws URISyntaxException {
44
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020045 var user = Objects.requireNonNull(getCurrentUser());
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010046
47 var message = new LazychatMessage();
Matthias Andreas Benkardd5498fc2020-08-23 21:51:00 +020048 message.setContent(text);
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010049 message.owner = user;
50 message.date = OffsetDateTime.now();
51
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020052 assignPostTargets(visibility, user, message);
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010053
54 message.persistAndFlush();
55
56 return Response.seeOther(new URI("/lazychat")).build();
57 }
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020058
59 @POST
60 @Transactional
61 @Authenticated
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020062 @Produces(WILDCARD)
63 @Consumes({APPLICATION_FORM_URLENCODED, MULTIPART_FORM_DATA})
Matthias Andreas Benkardb6081272020-04-18 15:48:04 +020064 @Path("{id}/edit")
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020065 public Response patchMessage(
66 @PathParam("id") int id,
67 @FormParam("text") String text,
68 @FormParam("visibility") Post.Visibility visibility)
69 throws URISyntaxException {
70
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020071 var user = Objects.requireNonNull(getCurrentUser());
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020072
73 var message = getSession().byId(LazychatMessage.class).load(id);
74
75 if (message == null) {
76 throw new NotFoundException();
77 }
78
Matthias Andreas Benkardcf0fe882020-04-19 18:33:37 +020079 if (message.owner == null || !Objects.equals(message.owner.id, user.id)) {
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020080 throw new ForbiddenException();
81 }
82
Matthias Andreas Benkardd5498fc2020-08-23 21:51:00 +020083 message.setContent(text);
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020084
85 assignPostTargets(visibility, user, message);
86
87 return Response.seeOther(new URI("/lazychat")).build();
88 }
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010089}