From 3f74792e84c19ea1b0a7f5cd5203f1b9e8b7edda Mon Sep 17 00:00:00 2001 From: plane000 Date: Mon, 23 Jul 2018 10:30:37 +0100 Subject: [PATCH] web chat --- .../adruino-temp-sensor/client/history.csv | 239 ++++++++++ JavaScript/adruino-temp-sensor/client/main.js | 5 +- JavaScript/adruino-temp-sensor/index.js | 15 +- JavaScript/web-chat/client/index.html | 17 + JavaScript/web-chat/client/main.js | 42 ++ JavaScript/web-chat/client/style.css | 19 + JavaScript/web-chat/index.js | 62 +++ JavaScript/web-chat/package-lock.json | 418 ++++++++++++++++-- JavaScript/web-chat/package.json | 7 +- JavaScript/web-chat/utils.js | 18 + 10 files changed, 798 insertions(+), 44 deletions(-) create mode 100644 JavaScript/adruino-temp-sensor/client/history.csv create mode 100644 JavaScript/web-chat/client/index.html create mode 100644 JavaScript/web-chat/client/main.js create mode 100644 JavaScript/web-chat/client/style.css create mode 100644 JavaScript/web-chat/utils.js diff --git a/JavaScript/adruino-temp-sensor/client/history.csv b/JavaScript/adruino-temp-sensor/client/history.csv new file mode 100644 index 0000000..dd68faf --- /dev/null +++ b/JavaScript/adruino-temp-sensor/client/history.csv @@ -0,0 +1,239 @@ +time,temperature +2018-7-22 14:05:38,27 +2018-7-22 14:06:38,27 +2018-7-22 14:07:38,28 +2018-7-22 14:08:38,28 +2018-7-22 14:09:38,28 +2018-7-22 14:10:38,28 +2018-7-22 14:11:38,28 +2018-7-22 14:12:38,28 +2018-7-22 14:13:38,28 +2018-7-22 14:14:38,28 +2018-7-22 14:15:38,28 +2018-7-22 14:16:38,28 +2018-7-22 14:17:38,28 +2018-7-22 14:18:38,28 +2018-7-22 14:19:38,28 +2018-7-22 14:20:38,28 +2018-7-22 14:21:38,28 +2018-7-22 14:22:38,28 +2018-7-22 14:23:38,28 +2018-7-22 14:24:38,28 +2018-7-22 14:25:38,28 +2018-7-22 14:26:38,28 +2018-7-22 14:27:38,28 +2018-7-22 14:28:38,28 +2018-7-22 14:29:38,28 +2018-7-22 14:30:38,28 +2018-7-22 14:31:38,28 +2018-7-22 14:32:38,28 +2018-7-22 14:33:38,28 +2018-7-22 14:34:38,28 +2018-7-22 14:35:38,28 +2018-7-22 14:36:38,28 +2018-7-22 14:37:38,28 +2018-7-22 14:38:38,28 +2018-7-22 14:39:38,28 +2018-7-22 14:40:38,28 +2018-7-22 14:41:38,28 +2018-7-22 14:42:38,28 +2018-7-22 14:43:38,28 +2018-7-22 14:44:38,28 +2018-7-22 14:45:38,28 +2018-7-22 14:46:38,28 +2018-7-22 14:47:38,28 +2018-7-22 14:48:38,28 +2018-7-22 14:49:38,28 +2018-7-22 14:50:38,28 +2018-7-22 14:51:38,28 +2018-7-22 14:52:38,28 +2018-7-22 14:53:38,28 +2018-7-22 14:54:38,28 +2018-7-22 14:55:38,28 +2018-7-22 14:56:38,28 +2018-7-22 14:57:38,28 +2018-7-22 14:58:38,28 +2018-7-22 14:59:38,28 +2018-7-22 15:00:38,28 +2018-7-22 15:01:38,28 +2018-7-22 15:02:38,28 +2018-7-22 15:03:38,28 +2018-7-22 15:04:38,28 +2018-7-22 15:05:38,28 +2018-7-22 15:06:38,28 +2018-7-22 15:07:38,28 +2018-7-22 15:08:38,28 +2018-7-22 15:09:38,28 +2018-7-22 15:10:38,28 +2018-7-22 15:11:38,28 +2018-7-22 15:12:38,28 +2018-7-22 15:13:38,28 +2018-7-22 15:14:38,28 +2018-7-22 15:15:38,28 +2018-7-22 15:16:38,28 +2018-7-22 15:17:38,28 +2018-7-22 15:18:38,28 +2018-7-22 15:19:38,28 +2018-7-22 15:20:38,28 +2018-7-22 15:21:38,28 +2018-7-22 15:22:38,28 +2018-7-22 15:23:38,28 +2018-7-22 15:24:38,28 +2018-7-22 15:25:38,28 +2018-7-22 15:26:38,28 +2018-7-22 15:27:38,28 +2018-7-22 15:28:38,28 +2018-7-22 15:29:38,28 +2018-7-22 15:30:38,28 +2018-7-22 15:31:38,28 +2018-7-22 15:32:38,28 +2018-7-22 15:33:38,28 +2018-7-22 15:34:38,28 +2018-7-22 15:35:38,28 +2018-7-22 15:36:38,28 +2018-7-22 15:37:38,28 +2018-7-22 15:38:38,28 +2018-7-22 15:39:38,28 +2018-7-22 15:40:38,28 +2018-7-22 15:41:38,28 +2018-7-22 15:42:38,28 +2018-7-22 15:43:38,28 +2018-7-22 15:44:38,28 +2018-7-22 15:45:38,28 +2018-7-22 15:46:38,28 +2018-7-22 15:47:38,28 +2018-7-22 15:48:38,28 +2018-7-22 15:49:38,28 +2018-7-22 15:50:38,28 +2018-7-22 15:51:38,28 +2018-7-22 15:52:38,28 +2018-7-22 15:53:38,28 +2018-7-22 15:54:38,28 +2018-7-22 15:55:38,28 +2018-7-22 15:56:38,28 +2018-7-22 15:57:38,28 +2018-7-22 15:58:38,28 +2018-7-22 15:59:38,28 +2018-7-22 16:00:38,28 +2018-7-22 16:01:38,28 +2018-7-22 16:02:38,28 +2018-7-22 16:03:38,28 +2018-7-22 16:04:38,28 +2018-7-22 16:05:38,28 +2018-7-22 16:06:38,28 +2018-7-22 16:07:38,28 +2018-7-22 16:08:38,28 +2018-7-22 16:09:38,28 +2018-7-22 16:10:38,28 +2018-7-22 16:11:38,28 +2018-7-22 16:12:38,28 +2018-7-22 16:13:38,28 +2018-7-22 16:14:38,28 +2018-7-22 16:15:38,28 +2018-7-22 16:16:38,28 +2018-7-22 16:17:38,28 +2018-7-22 16:18:38,28 +2018-7-22 16:19:38,28 +2018-7-22 16:20:38,28 +2018-7-22 16:21:38,28 +2018-7-22 16:22:38,28 +2018-7-22 16:23:38,28 +2018-7-22 16:24:38,28 +2018-7-22 16:25:38,28 +2018-7-22 16:26:38,28 +2018-7-22 16:27:38,28 +2018-7-22 16:28:38,28 +2018-7-22 16:29:38,28 +2018-7-22 16:30:38,28 +2018-7-22 16:31:38,28 +2018-7-22 16:32:38,28 +2018-7-22 16:33:38,28 +2018-7-22 16:34:38,28 +2018-7-22 16:35:38,28 +2018-7-22 16:36:38,28 +2018-7-22 16:37:38,28 +2018-7-22 16:38:38,28 +2018-7-22 16:39:38,28 +2018-7-22 16:40:38,28 +2018-7-22 16:41:38,28 +2018-7-22 16:42:38,28 +2018-7-22 16:43:38,28 +2018-7-22 16:44:38,28 +2018-7-22 16:45:39,28 +2018-7-22 16:46:39,28 +2018-7-22 16:47:39,28 +2018-7-22 16:48:39,28 +2018-7-22 16:49:39,28 +2018-7-22 16:50:39,28 +2018-7-22 16:51:39,28 +2018-7-22 16:52:39,28 +2018-7-22 16:53:39,28 +2018-7-22 16:54:39,28 +2018-7-22 16:55:39,28 +2018-7-22 16:56:39,28 +2018-7-22 16:57:39,28 +2018-7-22 16:58:39,28 +2018-7-22 16:59:39,28 +2018-7-22 17:00:39,28 +2018-7-22 17:01:39,28 +2018-7-22 17:02:39,28 +2018-7-22 17:03:39,28 +2018-7-22 17:04:39,28 +2018-7-22 17:05:39,28 +2018-7-22 17:06:39,28 +2018-7-22 17:07:39,28 +2018-7-22 17:08:39,28 +2018-7-22 17:09:39,28 +2018-7-22 17:10:39,28 +2018-7-22 17:11:39,28 +2018-7-22 17:14:03,29 +2018-7-22 17:15:03,30 +2018-7-22 17:16:03,30 +2018-7-22 17:17:03,30 +2018-7-22 17:18:03,30 +2018-7-22 17:19:03,30 +2018-7-22 17:20:03,30 +2018-7-22 17:21:03,30 +2018-7-22 17:22:03,30 +2018-7-22 17:23:03,30 +2018-7-22 17:24:03,30 +2018-7-22 17:25:03,30 +2018-7-22 17:26:03,30 +2018-7-22 17:27:03,30 +2018-7-22 17:28:03,30 +2018-7-22 17:29:03,30 +2018-7-22 17:30:03,30 +2018-7-22 17:31:03,30 +2018-7-22 17:32:03,30 +2018-7-22 17:33:03,30 +2018-7-22 17:34:03,30 +2018-7-22 17:35:03,30 +2018-7-22 17:36:03,30 +2018-7-22 17:37:03,30 +2018-7-22 17:38:03,30 +2018-7-22 17:39:03,30 +2018-7-22 17:40:03,30 +2018-7-22 17:41:03,30 +2018-7-22 17:42:03,30 +2018-7-22 17:43:03,30 +2018-7-22 17:44:03,30 +2018-7-22 17:45:03,30 +2018-7-22 17:46:03,30 +2018-7-22 17:47:03,30 +2018-7-22 17:48:03,30 +2018-7-22 17:49:03,30 +2018-7-22 17:50:03,30 +2018-7-22 17:51:03,30 +2018-7-22 17:52:03,30 +2018-7-22 17:53:03,30 +2018-7-22 17:54:03,30 +2018-7-22 17:55:03,30 +2018-7-22 17:56:03,30 +2018-7-22 17:57:03,30 +2018-7-22 17:58:03,30 +2018-7-22 17:59:03,30 +2018-7-22 18:00:03,30 +2018-7-22 18:01:03,30 +2018-7-22 18:02:03,30 +2018-7-22 18:03:03,30 +2018-7-22 18:04:03,30 diff --git a/JavaScript/adruino-temp-sensor/client/main.js b/JavaScript/adruino-temp-sensor/client/main.js index 3718836..dbdaf28 100644 --- a/JavaScript/adruino-temp-sensor/client/main.js +++ b/JavaScript/adruino-temp-sensor/client/main.js @@ -1,6 +1,6 @@ console.log('Connecting to server') -var socket = io.connect('benkyd.duckdns.org:8081'); +var socket = io.connect('benkyd.duckdns.org:7001'); let temp = []; socket.on('connect', function(data) { @@ -13,7 +13,8 @@ socket.on('handshake', function(data) { socket.on('temp', function(data) { console.log(data); - addPoint(data); + if (data[0] * 2 != data[1]) socket.emmit('another'); + addPoint(data[0]); }); socket.on('lasthour', function(data) { diff --git a/JavaScript/adruino-temp-sensor/index.js b/JavaScript/adruino-temp-sensor/index.js index 01b5847..8809dec 100644 --- a/JavaScript/adruino-temp-sensor/index.js +++ b/JavaScript/adruino-temp-sensor/index.js @@ -8,6 +8,7 @@ let io = require('socket.io')(server); /* COMMUNICATION WITH ARDUINO AND CLENSING OF DATA */ let lastHour = [] +let history = []; let temperature; const parser = new parsers.Readline({ delimiter: '\r\n' @@ -40,12 +41,12 @@ app.use('/', express.static(__dirname + '/client')); app.get('/', function(req, res) { res.sendFile(__dirname + '/client/index.html'); }); -app.listen(8080); -console.log('Server listening on 80') +app.listen(7000); +console.log('Server listening on 8081') /* WEBSOCKETS */ -server.listen(8081); +server.listen(7001); io.on('connection', (socket) => { let ip = socket.request.connection.remoteAddress; @@ -61,12 +62,18 @@ io.on('connection', (socket) => { socket.emit('lasthour', lastHour); setInterval(() => { - socket.emit('temp', temperature); + socket.emit('temp', [temperature, temperature * 2]); }, 60000); }); + + socket.on('another', function(data) { + socket.emit('temp', [temperature, temperature * 2]); + }); }); setInterval(() => { + history.push(temperature); lastHour.push(temperature); if (lastHour.length > 60) lastHour.splice(0,1); + fs.appendFileSync('client/history.csv', `${new Date().toLocaleString()},${temperature}\n`) }, 60000) diff --git a/JavaScript/web-chat/client/index.html b/JavaScript/web-chat/client/index.html new file mode 100644 index 0000000..581406b --- /dev/null +++ b/JavaScript/web-chat/client/index.html @@ -0,0 +1,17 @@ + + + + + + BenChat + + + + + + + + + + + diff --git a/JavaScript/web-chat/client/main.js b/JavaScript/web-chat/client/main.js new file mode 100644 index 0000000..5251c1f --- /dev/null +++ b/JavaScript/web-chat/client/main.js @@ -0,0 +1,42 @@ +var socket = io.connect('http://benkyd.duckdns.org:8083'); + +let name; + +window.addEventListener('keydown', (event) => { + if (event.code == 'Enter') messagesend(); +}) + +function messagesend() { + if (!name) { + while (name == null || name == undefined) { + name = prompt('Enter your name:'); + tempname = name.replace(/^\s+/, '').replace(/\s+$/, ''); + if (tempname === '') { + name = undefined; + } + } + } + + let message = document.getElementById('in').value; + + if (message == '' || message == ' ') { + document.getElementById('in').value = ''; + return; + } + + tempmessage = message.replace(/^\s+/, '').replace(/\s+$/, ''); + if (tempname === '') { + document.getElementById('in').value = ''; + return; + } + + socket.emit('outward', {name: name, message: message}) + document.getElementById('in').value = ''; +} + +socket.on('receive', (data) => { + console.log(data); + document.getElementById('chat').value = document.getElementById('chat').value + data; + document.getElementById('chat').scrollTop = document.getElementById('chat').scrollHeight; +}); + diff --git a/JavaScript/web-chat/client/style.css b/JavaScript/web-chat/client/style.css new file mode 100644 index 0000000..c5477b8 --- /dev/null +++ b/JavaScript/web-chat/client/style.css @@ -0,0 +1,19 @@ +body { + background-color: rgb(245, 245, 245); +} + +textarea { + resize: none; + left: 2px; +} + +input { + position: absolute; + top: 60%; + left: 2px; +} + +input[type=text] { + left: 70px; + width: 50%; +} diff --git a/JavaScript/web-chat/index.js b/JavaScript/web-chat/index.js index e69de29..c3d829f 100644 --- a/JavaScript/web-chat/index.js +++ b/JavaScript/web-chat/index.js @@ -0,0 +1,62 @@ +const fs = require('fs'); +const bodyParser = require('body-parser'); +const utils = require('./utils'); +let express = require('express'); +let app = express(); +let server = require('http').createServer(app); +let io = require('socket.io')(server); + +app.use('/', express.static(__dirname + '/client')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); + + +io.on('connection', (socket) => { + let ip = socket.request.connection.remoteAddress; + if (ip.startsWith('::ffff:')) ip = ip.substring(7); + console.log(`${utils.currenttime()} new client connected at ${ip}`) + + socket.on('outward', async function(data) { + if (ip == '86.11.58.84' || ip == '178.128.34.116') { + socket.emit('receive', 'gey lol'); + return; + } + + // let rate = await rateLimit(socket); + // if (rate == -1) return; + name = data.name; + message = data.message; + + let validate = validateMessage(message, socket); + if (validate == -1) return; + + console.log(`${utils.currenttime()} ${name} {${ip}}: ${message}`); + + socket.broadcast.emit('receive', `${name}: ${message} \n`); + socket.emit('receive', `${name}: ${message} \n`); + }); +}); + +function validateMessage(message) { + if (message.length >= 2000) { + socket.emit('receive', `YOU HAVE EXEDED THE 2000 CHARICTER LIMIT: MESSAGE NOT SENT \n`); + } +} + +let requests = []; +async function rateLimit(socket) { + if (requests.indexOf(socket.request.connection.remoteAddress) != -1) { + socket.emit('receive', `YOU ARE BEING RATE LIMITED, WAIT 1/2 SECOND\n`); + await utils.sleep('10'); + + while (requests.indexOf(socket.request.connection.remoteAddress) != -1) { + requests.splice(requests.indexOf(socket.request.connection.remoteAddress), 1); + } + return -1; + } + requests.push(socket.request.connection.remoteAddress); +} + +app.listen(8082); +server.listen(8083); +console.log('Server listening on 8082 and sockets are listening on 8083') diff --git a/JavaScript/web-chat/package-lock.json b/JavaScript/web-chat/package-lock.json index 463e06b..b5914bf 100644 --- a/JavaScript/web-chat/package-lock.json +++ b/JavaScript/web-chat/package-lock.json @@ -13,33 +13,113 @@ "negotiator": "0.6.1" } }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", "http-errors": "1.6.3", - "iconv-lite": "0.4.19", + "iconv-lite": "0.4.23", "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", + "qs": "6.5.2", + "raw-body": "2.3.3", "type-is": "1.6.16" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } } }, + "browser-request": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", + "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "client-request": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/client-request/-/client-request-2.3.0.tgz", + "integrity": "sha1-xGBPcfgclLKAZZV5oXu8BEb+whI=" + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -88,6 +168,69 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "engine.io": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "ws": "3.3.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.3" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -133,6 +276,64 @@ "type-is": "1.6.16", "utils-merge": "1.0.1", "vary": "1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + } } }, "finalhandler": { @@ -159,6 +360,24 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -171,9 +390,17 @@ } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" }, "inherits": { "version": "2.0.3", @@ -185,6 +412,11 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -228,6 +460,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -236,6 +473,22 @@ "ee-first": "1.1.1" } }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -266,37 +519,14 @@ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "requires": { "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } } }, "safe-buffer": { @@ -304,6 +534,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -340,11 +575,95 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "requires": { + "debug": "3.1.0", + "engine.io": "3.2.0", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.1.1", + "socket.io-parser": "3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -354,6 +673,11 @@ "mime-types": "2.1.19" } }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -368,6 +692,26 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } } diff --git a/JavaScript/web-chat/package.json b/JavaScript/web-chat/package.json index 0c80676..4e1f090 100644 --- a/JavaScript/web-chat/package.json +++ b/JavaScript/web-chat/package.json @@ -9,6 +9,11 @@ "author": "Ben (plane000)", "license": "MIT", "dependencies": { - "express": "^4.16.3" + "body-parser": "^1.18.3", + "browser-request": "^0.3.3", + "client-request": "^2.3.0", + "express": "^4.16.3", + "fs": "0.0.1-security", + "socket.io": "^2.1.1" } } diff --git a/JavaScript/web-chat/utils.js b/JavaScript/web-chat/utils.js new file mode 100644 index 0000000..ed3c59b --- /dev/null +++ b/JavaScript/web-chat/utils.js @@ -0,0 +1,18 @@ +module.exports.currenttime = function() { + let d = new Date(Date.now()); + return `[${pad(d.getHours(), 2)}:${pad(d.getMinutes(), 2)}:${pad(d.getSeconds(), 2)}]`; +} + +function pad(n, width, z) { + z = z || '0'; + n = n + ''; + return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; +} + +module.exports.sleep = function(ms) { + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(); + }, ms); + }); +} \ No newline at end of file