// Copyright 2015-2017 Parity Technologies (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 { observer } from 'mobx-react'; import Account from '../Account'; import TransactionPendingForm from '../TransactionPendingForm'; import RequestOrigin from '../RequestOrigin'; import styles from './signRequest.css'; function isAscii (data) { for (var i = 2; i < data.length; i += 2) { let n = parseInt(data.substr(i, 2), 16); if (n < 32 || n >= 128) { return false; } } return true; } @observer export default class SignRequest extends Component { static contextTypes = { api: PropTypes.object }; static propTypes = { address: PropTypes.string.isRequired, data: PropTypes.string.isRequired, id: PropTypes.object.isRequired, isFinished: PropTypes.bool.isRequired, isTest: PropTypes.bool.isRequired, store: PropTypes.object.isRequired, className: PropTypes.string, focus: PropTypes.bool, isSending: PropTypes.bool, onConfirm: PropTypes.func, onReject: PropTypes.func, origin: PropTypes.any, status: PropTypes.string }; static defaultProps = { focus: false, origin: { type: 'unknown', details: '' } }; componentWillMount () { const { address, store } = this.props; store.fetchBalance(address); } render () { const { className } = this.props; return (
{ this.renderDetails() } { this.renderActions() }
); } renderAsciiDetails (ascii) { return (

{ascii}

); } renderBinaryDetails (data) { return (

(Unknown binary data)

); } renderDetails () { const { api } = this.context; const { address, isTest, store, data, origin } = this.props; const { balances, externalLink } = store; const balance = balances[address]; if (!balance) { return
; } return (

A request to sign data using your account:

{ isAscii(data) ? this.renderAsciiDetails(api.util.hexToAscii(data)) : this.renderBinaryDetails(data) }

WARNING: This consequences of doing this may be grave. Confirm the request only if you are sure.

); } renderActions () { const { address, focus, isFinished, status } = this.props; if (isFinished) { if (status === 'confirmed') { return (
Confirmed
); } return (
Rejected
); } return ( ); } onConfirm = (data) => { const { id } = this.props; const { password } = data; this.props.onConfirm({ id, password }); } onReject = () => { this.props.onReject(this.props.id); } }