Matthias Andreas Benkard | 94b5e7b | 2020-02-09 20:02:20 +0100 | [diff] [blame] | 1 | package eu.mulk.mulkcms2.benki.lazychat; |
| 2 | |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 3 | import eu.mulk.mulkcms2.benki.accesscontrol.Role; |
Matthias Andreas Benkard | 4940b29 | 2020-03-29 18:41:07 +0200 | [diff] [blame^] | 4 | import eu.mulk.mulkcms2.benki.posts.PostFilter; |
| 5 | import eu.mulk.mulkcms2.benki.posts.PostResource; |
Matthias Andreas Benkard | 94b5e7b | 2020-02-09 20:02:20 +0100 | [diff] [blame] | 6 | import eu.mulk.mulkcms2.benki.users.User; |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 7 | import io.quarkus.security.Authenticated; |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 8 | import java.net.URI; |
| 9 | import java.net.URISyntaxException; |
| 10 | import java.time.OffsetDateTime; |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 11 | import java.util.Set; |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 12 | import javax.transaction.Transactional; |
| 13 | import javax.validation.constraints.NotNull; |
| 14 | import javax.validation.constraints.Pattern; |
| 15 | import javax.ws.rs.BadRequestException; |
| 16 | import javax.ws.rs.FormParam; |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 17 | import javax.ws.rs.POST; |
Matthias Andreas Benkard | 94b5e7b | 2020-02-09 20:02:20 +0100 | [diff] [blame] | 18 | import javax.ws.rs.Path; |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 19 | import javax.ws.rs.core.Response; |
Matthias Andreas Benkard | 94b5e7b | 2020-02-09 20:02:20 +0100 | [diff] [blame] | 20 | |
| 21 | @Path("/lazychat") |
Matthias Andreas Benkard | 4940b29 | 2020-03-29 18:41:07 +0200 | [diff] [blame^] | 22 | public class LazychatResource extends PostResource { |
Matthias Andreas Benkard | 94b5e7b | 2020-02-09 20:02:20 +0100 | [diff] [blame] | 23 | |
Matthias Andreas Benkard | 4940b29 | 2020-03-29 18:41:07 +0200 | [diff] [blame^] | 24 | public LazychatResource() { |
| 25 | super(PostFilter.LAZYCHAT_MESSAGES_ONLY, "Lazy Chat"); |
Matthias Andreas Benkard | 94b5e7b | 2020-02-09 20:02:20 +0100 | [diff] [blame] | 26 | } |
| 27 | |
Matthias Andreas Benkard | 12c7cac | 2020-03-26 07:19:45 +0100 | [diff] [blame] | 28 | @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 Benkard | 94b5e7b | 2020-02-09 20:02:20 +0100 | [diff] [blame] | 59 | } |