|
|
|
@ -1,5 +1,4 @@ |
|
|
|
|
import React, { Component } from 'react' |
|
|
|
|
import { inherits } from 'util' |
|
|
|
|
import { withRouter } from 'react-router-dom' |
|
|
|
|
import { compose } from 'recompose' |
|
|
|
|
import PropTypes from 'prop-types' |
|
|
|
@ -9,9 +8,106 @@ import { DEFAULT_ROUTE } from '../../../helpers/constants/routes' |
|
|
|
|
import { getMetaMaskAccounts } from '../../../selectors/selectors' |
|
|
|
|
import Button from '../../../components/ui/button' |
|
|
|
|
|
|
|
|
|
PrivateKeyImportView.contextTypes = { |
|
|
|
|
t: PropTypes.func, |
|
|
|
|
metricsEvent: PropTypes.func, |
|
|
|
|
class PrivateKeyImportView extends Component { |
|
|
|
|
static contextTypes = { |
|
|
|
|
t: PropTypes.func, |
|
|
|
|
metricsEvent: PropTypes.func, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static propTypes = { |
|
|
|
|
importNewAccount: PropTypes.func.isRequired, |
|
|
|
|
history: PropTypes.object.isRequired, |
|
|
|
|
displayWarning: PropTypes.func.isRequired, |
|
|
|
|
setSelectedAddress: PropTypes.func.isRequired, |
|
|
|
|
firstAddress: PropTypes.string.isRequired, |
|
|
|
|
error: PropTypes.node, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
createNewKeychain () { |
|
|
|
|
const input = document.getElementById('private-key-box') |
|
|
|
|
const privateKey = input.value |
|
|
|
|
const { importNewAccount, history, displayWarning, setSelectedAddress, firstAddress } = this.props |
|
|
|
|
|
|
|
|
|
importNewAccount('Private Key', [ privateKey ]) |
|
|
|
|
.then(({ selectedAddress }) => { |
|
|
|
|
if (selectedAddress) { |
|
|
|
|
this.context.metricsEvent({ |
|
|
|
|
eventOpts: { |
|
|
|
|
category: 'Accounts', |
|
|
|
|
action: 'Import Account', |
|
|
|
|
name: 'Imported Account with Private Key', |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
history.push(DEFAULT_ROUTE) |
|
|
|
|
displayWarning(null) |
|
|
|
|
} else { |
|
|
|
|
displayWarning('Error importing account.') |
|
|
|
|
this.context.metricsEvent({ |
|
|
|
|
eventOpts: { |
|
|
|
|
category: 'Accounts', |
|
|
|
|
action: 'Import Account', |
|
|
|
|
name: 'Error importing with Private Key', |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
setSelectedAddress(firstAddress) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
.catch(err => err && displayWarning(err.message || err)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
createKeyringOnEnter = (event) => { |
|
|
|
|
if (event.key === 'Enter') { |
|
|
|
|
event.preventDefault() |
|
|
|
|
this.createNewKeychain() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
render () { |
|
|
|
|
const { error, displayWarning } = this.props |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<div className="new-account-import-form__private-key"> |
|
|
|
|
<span className="new-account-create-form__instruction"> |
|
|
|
|
{this.context.t('pastePrivateKey')} |
|
|
|
|
</span> |
|
|
|
|
<div className="new-account-import-form__private-key-password-container"> |
|
|
|
|
<input |
|
|
|
|
className="new-account-import-form__input-password" |
|
|
|
|
type="password" |
|
|
|
|
id="private-key-box" |
|
|
|
|
onKeyPress={e => this.createKeyringOnEnter(e)} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
<div className="new-account-import-form__buttons"> |
|
|
|
|
<Button |
|
|
|
|
type="default" |
|
|
|
|
large |
|
|
|
|
className="new-account-create-form__button" |
|
|
|
|
onClick={() => { |
|
|
|
|
displayWarning(null) |
|
|
|
|
this.props.history.push(DEFAULT_ROUTE) |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
{this.context.t('cancel')} |
|
|
|
|
</Button> |
|
|
|
|
<Button |
|
|
|
|
type="secondary" |
|
|
|
|
large |
|
|
|
|
className="new-account-create-form__button" |
|
|
|
|
onClick={() => this.createNewKeychain()} |
|
|
|
|
> |
|
|
|
|
{this.context.t('import')} |
|
|
|
|
</Button> |
|
|
|
|
</div> |
|
|
|
|
{ |
|
|
|
|
error |
|
|
|
|
? <span className="error">{error}</span> |
|
|
|
|
: null |
|
|
|
|
} |
|
|
|
|
</div> |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export default compose( |
|
|
|
@ -36,94 +132,3 @@ function mapDispatchToProps (dispatch) { |
|
|
|
|
setSelectedAddress: (address) => dispatch(actions.setSelectedAddress(address)), |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inherits(PrivateKeyImportView, Component) |
|
|
|
|
function PrivateKeyImportView () { |
|
|
|
|
this.createKeyringOnEnter = this.createKeyringOnEnter.bind(this) |
|
|
|
|
Component.call(this) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PrivateKeyImportView.prototype.render = function PrivateKeyImportView () { |
|
|
|
|
const { error, displayWarning } = this.props |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<div className="new-account-import-form__private-key"> |
|
|
|
|
<span className="new-account-create-form__instruction"> |
|
|
|
|
{this.context.t('pastePrivateKey')} |
|
|
|
|
</span> |
|
|
|
|
<div className="new-account-import-form__private-key-password-container"> |
|
|
|
|
<input |
|
|
|
|
className="new-account-import-form__input-password" |
|
|
|
|
type="password" |
|
|
|
|
id="private-key-box" |
|
|
|
|
onKeyPress={e => this.createKeyringOnEnter(e)} |
|
|
|
|
/> |
|
|
|
|
</div> |
|
|
|
|
<div className="new-account-import-form__buttons"> |
|
|
|
|
<Button |
|
|
|
|
type="default" |
|
|
|
|
large |
|
|
|
|
className="new-account-create-form__button" |
|
|
|
|
onClick={() => { |
|
|
|
|
displayWarning(null) |
|
|
|
|
this.props.history.push(DEFAULT_ROUTE) |
|
|
|
|
}} |
|
|
|
|
> |
|
|
|
|
{this.context.t('cancel')} |
|
|
|
|
</Button> |
|
|
|
|
<Button |
|
|
|
|
type="secondary" |
|
|
|
|
large |
|
|
|
|
className="new-account-create-form__button" |
|
|
|
|
onClick={() => this.createNewKeychain()} |
|
|
|
|
> |
|
|
|
|
{this.context.t('import')} |
|
|
|
|
</Button> |
|
|
|
|
</div> |
|
|
|
|
{ |
|
|
|
|
error |
|
|
|
|
? <span className="error">{error}</span> |
|
|
|
|
: null |
|
|
|
|
} |
|
|
|
|
</div> |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
const { importNewAccount, history, displayWarning, setSelectedAddress, firstAddress } = this.props |
|
|
|
|
|
|
|
|
|
importNewAccount('Private Key', [ privateKey ]) |
|
|
|
|
.then(({ selectedAddress }) => { |
|
|
|
|
if (selectedAddress) { |
|
|
|
|
this.context.metricsEvent({ |
|
|
|
|
eventOpts: { |
|
|
|
|
category: 'Accounts', |
|
|
|
|
action: 'Import Account', |
|
|
|
|
name: 'Imported Account with Private Key', |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
history.push(DEFAULT_ROUTE) |
|
|
|
|
displayWarning(null) |
|
|
|
|
} else { |
|
|
|
|
displayWarning('Error importing account.') |
|
|
|
|
this.context.metricsEvent({ |
|
|
|
|
eventOpts: { |
|
|
|
|
category: 'Accounts', |
|
|
|
|
action: 'Import Account', |
|
|
|
|
name: 'Error importing with Private Key', |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
setSelectedAddress(firstAddress) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
.catch(err => err && displayWarning(err.message || err)) |
|
|
|
|
} |
|
|
|
|