import { render, html } from '/uhtml.js'; function rand() { let str = ''; const lookups = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.split(''); while (str.length < 16) { const n = Math.random() * lookups.length; str += lookups[Math.floor(n)]; } return str; } async function auth() { const sig = await openpgp.sign({ message: new openpgp.CleartextMessage('vybe_auth ' + window.session, ''), signingKeys: window.keys.priv }); window.socket.emit( 'authenticate', { name: window.name, message: sig }, msg => { let register = document.getElementById('register'); if (!msg.success) { console.log('authenticate failed', msg); register.classList.remove('hidden'); return; } if (register) { register.remove(); import('/app.js'); } } ); } render(document.body, html` `); async function gensession() { window.session = rand(); window.emit = (type, data, callback) => window.socket.emit( type, { ...data, __session: window.session, }, callback ); } window.onload = async () => { window.socket = io(); await gensession(); let keys = localStorage.getItem('keys'); if (keys) { window.name = localStorage.getItem('name'); keys = JSON.parse(keys); window.keys = { priv: await openpgp.readKey({ armoredKey: keys.privateKey }), pub: await openpgp.readKey({ armoredKey: keys.publicKey }) }; await auth(); } else document.getElementById('register').classList.remove('hidden'); window.socket.io.on('reconnect', async attempt => { await gensession(); if (localStorage.getItem('keys')) await auth(); }); };