mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
code clan up and tests
This commit is contained in:
parent
f40629e5ae
commit
1b16b46241
@ -6,7 +6,6 @@ const ObservableStore = require('obs-store')
|
|||||||
const filter = require('promise-filter')
|
const filter = require('promise-filter')
|
||||||
const encryptor = require('browser-passworder')
|
const encryptor = require('browser-passworder')
|
||||||
const normalizeAddress = require('./lib/sig-util').normalize
|
const normalizeAddress = require('./lib/sig-util').normalize
|
||||||
function noop () {}
|
|
||||||
// Keyrings:
|
// Keyrings:
|
||||||
const SimpleKeyring = require('./keyrings/simple')
|
const SimpleKeyring = require('./keyrings/simple')
|
||||||
const HdKeyring = require('./keyrings/hd')
|
const HdKeyring = require('./keyrings/hd')
|
||||||
@ -89,7 +88,6 @@ class KeyringController extends EventEmitter {
|
|||||||
currentFiat: this.configManager.getCurrentFiat(),
|
currentFiat: this.configManager.getCurrentFiat(),
|
||||||
conversionRate: this.configManager.getConversionRate(),
|
conversionRate: this.configManager.getConversionRate(),
|
||||||
conversionDate: this.configManager.getConversionDate(),
|
conversionDate: this.configManager.getConversionDate(),
|
||||||
// messageManager
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -319,7 +317,7 @@ class KeyringController extends EventEmitter {
|
|||||||
//
|
//
|
||||||
// Attempts to sign the provided @object msgParams.
|
// Attempts to sign the provided @object msgParams.
|
||||||
signMessage (msgParams) {
|
signMessage (msgParams) {
|
||||||
const address = normalize(msgParams.from)
|
const address = normalizeAddress(msgParams.from)
|
||||||
return this.getKeyringForAccount(address)
|
return this.getKeyringForAccount(address)
|
||||||
.then((keyring) => {
|
.then((keyring) => {
|
||||||
return keyring.signMessage(address, msgParams.data)
|
return keyring.signMessage(address, msgParams.data)
|
||||||
|
@ -11,7 +11,7 @@ module.exports = class MessageManager extends EventEmitter{
|
|||||||
|
|
||||||
getState() {
|
getState() {
|
||||||
return {
|
return {
|
||||||
unapprovedMsgs: this.unapprovedMsgs(),
|
unapprovedMsgs: this.getUnapprovedMsgs(),
|
||||||
messages: this.getMsgList(),
|
messages: this.getMsgList(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -21,22 +21,15 @@ module.exports = class MessageManager extends EventEmitter{
|
|||||||
}
|
}
|
||||||
|
|
||||||
get unapprovedMsgCount () {
|
get unapprovedMsgCount () {
|
||||||
return Object.keys(this.unapprovedMsgs()).length
|
return Object.keys(this.getUnapprovedMsgs()).length
|
||||||
}
|
}
|
||||||
|
|
||||||
unapprovedMsgs () {
|
getUnapprovedMsgs () {
|
||||||
let messages = this.getMsgList()
|
let messages = this.getMsgList()
|
||||||
return messages.filter(msg => msg.status === 'unapproved')
|
return messages.filter(msg => msg.status === 'unapproved')
|
||||||
.reduce((result, msg) => { result[msg.id] = msg; return result }, {})
|
.reduce((result, msg) => { result[msg.id] = msg; return result }, {})
|
||||||
}
|
}
|
||||||
|
|
||||||
_saveMsgList (msgList) {
|
|
||||||
this.emit('updateBadge')
|
|
||||||
let state = this.memStore.getState()
|
|
||||||
state.messages = msgList
|
|
||||||
this.memStore.putState(state)
|
|
||||||
}
|
|
||||||
|
|
||||||
addUnapprovedMessage (msgParams) {
|
addUnapprovedMessage (msgParams) {
|
||||||
// create txData obj with parameters and meta data
|
// create txData obj with parameters and meta data
|
||||||
var time = (new Date()).getTime()
|
var time = (new Date()).getTime()
|
||||||
@ -70,34 +63,30 @@ module.exports = class MessageManager extends EventEmitter{
|
|||||||
return matching.length > 0 ? matching[0] : null
|
return matching.length > 0 ? matching[0] : null
|
||||||
}
|
}
|
||||||
|
|
||||||
brodcastMessage (rawSig, msgId, status) {
|
|
||||||
this.emit(`${msgId}:finished`, {status, rawSig})
|
|
||||||
}
|
|
||||||
|
|
||||||
approveMessage (msgParams) {
|
approveMessage (msgParams) {
|
||||||
this.setMessageApproved(msgParams.metamaskId)
|
this.setMsgStatusApproved(msgParams.metamaskId)
|
||||||
return this.prepMsgForSigning(msgParams)
|
return this.prepMsgForSigning(msgParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
setMessageApproved (msgId) {
|
setMsgStatusApproved (msgId) {
|
||||||
this._setMsgStatus(msgId, 'approved')
|
this._setMsgStatus(msgId, 'approved')
|
||||||
}
|
}
|
||||||
|
|
||||||
prepMsgForSigning (msgParams) {
|
prepMsgForSigning (msgParams) {
|
||||||
delete msgParams.metamaskId
|
delete msgParams.metamaskId
|
||||||
return Promise.resolve(msgParams)
|
return Promise.resolve(msgParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
cancelMessage (msgId) {
|
|
||||||
// reject tx
|
|
||||||
// clean up
|
|
||||||
this.brodcastMessage(null, msgId, 'rejected')
|
|
||||||
this.rejectMsg(msgId)
|
|
||||||
}
|
|
||||||
|
|
||||||
rejectMsg (msgId) {
|
rejectMsg (msgId) {
|
||||||
|
this.brodcastMessage(null, msgId, 'rejected')
|
||||||
this._setMsgStatus(msgId, 'rejected')
|
this._setMsgStatus(msgId, 'rejected')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
brodcastMessage (rawSig, msgId, status) {
|
||||||
|
this.emit(`${msgId}:finished`, {status, rawSig})
|
||||||
|
}
|
||||||
|
// PRIVATE METHODS
|
||||||
|
|
||||||
_setMsgStatus (msgId, status) {
|
_setMsgStatus (msgId, status) {
|
||||||
let msg = this.getMsg(msgId)
|
let msg = this.getMsg(msgId)
|
||||||
if (msg) msg.status = status
|
if (msg) msg.status = status
|
||||||
@ -112,4 +101,13 @@ module.exports = class MessageManager extends EventEmitter{
|
|||||||
}
|
}
|
||||||
this._saveMsgList(messages)
|
this._saveMsgList(messages)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_saveMsgList (msgList) {
|
||||||
|
this.emit('updateBadge')
|
||||||
|
let state = this.memStore.getState()
|
||||||
|
state.messages = msgList
|
||||||
|
this.memStore.putState(state)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -224,7 +224,7 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
approveTransaction: txManager.approveTransaction.bind(txManager),
|
approveTransaction: txManager.approveTransaction.bind(txManager),
|
||||||
cancelTransaction: txManager.cancelTransaction.bind(txManager),
|
cancelTransaction: txManager.cancelTransaction.bind(txManager),
|
||||||
signMessage: this.signMessage.bind(this),
|
signMessage: this.signMessage.bind(this),
|
||||||
cancelMessage: messageManager.cancelMessage.bind(messageManager),
|
cancelMessage: messageManager.rejectMsg.bind(messageManager),
|
||||||
|
|
||||||
// notices
|
// notices
|
||||||
checkNotices: noticeController.updateNoticesList.bind(noticeController),
|
checkNotices: noticeController.updateNoticesList.bind(noticeController),
|
||||||
@ -369,31 +369,33 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
newUnsignedMessage (msgParams, cb) {
|
newUnsignedMessage (msgParams, cb) {
|
||||||
this.keyringController.getState()
|
let msgId = this.messageManager.addUnapprovedMessage(msgParams)
|
||||||
.then((state) => {
|
this.sendUpdate()
|
||||||
let msgId = this.messageManager.addUnapprovedMessage(msgParams)
|
this.opts.showUnconfirmedMessage()
|
||||||
this.sendUpdate()
|
this.messageManager.once(`${msgId}:finished`, (data) => {
|
||||||
state.isUnlocked ? this.opts.unlockAccountMessage() : this.opts.showUnconfirmedMessage()
|
switch (data.status) {
|
||||||
this.messageManager.once(`${msgId}:finished`, (data) => {
|
case 'approved':
|
||||||
switch (data.status) {
|
return cb(null, data.rawSig)
|
||||||
case 'approved':
|
case 'rejected':
|
||||||
return cb(null, data.rawSig)
|
return cb(new Error('MetaMask Message Signature: User denied transaction signature.'))
|
||||||
case 'rejected':
|
default:
|
||||||
return cb(new Error('MetaMask Tx Signature: User denied transaction signature.'))
|
return cb(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`))
|
||||||
default:
|
}
|
||||||
return cb(new Error(`MetaMask Tx Signature: Unknown problem: ${JSON.stringify(msgParams)}`))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
signMessage (msgParams, cb) {
|
signMessage (msgParams, cb) {
|
||||||
const msgId = msgParams.metamaskId
|
const msgId = msgParams.metamaskId
|
||||||
|
// sets the status op the message to 'approved'
|
||||||
|
// and removes the metamaskId for signing
|
||||||
return this.messageManager.approveMessage(msgParams)
|
return this.messageManager.approveMessage(msgParams)
|
||||||
.then((cleanMsgParams) => {
|
.then((cleanMsgParams) => {
|
||||||
|
// signs the message
|
||||||
return this.keyringController.signMessage(cleanMsgParams)
|
return this.keyringController.signMessage(cleanMsgParams)
|
||||||
})
|
})
|
||||||
.then((rawSig) => {
|
.then((rawSig) => {
|
||||||
|
// tells the listener that the message has been signed
|
||||||
|
// and can be returned to the dapp
|
||||||
this.messageManager.brodcastMessage(rawSig, msgId, 'approved')
|
this.messageManager.brodcastMessage(rawSig, msgId, 'approved')
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
cb()
|
cb()
|
||||||
|
98
test/unit/message-manager-test.js
Normal file
98
test/unit/message-manager-test.js
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
const assert = require('assert')
|
||||||
|
const extend = require('xtend')
|
||||||
|
const EventEmitter = require('events')
|
||||||
|
|
||||||
|
const MessageManger = require('../../app/scripts/lib/message-manager')
|
||||||
|
|
||||||
|
describe('Transaction Manager', function() {
|
||||||
|
let messageManager
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
messageManager = new MessageManger ()
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#getMsgList', function() {
|
||||||
|
it('when new should return empty array', function() {
|
||||||
|
var result = messageManager.getMsgList()
|
||||||
|
assert.ok(Array.isArray(result))
|
||||||
|
assert.equal(result.length, 0)
|
||||||
|
})
|
||||||
|
it('should also return transactions from local storage if any', function() {
|
||||||
|
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#_saveMsgList', function() {
|
||||||
|
it('saves the submitted data to the Msg list', function() {
|
||||||
|
var target = [{ foo: 'bar', metamaskNetworkId: 'unit test' }]
|
||||||
|
messageManager._saveMsgList(target)
|
||||||
|
var result = messageManager.getMsgList()
|
||||||
|
assert.equal(result[0].foo, 'bar')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#addMsg', function() {
|
||||||
|
it('adds a Msg returned in getMsgList', function() {
|
||||||
|
var Msg = { id: 1, status: 'approved', metamaskNetworkId: 'unit test' }
|
||||||
|
messageManager.addMsg(Msg)
|
||||||
|
var result = messageManager.getMsgList()
|
||||||
|
assert.ok(Array.isArray(result))
|
||||||
|
assert.equal(result.length, 1)
|
||||||
|
assert.equal(result[0].id, 1)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#setMsgStatusApproved', function() {
|
||||||
|
it('sets the Msg status to approved', function() {
|
||||||
|
var Msg = { id: 1, status: 'unapproved', metamaskNetworkId: 'unit test' }
|
||||||
|
messageManager.addMsg(Msg)
|
||||||
|
messageManager.setMsgStatusApproved(1)
|
||||||
|
var result = messageManager.getMsgList()
|
||||||
|
assert.ok(Array.isArray(result))
|
||||||
|
assert.equal(result.length, 1)
|
||||||
|
assert.equal(result[0].status, 'approved')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#rejectMsg', function() {
|
||||||
|
it('sets the Msg status to rejected', function() {
|
||||||
|
var Msg = { id: 1, status: 'unapproved', metamaskNetworkId: 'unit test' }
|
||||||
|
messageManager.addMsg(Msg)
|
||||||
|
messageManager.rejectMsg(1)
|
||||||
|
var result = messageManager.getMsgList()
|
||||||
|
assert.ok(Array.isArray(result))
|
||||||
|
assert.equal(result.length, 1)
|
||||||
|
assert.equal(result[0].status, 'rejected')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#_updateMsg', function() {
|
||||||
|
it('replaces the Msg with the same id', function() {
|
||||||
|
messageManager.addMsg({ id: '1', status: 'unapproved', metamaskNetworkId: 'unit test' })
|
||||||
|
messageManager.addMsg({ id: '2', status: 'approved', metamaskNetworkId: 'unit test' })
|
||||||
|
messageManager._updateMsg({ id: '1', status: 'blah', hash: 'foo', metamaskNetworkId: 'unit test' })
|
||||||
|
var result = messageManager.getMsg('1')
|
||||||
|
assert.equal(result.hash, 'foo')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#getUnapprovedMsgs', function() {
|
||||||
|
it('returns unapproved Msgs in a hash', function() {
|
||||||
|
messageManager.addMsg({ id: '1', status: 'unapproved', metamaskNetworkId: 'unit test' })
|
||||||
|
messageManager.addMsg({ id: '2', status: 'approved', metamaskNetworkId: 'unit test' })
|
||||||
|
let result = messageManager.getUnapprovedMsgs()
|
||||||
|
assert.equal(typeof result, 'object')
|
||||||
|
assert.equal(result['1'].status, 'unapproved')
|
||||||
|
assert.equal(result['2'], undefined)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('#getMsg', function() {
|
||||||
|
it('returns a Msg with the requested id', function() {
|
||||||
|
messageManager.addMsg({ id: '1', status: 'unapproved', metamaskNetworkId: 'unit test' })
|
||||||
|
messageManager.addMsg({ id: '2', status: 'approved', metamaskNetworkId: 'unit test' })
|
||||||
|
assert.equal(messageManager.getMsg('1').status, 'unapproved')
|
||||||
|
assert.equal(messageManager.getMsg('2').status, 'approved')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
@ -413,9 +413,9 @@ input.large-input {
|
|||||||
height: 24px;
|
height: 24px;
|
||||||
background: #4dffff;
|
background: #4dffff;
|
||||||
border: solid;
|
border: solid;
|
||||||
borderColor: #AEAEAE;
|
border-color: #AEAEAE;
|
||||||
borderWidth: 0.5px;
|
border-width: 0.5px;
|
||||||
borderRadius: 13px;
|
border-radius: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.edit-text {
|
.edit-text {
|
||||||
|
Loading…
Reference in New Issue
Block a user