Add signTypedData input validations

feature/default_network_editable
Dan Finlay 7 years ago
parent 176d03b2e8
commit 9bc80d998e
  1. 11
      app/scripts/lib/typed-message-manager.js
  2. 9
      app/scripts/metamask-controller.js

@ -1,6 +1,7 @@
const EventEmitter = require('events') const EventEmitter = require('events')
const ObservableStore = require('obs-store') const ObservableStore = require('obs-store')
const createId = require('./random-id') const createId = require('./random-id')
const assert = require('assert')
module.exports = class TypedMessageManager extends EventEmitter { module.exports = class TypedMessageManager extends EventEmitter {
@ -23,6 +24,8 @@ module.exports = class TypedMessageManager extends EventEmitter {
} }
addUnapprovedMessage (msgParams) { addUnapprovedMessage (msgParams) {
this.validateParams(msgParams)
log.debug(`TypedMessageManager addUnapprovedMessage: ${JSON.stringify(msgParams)}`) log.debug(`TypedMessageManager addUnapprovedMessage: ${JSON.stringify(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()
@ -41,6 +44,14 @@ module.exports = class TypedMessageManager extends EventEmitter {
return msgId return msgId
} }
validateParams (params) {
assert.equal(typeof params, 'object', 'Params should ben an object.')
assert.ok('data' in params, 'Params must include a data field.')
assert.ok('from' in params, 'Params must include a from field.')
assert.ok(Array.isArray(params.data), 'Data should be an array.')
assert.equal(typeof params.from, 'string', 'From field must be a string.')
}
addMsg (msg) { addMsg (msg) {
this.messages.push(msg) this.messages.push(msg)
this._saveMsgList() this._saveMsgList()

@ -566,11 +566,16 @@ module.exports = class MetamaskController extends EventEmitter {
} }
newUnsignedTypedMessage (msgParams, cb) { newUnsignedTypedMessage (msgParams, cb) {
const msgId = this.typedMessageManager.addUnapprovedMessage(msgParams) let msgId
try {
msgId = this.typedMessageManager.addUnapprovedMessage(msgParams)
this.sendUpdate() this.sendUpdate()
this.opts.showUnconfirmedMessage() this.opts.showUnconfirmedMessage()
} catch (e) {
return cb(e)
}
this.typedMessageManager.once(`${msgId}:finished`, (data) => { this.typedMessageManager.once(`${msgId}:finished`, (data) => {
console.log(data)
switch (data.status) { switch (data.status) {
case 'signed': case 'signed':
return cb(null, data.rawSig) return cb(null, data.rawSig)

Loading…
Cancel
Save