summaryrefslogtreecommitdiff
path: root/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java')
-rw-r--r--src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java63
1 files changed, 60 insertions, 3 deletions
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
index 0bf69d6..8f25254 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
@@ -2,25 +2,82 @@ package eu.mulk.mulkcms2.benki.wiki;
import static javax.ws.rs.core.MediaType.TEXT_HTML;
+import io.quarkus.panache.common.Sort;
import io.quarkus.qute.Template;
import io.quarkus.qute.TemplateInstance;
import io.quarkus.qute.api.ResourcePath;
+import io.quarkus.security.Authenticated;
+import io.quarkus.security.identity.SecurityIdentity;
+import io.smallrye.jwt.auth.principal.JWTCallerPrincipal;
+import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
+import java.util.Map;
+import java.util.Optional;
import javax.inject.Inject;
import javax.ws.rs.GET;
+import javax.ws.rs.NotFoundException;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
+import org.jboss.logging.Logger;
+import org.jboss.resteasy.spi.NotImplementedYetException;
@Path("/wiki")
public class WikiResource {
+ private static Logger log = Logger.getLogger(WikiResource.class);
+
+ private static DateTimeFormatter htmlDateFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
+
+ private static DateTimeFormatter humanDateFormatter =
+ DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT);
+
@ResourcePath("benki/wiki/wikiPage.html")
- @Inject Template wikiPage;
+ @Inject
+ Template wikiPage;
+
+ @Inject SecurityIdentity identity;
@GET
- @Path("/pages/{pageName}")
+ @Path("/{pageName}")
@Produces(TEXT_HTML)
public TemplateInstance getPage(@PathParam("pageName") String pageName) {
- return wikiPage.data("title", "TEST");
+ Optional<WikiPageRevision> maybePage =
+ WikiPageRevision.find("title = ?1", Sort.by("date").descending(), pageName)
+ .firstResultOptional();
+ if (maybePage.isEmpty()) {
+ throw new NotFoundException();
+ }
+ var page = maybePage.get();
+ return wikiPage
+ .data("title", page.title)
+ .data(
+ "date",
+ Map.of(
+ "htmlFormat", htmlDateFormatter.format(page.date),
+ "humanFormat", humanDateFormatter.format(page.date)))
+ .data(
+ "author",
+ Map.of("name", String.format("%s %s", page.author.firstName, page.author.lastName)))
+ .data("content", page.content);
+ }
+
+ @POST
+ @Path("/{pageName}")
+ @Authenticated
+ public void updatePage(@PathParam("pageName") String pageName) {
+ if (!identity.isAnonymous()) {
+ var jwtCallerPrincipal = (JWTCallerPrincipal) identity.getPrincipal();
+ log.infof("Logged in as user: %s", jwtCallerPrincipal.getName());
+ }
+ throw new NotImplementedYetException();
+ }
+
+ @GET
+ @Path("/{pageName}/revisions")
+ @Produces(TEXT_HTML)
+ public TemplateInstance getPageRevisions(@PathParam("pageName") String pageName) {
+ throw new NotImplementedYetException();
}
}