diff options
Diffstat (limited to 'ui/app/first-time/restore-vault.js')
-rw-r--r-- | ui/app/first-time/restore-vault.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/ui/app/first-time/restore-vault.js b/ui/app/first-time/restore-vault.js new file mode 100644 index 000000000..55041e8c0 --- /dev/null +++ b/ui/app/first-time/restore-vault.js @@ -0,0 +1,116 @@ +const inherits = require('util').inherits +const Component = require('react').Component +const connect = require('react-redux').connect +const h = require('react-hyperscript') +const actions = require('../actions') + +module.exports = connect(mapStateToProps)(RestoreVaultScreen) + + +inherits(RestoreVaultScreen, Component) +function RestoreVaultScreen() { + Component.call(this) +} + +function mapStateToProps(state) { + return { + warning: state.appState.warning, + } +} + + +RestoreVaultScreen.prototype.render = function() { + var state = this.props + return ( + + h('.initialize-screen.flex-column.flex-center.flex-grow', [ + + // subtitle and nav + h('.section-title.flex-row.flex-center', [ + h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', { + onClick: this.showInitializeMenu.bind(this), + }), + h('h2.page-subtitle', 'Restore Vault'), + ]), + + // wallet seed entry + h('h3', 'Wallet Seed'), + h('textarea.twelve-word-phrase', { + placeholder: 'Enter your secret twelve word phrase here to restore your vault.' + }), + + // password + h('label', { + htmlFor: 'password-box', + }, 'New Password (min 8 chars):'), + + h('input', { + type: 'password', + id: 'password-box', + }), + + // confirm password + h('label', { + htmlFor: 'password-box-confirm', + }, 'Confirm Password:'), + + h('input', { + type: 'password', + id: 'password-box-confirm', + onKeyPress: this.onMaybeCreate.bind(this), + }), + + (state.warning) && ( + h('span.error.in-progress-notification', state.warning) + ), + + // submit + h('button.btn-thin', { + onClick: this.restoreVault.bind(this), + }, 'I\'ve double checked the 12 word phrase.'), + + ]) + + ) +} + +RestoreVaultScreen.prototype.showInitializeMenu = function() { + this.props.dispatch(actions.showInitializeMenu()) +} + +RestoreVaultScreen.prototype.onMaybeCreate = function(event) { + if (event.key === 'Enter') { + this.restoreVault() + } +} + +RestoreVaultScreen.prototype.restoreVault = function(){ + // check password + var passwordBox = document.getElementById('password-box') + var password = passwordBox.value + var passwordConfirmBox = document.getElementById('password-box-confirm') + var passwordConfirm = passwordConfirmBox.value + if (password.length < 8) { + this.warning = 'Password not long enough' + + this.props.dispatch(actions.displayWarning(this.warning)) + return + } + if (password !== passwordConfirm) { + this.warning = 'Passwords don\'t match' + this.props.dispatch(actions.displayWarning(this.warning)) + return + } + // check seed + var seedBox = document.querySelector('textarea.twelve-word-phrase') + var seed = seedBox.value.trim() + if (seed.split(' ').length !== 12) { + this.warning = 'seed phrases are 12 words long' + this.props.dispatch(actions.displayWarning(this.warning)) + return + } + // submit + this.warning = null + this.props.dispatch(actions.displayWarning(this.warning)) + this.props.dispatch(actions.recoverFromSeed(password, seed)) +} |