aboutsummaryrefslogtreecommitdiffstats
path: root/library/controller.js
diff options
context:
space:
mode:
authorfrankiebee <frankie.diamond@gmail.com>2017-03-29 09:02:08 +0800
committerfrankiebee <frankie.diamond@gmail.com>2017-03-29 09:02:08 +0800
commit79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd (patch)
tree5b08ce8a990ae2b33ff7d5a81b17fcfe0130a658 /library/controller.js
parent282775c52f558bbd90d4d0a1706a835dde6c3202 (diff)
downloadtangerine-wallet-browser-79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd.tar
tangerine-wallet-browser-79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd.tar.gz
tangerine-wallet-browser-79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd.tar.bz2
tangerine-wallet-browser-79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd.tar.lz
tangerine-wallet-browser-79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd.tar.xz
tangerine-wallet-browser-79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd.tar.zst
tangerine-wallet-browser-79248ae5cd3fb1314c5a7ff71c05f9dbe7b3a4cd.zip
WIP: Untrusted external connections eg: dapps
Diffstat (limited to 'library/controller.js')
-rw-r--r--library/controller.js192
1 files changed, 180 insertions, 12 deletions
diff --git a/library/controller.js b/library/controller.js
index f0aa7172c..cbba9584a 100644
--- a/library/controller.js
+++ b/library/controller.js
@@ -1,13 +1,181 @@
-// const SWcontroller = require('./sw-controller')
-// const SwStream = require('sw-stream/lib/sw-stream.js')
-// const startPopup = require('../app/scripts/popup-core')
-
-// console.log('outside:open')
-// const background = new SWcontroller({
-// fileName: 'sw-build.js',
-// })
-// background.on('ready', (readSw) => {
-// startPopup(SwStream(background.controller))
-// })
-// background.startWorker()
+const ParentStream = require('iframe-stream').ParentStream
+const SWcontroller = require('./sw-controller')
+const SwStream = require('sw-stream/lib/sw-stream.js')
+const SetupUntrustedComunication = ('./lib/setup-untrusted-connection.js')
+const background = new SWcontroller({
+ fileName: '/popup/sw-build.js',
+})
+
+background.on('ready', (readSw) => {
+ // var inpageProvider = new MetamaskInpageProvider(SwStream(background.controller))
+ let pageStream = new ParentStream()
+ let swStream = SwStream(background.controller)
+ pageStream.pipe(swStream).pipe(pageStream)
+})
+
+background.on('error', console.error)
+background.startWorker()
+
console.log('hello from controller')
+/*
+const urlUtil = require('url')
+const extend = require('xtend')
+const Dnode = require('dnode')
+const eos = require('end-of-stream')
+const ParentStream = require('iframe-stream').ParentStream
+const PortStream = require('../app/scripts/lib/port-stream.js')
+const notification = require('../app/scripts/lib/notifications.js')
+const messageManager = require('../app/scripts/lib/message-manager')
+const setupMultiplex = require('../app/scripts/lib/stream-utils.js').setupMultiplex
+const MetamaskController = require('../app/scripts/metamask-controller')
+const extension = require('../app/scripts/lib/extension')
+
+const STORAGE_KEY = 'metamask-config'
+
+
+initializeZeroClient()
+
+function initializeZeroClient() {
+
+ const controller = new MetamaskController({
+ // User confirmation callbacks:
+ showUnconfirmedMessage,
+ unlockAccountMessage,
+ showUnapprovedTx,
+ // Persistence Methods:
+ setData,
+ loadData,
+ })
+ const idStore = controller.idStore
+
+ function unlockAccountMessage () {
+ console.log('notif stub - unlockAccountMessage')
+ }
+
+ function showUnconfirmedMessage (msgParams, msgId) {
+ console.log('notif stub - showUnconfirmedMessage')
+ }
+
+ function showUnapprovedTx (txParams, txData, onTxDoneCb) {
+ console.log('notif stub - showUnapprovedTx')
+ }
+
+ //
+ // connect to other contexts
+ //
+
+ var connectionStream = new ParentStream()
+
+ connectRemote(connectionStream, getParentHref())
+
+ function connectRemote (connectionStream, originDomain) {
+ var isMetaMaskInternalProcess = (originDomain === '127.0.0.1:9001')
+ if (isMetaMaskInternalProcess) {
+ // communication with popup
+ setupTrustedCommunication(connectionStream, 'MetaMask')
+ } else {
+ // communication with page
+ setupUntrustedCommunication(connectionStream, originDomain)
+ }
+ }
+
+ function setupUntrustedCommunication (connectionStream, originDomain) {
+ // setup multiplexing
+ var mx = setupMultiplex(connectionStream)
+ // connect features
+ controller.setupProviderConnection(mx.createStream('provider'), originDomain)
+ controller.setupPublicConfig(mx.createStream('publicConfig'))
+ }
+
+ function setupTrustedCommunication (connectionStream, originDomain) {
+ // setup multiplexing
+ var mx = setupMultiplex(connectionStream)
+ // connect features
+ setupControllerConnection(mx.createStream('controller'))
+ controller.setupProviderConnection(mx.createStream('provider'), originDomain)
+ }
+
+ //
+ // remote features
+ //
+
+ function setupControllerConnection (stream) {
+ controller.stream = stream
+ var api = controller.getApi()
+ var dnode = Dnode(api)
+ stream.pipe(dnode).pipe(stream)
+ dnode.on('remote', (remote) => {
+ // push updates to popup
+ controller.ethStore.on('update', controller.sendUpdate.bind(controller))
+ controller.listeners.push(remote)
+ idStore.on('update', controller.sendUpdate.bind(controller))
+
+ // teardown on disconnect
+ eos(stream, () => {
+ controller.ethStore.removeListener('update', controller.sendUpdate.bind(controller))
+ })
+ })
+ }
+
+ function loadData () {
+ var oldData = getOldStyleData()
+ var newData
+ try {
+ newData = JSON.parse(window.localStorage[STORAGE_KEY])
+ } catch (e) {}
+
+ var data = extend({
+ meta: {
+ version: 0,
+ },
+ data: {
+ config: {
+ provider: {
+ type: 'testnet',
+ },
+ },
+ },
+ }, oldData || null, newData || null)
+ return data
+ }
+
+ function getOldStyleData () {
+ var config, wallet, seedWords
+
+ var result = {
+ meta: { version: 0 },
+ data: {},
+ }
+
+ try {
+ config = JSON.parse(window.localStorage['config'])
+ result.data.config = config
+ } catch (e) {}
+ try {
+ wallet = JSON.parse(window.localStorage['lightwallet'])
+ result.data.wallet = wallet
+ } catch (e) {}
+ try {
+ seedWords = window.localStorage['seedWords']
+ result.data.seedWords = seedWords
+ } catch (e) {}
+
+ return result
+ }
+
+ function setData (data) {
+ window.localStorage[STORAGE_KEY] = JSON.stringify(data)
+ }
+
+ function getParentHref(){
+ try {
+ var parentLocation = window.parent.location
+ return parentLocation.hostname + ':' + parentLocation.port
+ } catch (err) {
+ return 'unknown'
+ }
+ }
+
+}
+
+*/