before
This commit is contained in:
Executable
+21
@@ -0,0 +1,21 @@
|
||||
module.exports = {
|
||||
extends: 'airbnb-base',
|
||||
rules: {
|
||||
// prevents stupid complaints a la
|
||||
// (req) {
|
||||
// req.something = x;
|
||||
// }
|
||||
'no-param-reassign': [2, {
|
||||
props: false,
|
||||
}],
|
||||
'no-multi-spaces': [0],
|
||||
'max-len': ['error', 120],
|
||||
'import/no-extraneous-dependencies': [0],
|
||||
'prefer-arrow-callback': [0],
|
||||
'arrow-body-style': [0],
|
||||
'no-console': [0],
|
||||
// i like loops
|
||||
'no-plusplus': [0],
|
||||
'no-await-in-loop': [0],
|
||||
},
|
||||
};
|
||||
+74
-62
@@ -1,63 +1,75 @@
|
||||
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) {
|
||||
[struct, created] = res;
|
||||
|
||||
user = created;
|
||||
|
||||
console.log(created);
|
||||
return send({ method: 'cryp_spawn', params: { level: 64 }});
|
||||
}
|
||||
|
||||
function new_cryp(cryp) {
|
||||
console.log('got a new cryp');
|
||||
}
|
||||
|
||||
const handlers = {
|
||||
'cryp_spawn': 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: 'user_login', params: { name: 'somebodyelse', 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);
|
||||
});
|
||||
|
||||
ws.addEventListener('error', function (event) {
|
||||
console.error('WebSocket error', event);
|
||||
user = null;
|
||||
});
|
||||
|
||||
ws.addEventListener('close', function (event) {
|
||||
console.error('WebSocket closed', event);
|
||||
user = null;
|
||||
const { toast } = require('bulma-toast');
|
||||
|
||||
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 error_toast(err) {
|
||||
console.error(err);
|
||||
return toast({
|
||||
message: err,
|
||||
type: "is-warning",
|
||||
duration: 5000,
|
||||
});
|
||||
}
|
||||
|
||||
function user_login(res) {
|
||||
[struct, user] = res;
|
||||
|
||||
user = user;
|
||||
|
||||
console.log(user);
|
||||
return send({ method: 'cryp_spawn', params: { name: 'drake' }});
|
||||
}
|
||||
|
||||
function new_cryp(cryp) {
|
||||
console.log('got a new cryp');
|
||||
}
|
||||
|
||||
const handlers = {
|
||||
'cryp_spawn': new_cryp,
|
||||
'user_login': user_login,
|
||||
'user_create': user_login,
|
||||
};
|
||||
|
||||
function on_message(event) {
|
||||
// decode binary msg from server
|
||||
const blob = new Uint8Array(event.data);
|
||||
const res = cbor.decode(blob);
|
||||
console.log(res);
|
||||
|
||||
// check for error and split into response type and data
|
||||
if (res.err) return error_toast(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: 'user_create', params: { name: 'ntr', password: 'grepgrepgrep' }});
|
||||
send({ method: 'user_login', params: { name: 'ntr', password: 'grepgrepgrep' }});
|
||||
});
|
||||
|
||||
// Listen for messages
|
||||
ws.addEventListener('message', on_message);
|
||||
|
||||
ws.addEventListener('error', function (event) {
|
||||
console.error('WebSocket error', event);
|
||||
user = null;
|
||||
});
|
||||
|
||||
ws.addEventListener('close', function (event) {
|
||||
console.error('WebSocket closed', event);
|
||||
user = null;
|
||||
});
|
||||
+7
-1
@@ -11,6 +11,12 @@
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"borc": "^2.0.3",
|
||||
"parcel": "^1.9.7"
|
||||
"bulma-toast": "^1.2.0",
|
||||
"parcel": "^1.9.7",
|
||||
"docco": "^0.7.0",
|
||||
"eslint": "^3.18.0",
|
||||
"eslint-config-airbnb-base": "^11.1.1",
|
||||
"eslint-plugin-import": "^2.2.0",
|
||||
"jest": "^18.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user