diff --git a/bin/remixd b/bin/remixd index b977c9e5bc..ad3c02ece2 100755 --- a/bin/remixd +++ b/bin/remixd @@ -9,6 +9,7 @@ var fs = require('fs-extra') program .usage('-s ') .description('Provide a two ways connection between the local computer and Remix IDE') +.option('--remix-ide ', 'URL of remix instance allowed to connect to this web sockect connection') .option('-s, --shared-folder ', 'Folder to share with Remix IDE') .option('--read-only', 'Treat shared folder as read-only (experimental)') .option('-m, --mist', 'start mist') @@ -26,6 +27,11 @@ program var killCallBack = [] +if (!program.remixIde) { + return console.log('\x1b[31m%s\x1b[0m', '[ERR] URL Remix IDE instance has to be provided.') +} +console.log('\x1b[33m%s\x1b[0m', '[WARN] You may now only use IDE at ' + program.remixIde + ' to connect to that instance') + if (program.devPath) { if (fs.existsSync(program.devPath)) { killCallBack.push(startmistGeth(program.devPath, program.mist, program.geth, program.autoMine, program.rpc, program.rpcPort)) @@ -46,7 +52,7 @@ if (program.frontend) { if (program.sharedFolder) { console.log('\x1b[33m%s\x1b[0m', '[WARN] Any application that runs on your computer can potentially read from and write to all files in the directory.') console.log('\x1b[33m%s\x1b[0m', '[WARN] Symbolinc links are not forwarded to Remix IDE\n') - var sharedFolderrouter = new Router(65520, servicesList['sharedfolder'], (webSocket) => { + var sharedFolderrouter = new Router(65520, servicesList['sharedfolder'], { remixIdeUrl: program.remixIde }, (webSocket) => { servicesList['sharedfolder'].setWebSocket(webSocket) servicesList['sharedfolder'].setupNotifications(program.sharedFolder) servicesList['sharedfolder'].sharedFolder(program.sharedFolder, program.readOnly) diff --git a/src/router.js b/src/router.js index 878ee46137..c5619cb6a1 100644 --- a/src/router.js +++ b/src/router.js @@ -1,13 +1,14 @@ var Websocket = require('./websocket') class Router { - constructor (port, service, initCallback) { + constructor (port, service, opt, initCallback) { + this.opt = opt this.port = port this.service = service this.initCallback = initCallback } start () { - var websocket = new Websocket(this.port) + var websocket = new Websocket(this.port, this.opt) this.websocket = websocket this.websocket.start((message) => { this.call(message.id, message.service, message.fn, message.args) diff --git a/src/websocket.js b/src/websocket.js index 59702773ab..4050bbff0d 100644 --- a/src/websocket.js +++ b/src/websocket.js @@ -3,9 +3,10 @@ var WebSocketServer = require('websocket').server var http = require('http') class WebSocket { - constructor (port) { + constructor (port, opt) { this.connection = null this.port = port + this.opt = opt } start (callback) { @@ -25,7 +26,7 @@ class WebSocket { }) this.wsServer.on('request', (request) => { - if (!originIsAllowed(request.origin)) { + if (!originIsAllowed(request.origin, this)) { request.reject() console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.') return @@ -67,9 +68,8 @@ class WebSocket { } } -function originIsAllowed (origin) { - console.log('origin', origin) - return true +function originIsAllowed (origin, self) { + return origin === self.opt.remixIdeUrl } module.exports = WebSocket