From 57cef2f44f6b572f3524c9942b82f5791a988d97 Mon Sep 17 00:00:00 2001 From: Dan Seripap Date: Wed, 24 Feb 2016 11:33:54 -0500 Subject: [PATCH] Better sanitation of chat messages, support for multiline messages, updated username change method --- .gitignore | 1 + .travis.yml | 4 +- gulpfile.babel.js | 2 +- package.json | 10 +- readme.md | 9 +- src/js/chat.js | 11 +- src/js/darkwire.js | 76 ++++++++---- src/js/main.js | 36 ++---- src/js/window.js | 1 - src/public/style.css | 23 ++-- src/public/vendor/autogrow.js | 76 ++++++++++++ src/room.js | 33 +++--- src/views/index.mustache | 13 ++- test/acceptance/app.js | 161 +++++++++++++++++++++++--- test/acceptance/fileUtility.js | 1 + test/acceptance/nightwatch-local.json | 52 +++++++++ test/acceptance/ricky.jpg | Bin 0 -> 45578 bytes 17 files changed, 400 insertions(+), 109 deletions(-) create mode 100644 src/public/vendor/autogrow.js create mode 100644 test/acceptance/fileUtility.js create mode 100644 test/acceptance/nightwatch-local.json create mode 100644 test/acceptance/ricky.jpg diff --git a/.gitignore b/.gitignore index 1c3273d..fa7e9cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store node_modules npm-debug.log src/public/main.js diff --git a/.travis.yml b/.travis.yml index eb25b5f..0c9dcff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,6 @@ before_script: - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16" - sleep 5 # give xvfb some time to start - gulp bundle - - node index.js & + - npm start & - sleep 5 -script: node_modules/mocha/bin/mocha test/unit --compilers js:babel-core/register && node_modules/nightwatch/bin/nightwatch --test test/acceptance/index.js --config test/acceptance/nightwatch.json -e chrome +script: npm run test-travis diff --git a/gulpfile.babel.js b/gulpfile.babel.js index 4231a4b..248d80c 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -62,7 +62,7 @@ gulp.task('test', function() { let acceptanceTest = spawn( 'node_modules/nightwatch/bin/nightwatch', - ['--test', 'test/acceptance/index.js', '--config', 'test/acceptance/nightwatch.json'], + ['--test', 'test/acceptance/index.js', '--config', 'test/acceptance/nightwatch-local.json'], {stdio: 'inherit'} ); diff --git a/package.json b/package.json index 53adc9d..a10deac 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "forever": "^0.15.1", "gulp": "^3.9.0", "gulp-uglify": "^1.5.1", + "he": "^0.5.0", "moment": "^2.11.2", "mustache-express": "^1.2.2", "sanitize-html": "^1.11.3", @@ -39,13 +40,10 @@ "vinyl-source-stream": "^1.1.0" }, "scripts": { - "dev": "gulp start", - "test": "gulp test" - }, - "scripts": { - "start": "gulp start", + "start": "npm run bundle && gulp start", "bundle": "gulp bundle", - "test": "gulp test" + "test": "npm run bundle && gulp test", + "test-travis": "node_modules/mocha/bin/mocha test/unit --compilers js:babel-core/register && node_modules/nightwatch/bin/nightwatch --test test/acceptance/index.js --config test/acceptance/nightwatch.json -e chrome" }, "author": "Daniel Seripap", "license": "MIT" diff --git a/readme.md b/readme.md index c167549..60da626 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,7 @@ # Darkwire.io +[![Build Status](https://travis-ci.org/seripap/darkwire.io.svg?branch=master)](https://travis-ci.org/seripap/darkwire.io) [![GitHub release](https://img.shields.io/github/release/seripap/darkwire.io.svg)]() + Simple encrypted web chat. Powered by [socket.io](http://socket.io) and the [web cryptography API](https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto). ### Installation @@ -10,11 +12,12 @@ Simple encrypted web chat. Powered by [socket.io](http://socket.io) and the [web # Bundle JS files (for deployment) npm bundle - # Start a local instance of darkwire + # Running tests locally + brew install chromedriver # Installs chromedriver to /usr/local/bin + npm test + # Start a local instance of darkwire / for dev npm start -Create a **.secret** file in the **/src** folder with a your session secret. It doesn't matter what it is- just keep it private. - Darkwire is now running on `http://localhost:3000` ### Deployment diff --git a/src/js/chat.js b/src/js/chat.js index ac2aae8..c9b6e9c 100644 --- a/src/js/chat.js +++ b/src/js/chat.js @@ -1,5 +1,6 @@ import _ from 'underscore'; import sanitizeHtml from 'sanitize-html'; +import he from 'he'; export default class Chat { constructor(darkwire, socket) { @@ -172,11 +173,10 @@ export default class Chat { return this.log('Username must start with a letter or number.', {error: true}); } - this.darkwire.updateUsername(newUsername).then((socketData) => { + this.darkwire.updateUsername(window.username, newUsername).then((socketData) => { let modifiedSocketData = { username: window.username, - newUsername: socketData.username, - publicKey: socketData.publicKey + newUsername: socketData.username }; this.socket.emit('update user', modifiedSocketData); @@ -302,7 +302,10 @@ export default class Chat { if (messageType === 'action') { $usernameDiv.css('color','').prepend('*'); } - $messageBodyDiv.html(unescape(data.message)); + let unescapedMessage = unescape(data.message); + let lineBreaks = /<br \/>/g; + unescapedMessage = unescapedMessage.replace(lineBreaks, '
'); + $messageBodyDiv.html(unescapedMessage); } else { $messageBodyDiv.html(this.darkwire.addFileToQueue(data)); } diff --git a/src/js/darkwire.js b/src/js/darkwire.js index 284c0b6..1c1d3c8 100644 --- a/src/js/darkwire.js +++ b/src/js/darkwire.js @@ -51,12 +51,35 @@ export default class Darkwire { return this._connected; } + get audio() { + return this._audio; + } + get users() { return this._users; } - get audio() { - return this._audio; + getUserById(id) { + return _.findWhere(this._users, {id: id}); + } + + getUserByName(username) { + return _.findWhere(this._users, {username: username}); + } + + updateUser(data) { + return new Promise((resolve, reject) => { + let user = this.getUserById(data.id); + + if (!user) { + return reject(); + } + + let oldUsername = user.username; + + user.username = data.username; + resolve(oldUsername); + }); } addUser(data) { @@ -97,27 +120,40 @@ export default class Darkwire { return this._users; } - updateUsername(username) { + updateUsername(username, newUsername) { + let user = null; + return new Promise((resolve, reject) => { + if (newUsername) { + user = this.getUserByName(username); + } + if (username) { - Promise.all([ - this._cryptoUtil.createPrimaryKeys() - ]) - .then((data) => { - this._keys = { - public: data[0].publicKey, - private: data[0].privateKey - }; - return Promise.all([ - this._cryptoUtil.exportKey(data[0].publicKey, 'spki') - ]); - }) - .then((exportedKeys) => { - resolve({ - username: username, - publicKey: exportedKeys[0] + if (!user) { + Promise.all([ + this._cryptoUtil.createPrimaryKeys() + ]) + .then((data) => { + this._keys = { + public: data[0].publicKey, + private: data[0].privateKey + }; + return Promise.all([ + this._cryptoUtil.exportKey(data[0].publicKey, 'spki') + ]); + }) + .then((exportedKeys) => { + resolve({ + username: username, + publicKey: exportedKeys[0] + }); }); - }); + } else { + resolve({ + username: newUsername, + publicKey: user.publicKey + }); + } } }); } diff --git a/src/js/main.js b/src/js/main.js index 4b66ab3..ba820e7 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -5,6 +5,7 @@ import CryptoUtil from './crypto'; import Chat from './chat'; import moment from 'moment'; import sanitizeHtml from 'sanitize-html'; +import he from 'he'; let fs = window.RequestFileSystem || window.webkitRequestFileSystem; @@ -61,25 +62,21 @@ $(function() { // Prevents input from having injected markup function cleanInput(input) { - let message = sanitizeHtml(_.escape(input), { - allowedTags: ['b', 'i', 'em', 'strong', 'a'], - allowedAttributes: { - 'a': ['href'] - } - }); - // let message = $('
').html(input).text(); - message = Autolinker.link(message); - return _.escape(message); + input = input.replace(/\r?\n/g, '
'); + let sanitized = he.encode(input); + sanitized = Autolinker.link(sanitized); + return sanitized; } // Keyboard events $window.keydown(function(event) { // When the client hits ENTER on their keyboard and chat message input is focused - if (event.which === 13 && $('.inputMessage').is(':focus')) { + if (event.which === 13 && !event.shiftKey && $('.inputMessage').is(':focus')) { handleMessageSending(); socket.emit('stop typing'); chat.typing = false; + event.preventDefault(); } }); @@ -107,7 +104,10 @@ $(function() { }); socket.on('user update', (data) => { - updateUser(data); + darkwire.updateUser(data).then((oldUsername) => { + chat.log(oldUsername + ' changed name to ' + data.username); + renderParticipantsList(); + }); }); // Whenever the server emits 'new message', update the chat body @@ -227,20 +227,6 @@ $(function() { }); } - function updateUser(data) { - let logMessage = data.username + ' changed name to '; - darkwire.removeUser(data); - - data.username = data.newUsername; - logMessage += data.username; - let importKeysPromises = darkwire.addUser(data); - Promise.all(importKeysPromises).then(() => { - chat.log(logMessage); - renderParticipantsList(); - }); - - } - window.triggerFileTransfer = function(context) { const fileId = context.getAttribute('data-file'); if (fileId) { diff --git a/src/js/window.js b/src/js/window.js index fedd3ba..90f1df5 100644 --- a/src/js/window.js +++ b/src/js/window.js @@ -31,7 +31,6 @@ export default class WindowHandler { enableFileTransfer() { if (this.fileHandler.isSupported) { - console.log('enabled'); $('#send-file').click((e) => { e.preventDefault(); $('#fileInput').trigger('click'); diff --git a/src/public/style.css b/src/public/style.css index 619489a..9c4d41c 100644 --- a/src/public/style.css +++ b/src/public/style.css @@ -9,7 +9,7 @@ html { -webkit-font-smoothing: antialiased; } -html, body, input { +html, body, input, textarea { font-family: "SourceCodePro-Regular", "HelveticaNeue-Light", @@ -160,6 +160,10 @@ input { font-size: 16px; } +textarea { + font-size: 20px; +} + .log { color: gray; font-size: 70%; @@ -196,19 +200,24 @@ input { /* Input */ +.inputContainer { + position: fixed; + right: 0; + left: 0; + bottom: 0; + width: 100%; + padding-bottom: 10px; +} + .inputMessage{ background: black !important; color: white !important; border: none; border-top: 1px solid #282828; - bottom: 0; height: 60px; - left: 0; outline: none; - padding-left: 10px; - position: fixed; - right: 0; width: 100%; + padding: 10px 75px 10px 10px; /*Fix for inner shadow on iOS*/ -webkit-appearance: none; border-radius: 0px; @@ -218,7 +227,7 @@ input { position: fixed; bottom: 0px; right: 0px; - padding: 15px; + padding: 22px; cursor: pointer; } diff --git a/src/public/vendor/autogrow.js b/src/public/vendor/autogrow.js new file mode 100644 index 0000000..05e93a7 --- /dev/null +++ b/src/public/vendor/autogrow.js @@ -0,0 +1,76 @@ +(function($) +{ + /** + * Auto-growing textareas; technique ripped from Facebook + * + * + * http://github.com/jaz303/jquery-grab-bag/tree/master/javascripts/jquery.autogrow-textarea.js + */ + $.fn.autogrow = function(options) + { + return this.filter('textarea').each(function() + { + var self = this; + var $self = $(self); + var minHeight = $self.height(); + var noFlickerPad = $self.hasClass('autogrow-short') ? 0 : parseInt($self.css('lineHeight')) || 0; + var settings = $.extend({ + preGrowCallback: null, + postGrowCallback: null + }, options ); + + var shadow = $('
').css({ + position: 'absolute', + top: -10000, + left: -10000, + width: $self.width(), + fontSize: $self.css('fontSize'), + fontFamily: $self.css('fontFamily'), + fontWeight: $self.css('fontWeight'), + lineHeight: $self.css('lineHeight'), + resize: 'none', + 'word-wrap': 'break-word' + }).appendTo(document.body); + + var update = function(event) + { + var times = function(string, number) + { + for (var i=0, r=''; i/g, '>') + .replace(/\n$/, '
 ') + .replace(/\n/g, '
