const loginCSS = `
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #222;
color: #ddd;
font-family: monospace;
z-index: 100;
`;
const loginHTML = `
`;
function forceLogin() {
const form = document.createElement('form');
form.method = 'POST';
form.action = `${location.href}login`;
form.id = 'loginForm';
form.style.cssText = loginCSS;
form.innerHTML = loginHTML;
document.body.appendChild(form);
const username = form.querySelector('#loginUsername');
const password = form.querySelector('#loginPassword');
const status = form.querySelector('#loginStatus');
form.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(form);
formData.append('username', username.value);
formData.append('password', password.value);
console.warn('login', location.href, formData);
fetch(`${location.href}login`, {
method: 'POST',
body: formData,
})
.then(async (res) => {
const json = await res.json();
let txt = '';
if (res.status === 200) txt = 'login verified';
else txt = `${res.status}: ${res.statusText} - ${json.detail}`;
status.textContent = txt;
console.log('login', txt);
if (res.status === 200) location.reload();
})
.catch((err) => {
status.textContent = err;
console.error('login', err);
});
});
}
function loginCheck() {
fetch(`${location.href}login_check`, {})
.then((res) => {
if (res.status === 200) console.log('login ok');
else forceLogin();
})
.catch((err) => {
console.error('login', err);
});
}
window.onload = loginCheck;