25 lines
1.3 KiB
HTML
25 lines
1.3 KiB
HTML
<!doctype html>
|
|
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Admin Login — Newbury Exhibit</title></head>
|
|
<body>
|
|
<div style="max-width:340px;margin:18vh auto;text-align:center">
|
|
<h1 style="font-size:1.3rem">Exhibit Admin</h1>
|
|
<input id="pw" type="password" placeholder="Admin password" style="width:100%;padding:10px;margin:12px 0;font-size:1rem">
|
|
<button id="go" class="primary" style="width:100%;padding:10px;font-size:1rem">Sign in</button>
|
|
<div id="err" style="color:#ff8b8b;margin-top:10px;font-size:.85rem"></div>
|
|
</div>
|
|
<script type="module">
|
|
import { styles } from './admin.js';
|
|
document.head.insertAdjacentHTML('beforeend', `<style>${styles}</style>`);
|
|
const go = async () => {
|
|
const res = await fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ password: document.getElementById('pw').value }) });
|
|
if (!res.ok) { document.getElementById('err').textContent = 'Wrong password.'; return; }
|
|
localStorage.setItem('exhibitToken', (await res.json()).token);
|
|
location.href = new URLSearchParams(location.search).get('next') || '/admin/layout.html';
|
|
};
|
|
document.getElementById('go').onclick = go;
|
|
document.getElementById('pw').onkeydown = (e) => e.key === 'Enter' && go();
|
|
</script>
|
|
</body></html>
|