// Copyright 2015, 2016 Ethcore (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import React, { Component, PropTypes } from 'react'; import ContentClear from 'material-ui/svg-icons/content/clear'; import CheckIcon from 'material-ui/svg-icons/navigation/check'; import SendIcon from 'material-ui/svg-icons/content/send'; import { Tabs, Tab } from 'material-ui/Tabs'; import Paper from 'material-ui/Paper'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { showSnackbar } from '../../redux/providers/snackbarActions'; import Form, { Input } from '../../ui/Form'; import { Button, Modal, IdentityName, IdentityIcon } from '../../ui'; import styles from './passwordManager.css'; const TEST_ACTION = 'TEST_ACTION'; const CHANGE_ACTION = 'CHANGE_ACTION'; class PasswordManager extends Component { static contextTypes = { api: PropTypes.object.isRequired } static propTypes = { account: PropTypes.object.isRequired, showSnackbar: PropTypes.func.isRequired, onClose: PropTypes.func } state = { action: TEST_ACTION, waiting: false, showMessage: false, message: { value: '', success: true }, currentPass: '', newPass: '', repeatNewPass: '', repeatValid: true, passwordHint: this.props.account.meta && this.props.account.meta.passwordHint || '' } render () { return ( { this.renderAccount() } { this.renderPage() } { this.renderMessage() } ); } renderMessage () { const { message, showMessage } = this.state; const style = message.success ? { backgroundColor: 'rgba(174, 213, 129, 0.75)' } : { backgroundColor: 'rgba(229, 115, 115, 0.75)' }; const classes = [ styles.message ]; if (!showMessage) { classes.push(styles.hideMessage); } return ( { message.value } ); } renderAccount () { const { account } = this.props; const { address, meta } = account; const passwordHint = meta && meta.passwordHint ? ( Hint { meta.passwordHint } ) : null; return (
{ address } { passwordHint }
); } renderPage () { const { account } = this.props; const { waiting, repeatValid } = this.state; const disabled = !!waiting; const repeatError = repeatValid ? null : 'the two passwords differ'; const { meta } = account; const passwordHint = meta && meta.passwordHint || ''; return (
); } renderDialogActions () { const { onClose } = this.props; const { action, waiting, repeatValid } = this.state; const cancelBtn = (