Browse Source

implemented page view for freely available wiki pages

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
module/wiki
Stephan Richter 2 months ago
parent
commit
60d116664b
  1. 3
      frontend/src/App.svelte
  2. 51
      frontend/src/routes/wiki/GuestView.svelte
  3. 12
      wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiModule.java

3
frontend/src/App.svelte

@ -35,6 +35,7 @@
import ViewTask from "./routes/task/View.svelte"; import ViewTask from "./routes/task/View.svelte";
import WikiIndex from "./routes/wiki/Index.svelte"; import WikiIndex from "./routes/wiki/Index.svelte";
import WikiPage from "./routes/wiki/View.svelte" import WikiPage from "./routes/wiki/View.svelte"
import WikiGuest from "./routes/wiki/GuestView.svelte"
let translations_ready = $state(false); let translations_ready = $state(false);
@ -102,7 +103,7 @@
<Router> <Router>
<Route path="/user/reset/pw" component={ResetPw} /> <Route path="/user/reset/pw" component={ResetPw} />
<Route path="/oidc_callback" component={Callback} /> <Route path="/oidc_callback" component={Callback} />
<Route path="/wiki/:key/view" component={WikiPage} /> <Route path="/wiki/:key/view" component={WikiGuest} />
<Route> <Route>
<Login /> <Login />
</Route> </Route>

51
frontend/src/routes/wiki/GuestView.svelte

@ -0,0 +1,51 @@
<script>
import { onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router';
import { api } from '../../urls.svelte';
import { t } from '../../translations.svelte';
let { key } = $props();
let error = $state(null);
let page = $state(null);
let router = useTinyRouter();
async function loadContent(res){
if (res.ok){
page = null;
page = await res.json();
error = null;
return true;
} else {
error = await res.text();
return false;
}
}
async function loadPage(){
const url = api(`wiki/page/${key}`);
const res = await fetch(url,{credentials:'include'});
loadContent(res);
}
function onclick(e){
e.preventDefault();
let href = e.target.getAttribute('href');
if (href) router.navigate(href);
return false;
}
$effect(loadPage);
</script>
{#if error}
<span class="error">{error}</span>
{/if}
{#if page}
<div class="wiki page">
<h2>{page.title}</h2>
<div class="markdown">
{@html page.content.rendered}
</div>
</div>
{/if}

12
wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiModule.java

@ -70,11 +70,16 @@ public class WikiModule extends BaseHandler implements WikiService {
try { try {
Optional<Token> token = SessionToken.from(ex).map(Token::of); Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = userService().loadUser(token); var user = userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop(); var head = path.pop();
if (user.isEmpty()) {
return switch (head){
case PAGE -> getPage(path, null, ex);
case null, default -> unauthorized(ex);
};
}
return switch (head) { return switch (head) {
case null -> getUserPages(user.get(),ex); case null -> getUserPages(user.get(),ex);
case AVAILABLE -> getAvailability(path,ex); case AVAILABLE -> getAvailability(path,ex);
case PAGE -> getPage(path, user.get(), ex); case PAGE -> getPage(path, user.get(), ex);
default -> super.doGet(path,ex); default -> super.doGet(path,ex);
}; };
@ -143,7 +148,8 @@ public class WikiModule extends BaseHandler implements WikiService {
} }
} }
var page = loadPage(id,version); var page = loadPage(id,version);
var permission = page.members().get(user.id()); var userId = user == null ? 0 : user.id();
var permission = page.members().get(userId);
if (permission == null) throw forbidden("You are not allowed to access \"{0}\"!",id); if (permission == null) throw forbidden("You are not allowed to access \"{0}\"!",id);
return sendContent(ex, page); return sendContent(ex, page);
} }

Loading…
Cancel
Save