This reverts commit f5265c24ab
.
Apparently it wasn't unnecessary after all. The Lock page served a few
different purposes. First, it was used to safeguard the seed phrase, in
case the user was interrupted after setting a password. Otherwise
anyone could open MetaMask and see the seed phrase without verifying
the password. Second, the submit function for the initialization unlock
screen also returned the seed phrase, so that it could be set in React
state for the confirmation step. Third, the submit function was also
responsible for navigating back to the seed phrase reveal page.
Removing the lock page had the effect of causing an infinite render
loop if onboarding was interrupted in the "Create" flow after setting
a password but before seed phrase confirmation. That redirect loop has
now been fixed.
feature/default_network_editable
parent
a49a4a066c
commit
4ef908aeb2
@ -0,0 +1 @@ |
|||||||
|
export { default } from './lock.container' |
@ -0,0 +1,26 @@ |
|||||||
|
import React, { PureComponent } from 'react' |
||||||
|
import PropTypes from 'prop-types' |
||||||
|
import Loading from '../../components/ui/loading-screen' |
||||||
|
import { DEFAULT_ROUTE } from '../../helpers/constants/routes' |
||||||
|
|
||||||
|
export default class Lock extends PureComponent { |
||||||
|
static propTypes = { |
||||||
|
history: PropTypes.object, |
||||||
|
isUnlocked: PropTypes.bool, |
||||||
|
lockMetamask: PropTypes.func, |
||||||
|
} |
||||||
|
|
||||||
|
componentDidMount() { |
||||||
|
const { lockMetamask, isUnlocked, history } = this.props |
||||||
|
|
||||||
|
if (isUnlocked) { |
||||||
|
lockMetamask().then(() => history.push(DEFAULT_ROUTE)) |
||||||
|
} else { |
||||||
|
history.replace(DEFAULT_ROUTE) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
render() { |
||||||
|
return <Loading /> |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
import { compose } from 'redux' |
||||||
|
import { connect } from 'react-redux' |
||||||
|
import { withRouter } from 'react-router-dom' |
||||||
|
import { lockMetamask } from '../../store/actions' |
||||||
|
import Lock from './lock.component' |
||||||
|
|
||||||
|
const mapStateToProps = (state) => { |
||||||
|
const { |
||||||
|
metamask: { isUnlocked }, |
||||||
|
} = state |
||||||
|
|
||||||
|
return { |
||||||
|
isUnlocked, |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const mapDispatchToProps = (dispatch) => { |
||||||
|
return { |
||||||
|
lockMetamask: () => dispatch(lockMetamask()), |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export default compose( |
||||||
|
withRouter, |
||||||
|
connect(mapStateToProps, mapDispatchToProps), |
||||||
|
)(Lock) |
@ -0,0 +1,40 @@ |
|||||||
|
import assert from 'assert' |
||||||
|
import React from 'react' |
||||||
|
import sinon from 'sinon' |
||||||
|
import { mountWithRouter } from '../../../../../test/lib/render-helpers' |
||||||
|
import Lock from '..' |
||||||
|
|
||||||
|
describe('Lock', function () { |
||||||
|
it('replaces history with default route when isUnlocked false', function () { |
||||||
|
const props = { |
||||||
|
isUnlocked: false, |
||||||
|
history: { |
||||||
|
replace: sinon.spy(), |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
mountWithRouter(<Lock.WrappedComponent {...props} />) |
||||||
|
|
||||||
|
assert.equal(props.history.replace.getCall(0).args[0], '/') |
||||||
|
}) |
||||||
|
|
||||||
|
it('locks and pushes history with default route when isUnlocked true', function (done) { |
||||||
|
const props = { |
||||||
|
isUnlocked: true, |
||||||
|
lockMetamask: sinon.stub(), |
||||||
|
history: { |
||||||
|
push: sinon.spy(), |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
props.lockMetamask.resolves() |
||||||
|
|
||||||
|
mountWithRouter(<Lock.WrappedComponent {...props} />) |
||||||
|
|
||||||
|
assert(props.lockMetamask.calledOnce) |
||||||
|
setImmediate(() => { |
||||||
|
assert.equal(props.history.push.getCall(0).args[0], '/') |
||||||
|
done() |
||||||
|
}) |
||||||
|
}) |
||||||
|
}) |
Loading…
Reference in new issue