mnml/client/index.js
2018-09-15 14:11:23 +10:00

51 lines
1.3 KiB
JavaScript
Executable File

const cbor = require('borc');
const assert = require('assert');
// Create WebSocket connection.
const ws = new WebSocket('ws://localhost:40000');
ws.binaryType = 'arraybuffer';
// handle user auth within the socket itself
// https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html
let user = null;
function user_login(res) {
user = res;
console.log(user);
return true;
}
function new_cryp(cryp) {
console.log('got a new cryp');
}
const handlers = {
'cryp_generate': new_cryp,
'user_login': user_login,
'user_create': user_login,
};
function receive(res) {
if (res.err) return console.error(res.err);
const { method, params } = res;
return handlers[method](params);
}
function send(msg) {
msg.token = user && user.token;
ws.send(cbor.encode(msg));
}
// Connection opened
ws.addEventListener('open', function (event) {
send({ method: 'cryp_generate', params: { level: 64 }});
send({ method: 'user_create', params: { name: 'lichking', password: 'grepgrepgrep' }});
});
// Listen for messages
ws.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
const blob = new Uint8Array(event.data);
const decoded = cbor.decode(blob);
console.log(decoded);
return receive(decoded);
});