62 lines
2.1 KiB
JavaScript
62 lines
2.1 KiB
JavaScript
const SERVER = "192.168.1.199:3435";
|
|
|
|
async function register() {
|
|
const name = document.getElementById("name").value;
|
|
if (!name) return;
|
|
const keys = await openpgp.generateKey({
|
|
userIDs: [{ name }],
|
|
});
|
|
const priv = await openpgp.readKey({ armoredKey: keys.privateKey });
|
|
const pub = await openpgp.readKey({ armoredKey: keys.publicKey });
|
|
window.keys = { priv, pub };
|
|
localStorage.setItem("keys", JSON.stringify(keys));
|
|
localStorage.setItem("name", name);
|
|
window.name = name;
|
|
window.socket.emit("create_user", { name, pubkey: keys.publicKey });
|
|
}
|
|
|
|
async function message(e) {
|
|
e.preventDefault();
|
|
const msg = document.getElementById("msg").value;
|
|
if (!msg) return;
|
|
const sig = await openpgp.sign({
|
|
message: new openpgp.CleartextMessage(msg, ""),
|
|
signingKeys: window.keys.priv,
|
|
});
|
|
window.socket.emit("send_message", { name: window.name, message: sig });
|
|
document.getElementById("msg").value = "";
|
|
const el = document.createElement("div");
|
|
el.classList.add("message");
|
|
el.innerHTML = `<strong>${window.name}: </strong>${msg}`;
|
|
document.getElementById("messages").appendChild(el);
|
|
}
|
|
|
|
function swap() {
|
|
document.getElementById("register").classList.add("hidden");
|
|
document.getElementById("chat").classList.remove("hidden");
|
|
}
|
|
|
|
async function loadKeys(keys) {
|
|
const priv = await openpgp.readKey({ armoredKey: keys.privateKey });
|
|
const pub = await openpgp.readKey({ armoredKey: keys.publicKey });
|
|
window.keys = { priv, pub };
|
|
}
|
|
|
|
window.onload = () => {
|
|
window.socket = io(SERVER);
|
|
window.socket.on("create_user", swap);
|
|
window.socket.on("new_message", (msg) => {
|
|
const el = document.createElement("div");
|
|
el.classList.add("message");
|
|
el.innerHTML = `<strong>${msg.name}: </strong>${msg.message}`;
|
|
document.getElementById("messages").appendChild(el);
|
|
});
|
|
const keys = localStorage.getItem("keys");
|
|
if (keys) {
|
|
window.name = localStorage.getItem("name");
|
|
loadKeys(JSON.parse(keys)).then(swap);
|
|
}
|
|
document.getElementById("submit").onclick = register;
|
|
document.getElementById("msginput").onsubmit = message;
|
|
};
|