blob: cb4c20fcef67e887c706732a0332d2f44d784c52 [file] [log] [blame]
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +01001package eu.mulk.mulkcms2.benki.bookmarks;
2
Matthias Andreas Benkard35e14e42020-02-12 06:20:05 +01003import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +01004import static javax.ws.rs.core.MediaType.TEXT_HTML;
5
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +02006import eu.mulk.mulkcms2.benki.posts.Post;
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +02007import eu.mulk.mulkcms2.benki.posts.PostFilter;
8import eu.mulk.mulkcms2.benki.posts.PostResource;
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +01009import io.quarkus.qute.Template;
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010010import io.quarkus.qute.TemplateInstance;
11import io.quarkus.qute.api.ResourcePath;
Matthias Andreas Benkardf20e9b92020-02-10 21:14:57 +010012import io.quarkus.security.Authenticated;
Matthias Andreas Benkard35e14e42020-02-12 06:20:05 +010013import java.io.IOException;
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010014import java.net.URI;
15import java.net.URISyntaxException;
16import java.time.OffsetDateTime;
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010017import java.util.Set;
Matthias Andreas Benkardfc427e22020-02-13 05:00:54 +010018import javax.annotation.CheckForNull;
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010019import javax.inject.Inject;
Matthias Andreas Benkard35e14e42020-02-12 06:20:05 +010020import javax.json.JsonObject;
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010021import javax.transaction.Transactional;
22import javax.validation.constraints.NotEmpty;
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010023import javax.ws.rs.FormParam;
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010024import javax.ws.rs.GET;
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010025import javax.ws.rs.POST;
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010026import javax.ws.rs.Path;
27import javax.ws.rs.Produces;
Matthias Andreas Benkard35e14e42020-02-12 06:20:05 +010028import javax.ws.rs.QueryParam;
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010029import javax.ws.rs.core.Response;
Matthias Andreas Benkard35e14e42020-02-12 06:20:05 +010030import org.jsoup.Jsoup;
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010031
32@Path("/bookmarks")
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020033public class BookmarkResource extends PostResource {
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010034
Matthias Andreas Benkardfc427e22020-02-13 05:00:54 +010035 @ResourcePath("benki/bookmarks/newBookmark.html")
36 @Inject
37 Template newBookmark;
38
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020039 public BookmarkResource() {
40 super(PostFilter.BOOKMARKS_ONLY, "Bookmarks");
Matthias Andreas Benkardfc427e22020-02-13 05:00:54 +010041 }
42
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010043 @POST
44 @Transactional
Matthias Andreas Benkardf20e9b92020-02-10 21:14:57 +010045 @Authenticated
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010046 public Response postBookmark(
47 @FormParam("uri") URI uri,
48 @FormParam("title") @NotEmpty String title,
49 @FormParam("description") String description,
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020050 @FormParam("visibility") Post.Visibility visibility)
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010051 throws URISyntaxException {
52
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020053 var user = getCurrentUser();
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010054
55 var bookmark = new Bookmark();
56 bookmark.uri = uri.toString();
57 bookmark.title = title;
58 bookmark.tags = Set.of();
59 bookmark.description = description != null ? description : "";
60 bookmark.owner = user;
61 bookmark.date = OffsetDateTime.now();
62
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020063 assignPostTargets(visibility, user, bookmark);
Matthias Andreas Benkardbca94612020-02-10 20:58:13 +010064
65 bookmark.persistAndFlush();
66
67 return Response.seeOther(new URI("/bookmarks")).build();
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010068 }
69
Matthias Andreas Benkard35e14e42020-02-12 06:20:05 +010070 @GET
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020071 @Authenticated
72 @Path("new")
73 @Produces(TEXT_HTML)
74 public TemplateInstance getNewBookmarkForm(
75 @QueryParam("uri") @CheckForNull String uri,
76 @QueryParam("title") @CheckForNull String title,
77 @QueryParam("description") @CheckForNull String description) {
78 return newBookmark.data("uri", uri).data("title", title).data("description", description);
79 }
80
81 @GET
Matthias Andreas Benkard35e14e42020-02-12 06:20:05 +010082 @Path("page-info")
83 @Authenticated
84 @Produces(APPLICATION_JSON)
85 public JsonObject getPageInfo(@QueryParam("uri") URI uri) throws IOException {
86 var document = Jsoup.connect(uri.toString()).get();
87 return jsonProvider.createObjectBuilder().add("title", document.title()).build();
88 }
Matthias Andreas Benkard2d4f92e2020-02-09 16:15:07 +010089}