diff --git a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java index 54948d0..6e599e7 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java @@ -101,6 +101,7 @@ public class Constants { public static final String FULLTEXT = "fulltext"; public static final String GET = "GET"; + public static final String GUEST_ALLOWED = "guest_allowed"; public static final String HASH = "hash"; diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Member.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Member.java index f04624d..a7becc8 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Member.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Member.java @@ -5,12 +5,17 @@ package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; import de.srsoftware.tools.Mappable; + +import java.util.HashMap; import java.util.Map; public record Member(UmbrellaUser user, Permission permission) implements Mappable { @Override public Map toMap() { - return Map.of(USER,user.toMap(),PERMISSION,permission.toMap()); + var map = new HashMap(); + map.put(USER,user == null ? null : user.toMap()); + map.put(PERMISSION,permission.toMap()); + return map; } public boolean mayWrite() { diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java b/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java index 07ec6e8..61d9b91 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java @@ -22,6 +22,7 @@ public class WikiPage implements Mappable { private final Map members = new HashMap<>(); private String content; private Set dirtyFields = new HashSet<>(); + private boolean guestAllowed = false; public WikiPage(long id, String title, int version, String content) { this.id = id; @@ -46,6 +47,15 @@ public class WikiPage implements Mappable { return Set.copyOf(dirtyFields); } + public boolean guestAllowed() { + return guestAllowed; + } + + public void guestAllowed(boolean guestAllowed) { + this.guestAllowed = guestAllowed; + dirtyFields.add(GUEST_ALLOWED); + } + public long id(){ return id; } @@ -72,6 +82,10 @@ public class WikiPage implements Mappable { if (!(val instanceof String s)) throw invalidFieldException(CONTENT,"String"); content(s); break; + case GUEST_ALLOWED: + if (!(val instanceof Boolean b)) throw invalidFieldException(GUEST_ALLOWED,"Boolean"); + guestAllowed(b); + break; case MEMBERS: if (!(val instanceof JSONObject membersJson)) throw invalidFieldException(MEMBERS,"Json"); for (var uid : membersJson.keySet()){ @@ -131,6 +145,7 @@ public class WikiPage implements Mappable { return Map.of( ID,id, CONTENT,Map.of(SOURCE,content,RENDERED,markdown(content)), + GUEST_ALLOWED,guestAllowed, MEMBERS,memberMap, TITLE,title, VERSION,version, diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 1f8df07..3406257 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -35,6 +35,7 @@ import ViewTask from "./routes/task/View.svelte"; import WikiIndex from "./routes/wiki/Index.svelte"; import WikiPage from "./routes/wiki/View.svelte" + import WikiGuest from "./routes/wiki/GuestView.svelte" let translations_ready = $state(false); @@ -100,11 +101,12 @@ {:else} - - - - - + + + + + + {/if}