mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-24 02:58:09 +01:00
b52346388b
Now any strategy for importing a private key that can be described as a pure function can be very easily turned into a MetaMask import strategy. I've created a generic and reusable UI action called `importNewAccount(strategy, args)`. The `strategy` is a unique identifier defined in `app/scripts/account-import-strategies`, and the `args` will be passed to the member of the `strategies` array whose key matches the strategy string. Strategies return private key hex strings, and are used by the metamask-controller to create a new keyring, and select that new account, before calling back. This also implements @frankiebee's idea of showing the imported account when it's been imported (my oversight!). This commit only moves us to this architecture, keeping feature parity for private key import, but has some untested code for importing geth-style JSON files as well!
69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
const inherits = require('util').inherits
|
|
const Component = require('react').Component
|
|
const h = require('react-hyperscript')
|
|
const connect = require('react-redux').connect
|
|
const actions = require('../../actions')
|
|
|
|
module.exports = connect(mapStateToProps)(PrivateKeyImportView)
|
|
|
|
function mapStateToProps (state) {
|
|
return {
|
|
error: state.appState.warning,
|
|
}
|
|
}
|
|
|
|
inherits(PrivateKeyImportView, Component)
|
|
function PrivateKeyImportView () {
|
|
Component.call(this)
|
|
}
|
|
|
|
PrivateKeyImportView.prototype.render = function () {
|
|
const { error } = this.props
|
|
|
|
return (
|
|
h('div', {
|
|
style: {
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
padding: '5px 15px 0px 15px',
|
|
},
|
|
}, [
|
|
h('span', 'Paste your private key string here'),
|
|
|
|
h('input.large-input.letter-spacey', {
|
|
type: 'password',
|
|
id: 'private-key-box',
|
|
onKeyPress: this.createKeyringOnEnter.bind(this),
|
|
style: {
|
|
width: 260,
|
|
marginTop: 12,
|
|
},
|
|
}),
|
|
|
|
h('button.primary', {
|
|
onClick: this.createNewKeychain.bind(this),
|
|
style: {
|
|
margin: 12,
|
|
},
|
|
}, 'Import'),
|
|
|
|
error ? h('span.warning', error) : null,
|
|
])
|
|
)
|
|
}
|
|
|
|
PrivateKeyImportView.prototype.createKeyringOnEnter = function (event) {
|
|
if (event.key === 'Enter') {
|
|
event.preventDefault()
|
|
this.createNewKeychain()
|
|
}
|
|
}
|
|
|
|
PrivateKeyImportView.prototype.createNewKeychain = function () {
|
|
const input = document.getElementById('private-key-box')
|
|
const privateKey = input.value
|
|
this.props.dispatch(actions.importNewAccount('Private Key', [ privateKey ]))
|
|
}
|
|
|