log: (msg)=>{
const element = document.createElement('DIV');
element.textContent += msg + '\n';
- const messages = document.getElementById('messages')
messages.appendChild(element);
messages.scrollTop = messages.scrollHeight;
},
send: ()=>{
if (message.value.length > 0) {
- Client.log("me: " + message.value);
- state.conn.send(message.value);
- message.value = "";
+ const key = state.keys[contact.value];
+ if (key) {
+ Client.log("me: " + message.value);
+ const msg = key.encrypt(message.value);
+ state.conn.send(msg);
+ message.value = "";
+ }
}
},
keysValid: ()=> state.keys.private.decrypt(state.keys.public.encrypt("test")),
- getFile: (file) => fetch(file).then((resp) => resp.text()),
+ getFile: (file) => fetch(file).then((resp)=>{
+ if (!resp.ok) { throw "failed to fetch key" };
+ return resp.text();
+ }),
- addContact: (name)=>{
- Client.getFile('./keys/' + name)
- .then((key) => state.keys[name] = Client.loadKey(name, key));
+ addContact: (name, cbfn = ()=>{})=>{
+ Client.getFile('./keys/' + name).then((key)=>{
+ state.keys[name] = Client.loadKey(name, key);
+ cbfn();
+ });
},
getMessage: (id)=>{
Client.getFile('./msgs/' + id).then((msg)=>{
- Client.log('them(raw): ' + msg);
const text = state.keys.private.decrypt(msg);
- if (text) { Client.log(text); }
+ if (text) { Client.log("them: " + text); }
});
},
})
}
+addContact.onclick = ()=>{
+ const name = prompt("Enter name:", "");
+ Client.addContact(name, ()=>{
+ const el = document.createElement('OPTION');
+ el.value = name;
+ el.textContent = name;
+ contact.appendChild(el);
+ });
+}
+
// Try connecting based on local storage
(()=>{
Client.init();
--- /dev/null
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCT2vBK6ZLKgnvBW+4giIu52iJS
+472VCjr7Ju9szKSVhvqUc8M72obrjINjZGkCts1QkvZjvczHF8jbMNq6dgk6YO3+
+mJAMDoGT3UhhjHBS4t3p715IEIaF0rfd0L0XPOJnd77ecUSHsnKXyFcDTnWNiWlZ
+4hg1K15W++TaEpC25wIDAQAB
+-----END PUBLIC KEY-----
--- /dev/null
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7MFroGw6N+zRy+7k3Bl9UiNWh
+t0hkJL35l4DpDY8gLTxQ0ekZe3EVytZBgAC/HT3S9N/v4w565cVsCH1OuRhtp0v9
+L/pOOdevZ+CiNwn+7TQEwXBBC5FZGDwEp1cxvNADjoJV1E5KJXNMpH3+8KD/0Eu0
+xNmBML0R/MbLJ3T0dwIDAQAB
+-----END PUBLIC KEY-----