Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Render personal_sign messages as utf-8 text #1177

Merged
merged 7 commits into from
Mar 7, 2017
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions app/scripts/lib/personal-message-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const EventEmitter = require('events')
const ObservableStore = require('obs-store')
const ethUtil = require('ethereumjs-util')
const createId = require('./random-id')
const hexRe = /^[0-9A-Fa-f]+$/g


module.exports = class PersonalMessageManager extends EventEmitter{
Expand All @@ -24,7 +25,8 @@ module.exports = class PersonalMessageManager extends EventEmitter{
}

addUnapprovedMessage (msgParams) {
msgParams.data = normalizeMsgData(msgParams.data)
log.debug(`PersonalMessageManager addUnapprovedMessage: ${JSON.stringify(msgParams)}`)
msgParams.data = this.normalizeMsgData(msgParams.data)
// create txData obj with parameters and meta data
var time = (new Date()).getTime()
var msgId = createId()
Expand Down Expand Up @@ -106,14 +108,18 @@ module.exports = class PersonalMessageManager extends EventEmitter{
this.emit('updateBadge')
}

}
normalizeMsgData(data) {
try {
const stripped = ethUtil.stripHexPrefix(data)
if (stripped.match(hexRe)) {
return stripped
}
} catch (e) {
log.debug(`Message was not hex encoded, interpreting as utf8.`)
}

function normalizeMsgData(data) {
if (data.slice(0, 2) === '0x') {
// data is already hex
return data
} else {
// data is unicode, convert to hex
return ethUtil.bufferToHex(new Buffer(data, 'utf8'))
}

}

25 changes: 25 additions & 0 deletions test/unit/components/binary-renderer-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
var assert = require('assert')
var BinaryRenderer = require('../../../ui/app/components/binary-renderer')

describe('BinaryRenderer', function() {

let binaryRenderer
const message = 'Hello, world!'
const buffer = new Buffer(message, 'utf8')
const hex = buffer.toString('hex')

beforeEach(function() {
binaryRenderer = new BinaryRenderer()
})

it('recovers message', function() {
const result = binaryRenderer.hexToText(hex)
assert.equal(result, message)
})


it('recovers message with hex prefix', function() {
const result = binaryRenderer.hexToText('0x' + hex)
assert.equal(result, message)
})
})
23 changes: 22 additions & 1 deletion test/unit/personal-message-manager-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const EventEmitter = require('events')

const PersonalMessageManager = require('../../app/scripts/lib/personal-message-manager')

describe('Transaction Manager', function() {
describe('Personal Message Manager', function() {
let messageManager

beforeEach(function() {
Expand Down Expand Up @@ -86,4 +86,25 @@ describe('Transaction Manager', function() {
assert.equal(messageManager.getMsg('2').status, 'approved')
})
})

describe('#normalizeMsgData', function() {
it('converts text to a utf8 buffer', function() {
var input = 'hello'
var output = messageManager.normalizeMsgData(input)
assert.equal(output, '0x68656c6c6f', 'predictably hex encoded')
})

it('tolerates a hex prefix', function() {
var input = '0x12'
var output = messageManager.normalizeMsgData(input)
assert.equal(output, '12', 'un modified')
})

it('tolerates normal hex', function() {
var input = '12'
var output = messageManager.normalizeMsgData(input)
assert.equal(output, '12', 'adds prefix')
})
})

})
43 changes: 43 additions & 0 deletions ui/app/components/binary-renderer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const ethUtil = require('ethereumjs-util')

module.exports = BinaryRenderer

inherits(BinaryRenderer, Component)
function BinaryRenderer () {
Component.call(this)
}

BinaryRenderer.prototype.render = function () {
const props = this.props
const { value } = props
const text = this.hexToText(value)

return (
h('textarea.font-small', {
readOnly: true,
style: {
width: '315px',
maxHeight: '210px',
resize: 'none',
border: 'none',
background: 'white',
padding: '3px',
},
defaultValue: text,
})
)
}

BinaryRenderer.prototype.hexToText = function (hex) {
try {
const stripped = ethUtil.stripHexPrefix(hex)
const buff = Buffer.from(stripped, 'hex')
return buff.toString('utf8')
} catch (e) {
return hex
}
}

15 changes: 3 additions & 12 deletions ui/app/components/pending-personal-msg-details.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const h = require('react-hyperscript')
const inherits = require('util').inherits

const AccountPanel = require('./account-panel')
const BinaryRenderer = require('./binary-renderer')

module.exports = PendingMsgDetails

Expand All @@ -21,6 +22,7 @@ PendingMsgDetails.prototype.render = function () {
var account = state.accounts[address] || { address: address }

var { data } = msgParams
console.dir({ msgParams })
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

plz remove


return (
h('div', {
Expand All @@ -41,18 +43,7 @@ PendingMsgDetails.prototype.render = function () {
// message data
h('div', [
h('label.font-small', { style: { display: 'block' } }, 'MESSAGE'),
h('textarea.font-small', {
readOnly: true,
style: {
width: '315px',
maxHeight: '210px',
resize: 'none',
border: 'none',
background: 'white',
padding: '3px',
},
defaultValue: data,
}),
h(BinaryRenderer, { value: data }),
]),

])
Expand Down