feat(auth): wiki/activity access flags, SESSION_DOMAIN, wiki nav link
This commit is contained in:
@@ -9,7 +9,8 @@ interface Props {
|
||||
public?: boolean;
|
||||
}
|
||||
const { title = 'BincioActivity', description = 'Your personal activity stats', public: isPublicPage = false } = Astro.props;
|
||||
const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? '';
|
||||
const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? '';
|
||||
const wikiUrl = import.meta.env.PUBLIC_WIKI_URL ?? '';
|
||||
// Edit UI is enabled when PUBLIC_EDIT_URL is set (single-user bincio-edit mode)
|
||||
// OR when PUBLIC_EDIT_ENABLED=true (multi-user VPS mode — API proxied at /api/).
|
||||
const editEnabled = editUrl !== '' || import.meta.env.PUBLIC_EDIT_ENABLED === 'true';
|
||||
@@ -217,6 +218,10 @@ try {
|
||||
<a href={`${baseUrl}convert/`} class="text-sm text-zinc-400 hover:text-white transition-colors shrink-0">Convert</a>
|
||||
)}
|
||||
<a id="nav-about" href={`${baseUrl}about/`} class="text-sm text-zinc-400 hover:text-white transition-colors shrink-0">About</a>
|
||||
{wikiUrl && (
|
||||
<a id="nav-wiki" href={wikiUrl} style="display:none"
|
||||
class="text-sm text-zinc-400 hover:text-white transition-colors shrink-0">Wiki</a>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -561,6 +566,12 @@ try {
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
// Wiki link: show only for users who have wiki access
|
||||
if (user.wiki_access) {
|
||||
const wikiEl = document.getElementById('nav-wiki');
|
||||
if (wikiEl) wikiEl.style.display = '';
|
||||
}
|
||||
|
||||
// Admin: show admin link and poll for active jobs
|
||||
if (user.is_admin) {
|
||||
const adminLink = document.getElementById('nav-admin');
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
---
|
||||
import Base from '../../layouts/Base.astro';
|
||||
const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? '';
|
||||
const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? '';
|
||||
const wikiUrl = import.meta.env.PUBLIC_WIKI_URL ?? '';
|
||||
---
|
||||
<Base title="Login — BincioActivity" public={true}>
|
||||
<div class="max-w-sm mx-auto mt-16 px-4">
|
||||
@@ -9,7 +10,7 @@ const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? '';
|
||||
</p>
|
||||
<h1 class="text-2xl font-bold text-white mb-6 text-center">Sign in</h1>
|
||||
|
||||
<form id="login-form" class="space-y-4">
|
||||
<form id="login-form" data-wiki-url={wikiUrl} class="space-y-4">
|
||||
<div>
|
||||
<label class="block text-sm text-zinc-400 mb-1" for="handle">Handle</label>
|
||||
<input id="handle" name="handle" type="text" autocomplete="username"
|
||||
@@ -41,14 +42,14 @@ const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? '';
|
||||
</Base>
|
||||
|
||||
<script>
|
||||
const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? (document.getElementById('login-form')?.dataset.editUrl ?? '');
|
||||
const form = document.getElementById('login-form') as HTMLFormElement;
|
||||
const errEl = document.getElementById('login-error') as HTMLElement;
|
||||
const wikiUrl = form?.dataset.wikiUrl ?? '';
|
||||
|
||||
document.getElementById('login-form')?.addEventListener('submit', async (e) => {
|
||||
form?.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
const form = e.target as HTMLFormElement;
|
||||
const handle = (form.querySelector('#handle') as HTMLInputElement).value.trim();
|
||||
const handle = (form.querySelector('#handle') as HTMLInputElement).value.trim();
|
||||
const password = (form.querySelector('#password') as HTMLInputElement).value;
|
||||
const errEl = document.getElementById('login-error')!;
|
||||
errEl.classList.add('hidden');
|
||||
|
||||
try {
|
||||
@@ -64,6 +65,12 @@ const editUrl = import.meta.env.PUBLIC_EDIT_URL ?? '';
|
||||
errEl.classList.remove('hidden');
|
||||
return;
|
||||
}
|
||||
const data = await r.json();
|
||||
// Wiki-only users have no activity access — send them straight to the wiki.
|
||||
if (!data.activity_access && data.wiki_access && wikiUrl) {
|
||||
window.location.href = wikiUrl;
|
||||
return;
|
||||
}
|
||||
const next = new URLSearchParams(window.location.search).get('next') ?? '/';
|
||||
window.location.href = next;
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user