blob: 8a4d2a3765dd1610af7c9fa7e42c715b63dc4ebc [file] [log] [blame]
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +01001package eu.mulk.mulkcms2.benki.lazychat;
2
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +01003import eu.mulk.mulkcms2.benki.accesscontrol.Role;
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +02004import eu.mulk.mulkcms2.benki.posts.PostFilter;
5import eu.mulk.mulkcms2.benki.posts.PostResource;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +01006import eu.mulk.mulkcms2.benki.users.User;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +01007import io.quarkus.security.Authenticated;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +01008import java.net.URI;
9import java.net.URISyntaxException;
10import java.time.OffsetDateTime;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010011import java.util.Set;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010012import javax.transaction.Transactional;
13import javax.validation.constraints.NotNull;
14import javax.validation.constraints.Pattern;
15import javax.ws.rs.BadRequestException;
16import javax.ws.rs.FormParam;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010017import javax.ws.rs.POST;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010018import javax.ws.rs.Path;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010019import javax.ws.rs.core.Response;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010020
21@Path("/lazychat")
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020022public class LazychatResource extends PostResource {
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010023
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020024 public LazychatResource() {
25 super(PostFilter.LAZYCHAT_MESSAGES_ONLY, "Lazy Chat");
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010026 }
27
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010028 @POST
29 @Transactional
30 @Authenticated
31 public Response postMessage(
32 @FormParam("text") String text,
33 @FormParam("visibility") @NotNull @Pattern(regexp = "public|semiprivate|private")
34 String visibility)
35 throws URISyntaxException {
36
37 var userName = identity.getPrincipal().getName();
38 var user = User.findByNickname(userName);
39
40 var message = new LazychatMessage();
41 message.content = text;
42 message.format = "markdown";
43 message.owner = user;
44 message.date = OffsetDateTime.now();
45
46 if (visibility.equals("public")) {
47 Role world = Role.find("from Role r join r.tags tag where tag = 'world'").singleResult();
48 message.targets = Set.of(world);
49 } else if (visibility.equals("semiprivate")) {
50 message.targets = Set.copyOf(user.defaultTargets);
51 } else if (!visibility.equals("private")) {
52 throw new BadRequestException(String.format("invalid visibility ā€œ%sā€", visibility));
53 }
54
55 message.persistAndFlush();
56
57 return Response.seeOther(new URI("/lazychat")).build();
58 }
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010059}