') + .replace(/ {2,}/g, function(space){ return times(' ', space.length - 1) + ' ' }); + + // Did enter get pressed? Resize in this keydown event so that the flicker doesn't occur. + if (event && event.data && event.data.event === 'keydown' && event.keyCode === 13) { + val += '
'; + } + + shadow.css('width', $self.width()); + shadow.html(val + (noFlickerPad === 0 ? '...' : '')); // Append '...' to resize pre-emptively. + + var newHeight=Math.max(shadow.height() + noFlickerPad, minHeight); + if(settings.preGrowCallback!=null){ + newHeight=settings.preGrowCallback($self,shadow,newHeight,minHeight); + } + + $self.height(newHeight); + + if(settings.postGrowCallback!=null){ + settings.postGrowCallback($self); + } + } + + $self.change(update).keyup(update).keydown({event:'keydown'},update); + $(window).resize(update); + + update(); + }); + }; +})(jQuery); diff --git a/src/room.js b/src/room.js index 5e11e04..b2659ad 100644 --- a/src/room.js +++ b/src/room.js @@ -93,27 +93,22 @@ class Room { if (data.newUsername.length > 16) { return false; } - this.users = _.without(this.users, socket.user); - let modifiedUser = { - id: socket.user.id, - username: data.newUsername, - publicKey: data.publicKey - }; - - this.users.push(modifiedUser); - - socket.username = data.newUsername; - socket.user = modifiedUser; - - thisIO.emit('user update', { - id: socket.user.id, - username: data.username, - newUsername: data.newUsername, - publicKey: data.publicKey, - users: this.users, - timestamp: new Date() + let user = _.find(this.users, (users) => { + return users === socket.user; }); + if (user) { + user.username = data.newUsername; + socket.username = user.username; + socket.user = user; + + thisIO.emit('user update', { + username: socket.username, + id: socket.user.id, + timestamp: new Date() + }); + } + }); }); diff --git a/src/views/index.mustache b/src/views/index.mustache index 58a643a..e9f1eef 100644 --- a/src/views/index.mustache +++ b/src/views/index.mustache @@ -53,11 +53,13 @@
- -
- - - +
+ +
+ + + +
@@ -173,6 +175,7 @@ + diff --git a/test/acceptance/app.js b/test/acceptance/app.js index 0e63b92..b18c63e 100644 --- a/test/acceptance/app.js +++ b/test/acceptance/app.js @@ -1,7 +1,11 @@ +/*jshint -W030 */ +import App from '../../package.json'; + describe('Darkwire', () => { - describe('starting a room', () => { + describe('Creating a room', () => { + var testingRoom = null; let browser; before((client, done) => { @@ -25,31 +29,31 @@ describe('Darkwire', () => { done(); }); - it('should show welcome modal', () => { + it('Should show welcome modal', () => { browser .waitForElementVisible('#first-modal', 5000) - .assert.containsText('#first-modal .modal-title', 'Welcome to darkwire.io'); + .expect.element('#first-modal').to.be.visible; }); - it('should have correct header', () => { - browser.expect.element('#first-modal .modal-title').text.to.equal('Welcome to darkwire.io'); + it('Should be started with NPM', () => { + browser.expect.element('#first-modal .modal-title').text.to.equal('Welcome to darkwire.io v' + App.version); }); - describe('opening a second window', () => { + describe('Joining chat room', () => { before((client, done) => { browser.url((result) => { let urlSplit = result.value.split('/'); - let roomId = urlSplit[urlSplit.length - 1]; - let url = 'http://localhost:3000/' + roomId; + testingRoom = urlSplit[urlSplit.length - 1]; + let url = 'http://localhost:3000/' + testingRoom; browser.execute(() => { window.open('http://localhost:3000/', '_blank'); }, [], () => { - browser.window_handles((result) => { + browser.windowHandles((result) => { browser.switchWindow(result.value[1], () => { browser.execute((id) => { window.open('http://localhost:3000/' + id, '_self'); - }, [roomId], () => { + }, [testingRoom], () => { done(); }); }); @@ -58,25 +62,26 @@ describe('Darkwire', () => { }); }); - it('should not show welcome modal', () => { + it('Should not show welcome modal', () => { browser.assert.hidden('#first-modal'); }); - describe('sending messages', () => { + describe('Sending chat message', () => { before((client, done) => { browser.waitForElementPresent('ul.users li:nth-child(2)', 5000, () => { - browser.setValue('input.inputMessage', ['Hello world', browser.Keys.RETURN], () => { + browser.setValue('textarea.inputMessage', ['Hello world!', browser.Keys.RETURN], () => { done(); }); }); }); - it('should work', () => { - browser.window_handles((result) => { + it('Should send a message', () => { + browser.windowHandles((result) => { browser.switchWindow(result.value[0], () => { browser.waitForElementPresent('span.messageBody', 5000, () => { - browser.assert.containsText('span.messageBody', 'Hello world'); + browser.pause(2000); + browser.assert.containsText('span.messageBody', 'Hello world!'); }); }); }); @@ -86,5 +91,129 @@ describe('Darkwire', () => { }); + describe('Slash Commands', () => { + + before((client, done) => { + let url = 'http://localhost:3000/' + testingRoom; + browser.url(url, () => { + browser.windowHandles((result) => { + browser.switchWindow(result.value[0], () => { + browser.execute((id) => { + window.open('http://localhost:3000/' + id, '_self'); + }, [testingRoom], () => { + done(); + }); + }); + }); + }); + }); + + describe('/me', () => { + + before((client, done) => { + browser.windowHandles((result) => { + browser.switchWindow(result.value[0], () => { + browser.waitForElementPresent('ul.users li:nth-child(2)', 5000, () => { + browser.setValue('textarea.inputMessage', ['/me is no stranger to love', browser.Keys.RETURN], () => { + done(); + }); + }); + }); + }); + }); + + it('Should express an interactive action', () => { + browser.windowHandles((result) => { + browser.switchWindow(result.value[0], () => { + browser.waitForElementPresent('span.messageBody', 5000, () => { + browser.pause(5000); + browser.assert.containsText('.action span.messageBody', 'is no stranger to love'); + }); + }); + }); + }); + + }); + + describe('/nick', () => { + + before((client, done) => { + browser.url('http://localhost:3000/' + testingRoom, () => { + browser.waitForElementPresent('ul.users li:nth-child(2)', 5000, () => { + browser.setValue('textarea.inputMessage', ['/nick rickAnsley', browser.Keys.RETURN], () => { + done(); + }); + }); + }); + }); + + it('Should change username', () => { + browser.windowHandles((result) => { + browser.switchWindow(result.value[3], () => { + browser.pause(5000); + browser.assert.containsText('.log:last-child', 'rickAnsley'); + }); + }); + }); + + }); + + }); + + describe('Before file transfer: Image: Confirm sending', () => { + + before((client, done) => { + let url = 'http://localhost:3000/' + testingRoom; + browser.url(url, () => { + browser.windowHandles((result) => { + browser.switchWindow(result.value[0], () => { + browser.execute((id) => { + window.open('http://localhost:3000/' + id, '_self'); + }, [testingRoom], () => { + browser.waitForElementPresent('#send-file', 5000, () => { + browser.execute(() => { + $('input[name="fileUploader"]').show(); + }, [], () => { + browser.waitForElementPresent('input[name="fileUploader"]', 5000, () => { + let testFile = __dirname + '/ricky.jpg'; + browser.setValue('input[name="fileUploader"]', testFile, (result) => { + done(); + }); + }); + }); + }); + }); + }); + }); + }); + }); + + it('Should prompt user confirmation', () => { + browser.windowHandles((result) => { + browser.switchWindow(result.value[0], () => { + browser.waitForElementPresent('span.messageBody', 5000, () => { + browser.pause(5000); + browser.assert.containsText('span.messageBody', 'You are about to send ricky.jpg to all parties in this chat. Confirm | Cancel'); + }); + }); + }); + }); + + it('Should show sent confirmation message', () => { + browser.windowHandles((result) => { + browser.switchWindow(result.value[0], () => { + browser.waitForElementPresent('span.messageBody a:first-child', 5000, () => { + browser.click('span.messageBody a:first-child', () => { + browser.waitForElementNotPresent('span.messageBody a:first-child', 5000, () => { + browser.assert.containsText('span.messageBody', 'Sent ricky.jpg'); + }); + }); + }); + }); + }); + }); + + }); + }); }); diff --git a/test/acceptance/fileUtility.js b/test/acceptance/fileUtility.js new file mode 100644 index 0000000..2a8371a --- /dev/null +++ b/test/acceptance/fileUtility.js @@ -0,0 +1 @@ +($('#fileInput').show)(); diff --git a/test/acceptance/nightwatch-local.json b/test/acceptance/nightwatch-local.json new file mode 100644 index 0000000..a5fd87c --- /dev/null +++ b/test/acceptance/nightwatch-local.json @@ -0,0 +1,52 @@ +{ + "src_folders" : ["test"], + "output_folder" : "reports", + "custom_commands_path" : "", + "custom_assertions_path" : "", + "page_objects_path" : "", + "globals_path" : "", + "test_runner" : "mocha", + "selenium" : { + "start_process" : true, + "server_path" : "test/acceptance/bin/selenium-server-standalone-2.52.0.jar", + "log_path" : false, + "host" : "127.0.0.1", + "port" : 4444, + "cli_args" : { + "webdriver.chrome.driver" : "/usr/local/bin/chromedriver", + "webdriver.ie.driver" : "" + } + }, + + "test_settings" : { + "default" : { + "launch_url" : "http://localhost", + "selenium_port" : 4444, + "selenium_host" : "localhost", + "silent": true, + "screenshots" : { + "enabled" : false, + "path" : "" + }, + "desiredCapabilities": { + "browserName": "chrome", + "javascriptEnabled": true, + "acceptSslCerts": true, + "chromeOptions" : { + "binary": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + } + } + }, + + "chrome" : { + "desiredCapabilities": { + "browserName": "chrome", + "javascriptEnabled": true, + "acceptSslCerts": true, + "chromeOptions" : { + "args" : ["-e", "--no-sandbox"] + } + } + } + } +} diff --git a/test/acceptance/ricky.jpg b/test/acceptance/ricky.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5bca4a8ad81ed60ed4c1bdbcdafa3d04a95acc33 GIT binary patch literal 45578 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 eqW-!Rol+sE#x5jeOA