all repos — blog @ 8d3f3ea102f855e39fb4891b48a540d211c2a971

Code and content for 5ika.ch

assets/js/e2e_contact.js (view raw)

 1const formButton = document.querySelector("#contact-form > button");
 2
 3formButton.onclick = async (event) => {
 4  event.preventDefault();
 5
 6  // Load OpenPGP Module dynamically
 7  const openpgp = await import("/js/openpgp.min.mjs");
 8
 9  // Retrieve public key
10  const publicKeyArmored = await fetch("/tim@5ika.ch.pub").then((res) =>
11    res.text()
12  );
13  const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
14
15  // Prepare payload
16  const author = document.getElementById("msg-author")?.value || "";
17  const content = document.getElementById("msg-content")?.value || "";
18  const datetime = new Date().toISOString();
19  const payload = { author, content, datetime };
20
21  // Encrypt message
22  const encrypted = await openpgp.encrypt({
23    message: await openpgp.createMessage({
24      text: JSON.stringify(payload),
25    }),
26    encryptionKeys: publicKey,
27  });
28
29  // Show cipher in page
30  const resultElement = document.getElementById("msg-encrypted");
31  resultElement.innerHTML = '';
32  const pElement = document.createElement("p");
33  pElement.innerText =
34    "Voici le message chiffré. Vous pouvez me l'envoyer par n'importe quel moyen, je serais le seul à pouvoir le lire.";
35  resultElement.appendChild(pElement);
36  const preElement = document.createElement("pre");
37  preElement.innerText = encrypted;
38  resultElement.appendChild(preElement);
39};