From 1422366ad5308f4e1f7601ef08f97e2be1201c58 Mon Sep 17 00:00:00 2001 From: Juan Cortes Ross Date: Thu, 31 Jan 2019 17:28:03 +0100 Subject: [PATCH] Missing component --- src/components/SettingsPage/SocketExport.js | 94 +++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/components/SettingsPage/SocketExport.js diff --git a/src/components/SettingsPage/SocketExport.js b/src/components/SettingsPage/SocketExport.js new file mode 100644 index 00000000..34b81c5b --- /dev/null +++ b/src/components/SettingsPage/SocketExport.js @@ -0,0 +1,94 @@ +// @flow + +import React, { PureComponent } from 'react' +import WebSocket from 'ws' +import IP from 'ip' +import { createStructuredSelector } from 'reselect' +import { activeAccountsSelector } from 'reducers/accounts' +import { exportSettingsSelector } from 'reducers/settings' +import { encode } from '@ledgerhq/live-common/lib/cross' +import connect from 'react-redux/es/connect/connect' +import Button from '../base/Button' +import QRCode from '../base/QRCode' + +type Props = { + accounts: *, + settings: *, +} + +type State = { + active: boolean, +} + +const mapStateToProps = createStructuredSelector({ + accounts: activeAccountsSelector, + settings: exportSettingsSelector, +}) + +class SocketExport extends PureComponent { + state = { + active: false, + } + + componentWillMount() { + this.resetServer() + } + + componentDidUpdate() { + if (!this.state.active) return + if (!this.server) { + this.resetServer() + } + } + + componentWillUnmount() { + if (this.server) this.server.close() + } + + resetServer = () => { + this.server = new WebSocket.Server({ port: 1234 }) + + const { accounts, settings } = this.props + + const data = encode({ + accounts, + settings, + exporterName: 'desktop', + exporterVersion: __APP_VERSION__, + }) + + // Secret handshake to avoid intruders + this.secret = Math.random() + .toString(36) + .slice(2) + + if (this.server) { + this.server.on('connection', ws => { + ws.on('message', message => { + if (message === this.secret) { + ws.send(data) + ws.close() + this.setState({ active: false }) + this.server = undefined + } + }) + }) + } + } + + secret: string + server: * + canvas = React.createRef() + + render() { + return this.state.active ? ( + + ) : ( + + ) + } +} + +export default connect(mapStateToProps)(SocketExport)