aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/components/modals/export-private-key-modal.js
blob: b1d55178138b31b612ccc3dc45b0fcc5db888cae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const Component = require('react').Component
const h = require('react-hyperscript')
const inherits = require('util').inherits
const connect = require('react-redux').connect
const ethUtil = require('ethereumjs-util')
const actions = require('../../actions')
const AccountModalContainer = require('./account-modal-container')
const { getSelectedIdentity } = require('../../selectors')
const ReadOnlyInput = require('../readonly-input')

function mapStateToProps (state) {
  return {
    warning: state.appState.warning,
    privateKey: state.appState.accountDetail.privateKey,
    network: state.metamask.network,
    selectedIdentity: getSelectedIdentity(state),
  }
}

function mapDispatchToProps (dispatch) {
  return {
    exportAccount: (password, address) => dispatch(actions.exportAccount(password, address)),
    hideModal: () => dispatch(actions.hideModal()),
  }
}

inherits(ExportPrivateKeyModal, Component)
function ExportPrivateKeyModal () {
  Component.call(this)

  this.state = {
    password: ''
  }
}

module.exports = connect(mapStateToProps, mapDispatchToProps)(ExportPrivateKeyModal)

ExportPrivateKeyModal.prototype.renderPasswordLabel = function (privateKey) {
  return h('span.private-key-password-label', privateKey
    ? 'This is your private key (click to copy)'
    : 'Type Your Password'
  )
}

ExportPrivateKeyModal.prototype.renderPasswordInput = function (privateKey) {
  const plainKey = privateKey && ethUtil.stripHexPrefix(privateKey)

  return privateKey
    ? h(ReadOnlyInput, {
        wrapperClass: 'private-key-password-display-wrapper',
        inputClass: 'private-key-password-display-textarea',
        textarea: true,
        value: plainKey,
      })
    : h('input.private-key-password-input', {
      type: 'password',
      placeholder: 'Type password',
      onChange: event => this.setState({ password: event.target.value })
    })
}

ExportPrivateKeyModal.prototype.renderButton = function (className, onClick, label) {
  return h('button', {
    className,
    onClick,
  }, label)
}

ExportPrivateKeyModal.prototype.renderButtons = function (privateKey, password, address) {
  const { hideModal, exportAccount } = this.props

  return h('div.export-private-key-buttons', {}, [
    !privateKey && this.renderButton('btn-clear btn-cancel', () => hideModal(), 'Cancel'),

    (privateKey
      ? this.renderButton('btn-clear', () => hideModal(), 'Done')
      : this.renderButton('btn-clear', () => exportAccount(this.state.password, address), 'Download')
    ),

  ])
}

ExportPrivateKeyModal.prototype.render = function () {
  const {
    selectedIdentity,
    network,
    privateKey,
    warning,
  } = this.props
  const { name, address } = selectedIdentity

  return h(AccountModalContainer, {}, [

      h('span.account-name', name),

      h(ReadOnlyInput, {
        wrapperClass: 'ellip-address-wrapper',
        inputClass: 'qr-ellip-address ellip-address',
        value: address,
      }),

      h('div.account-modal-divider'),
      
      h('span.modal-body-title', 'Download Private Keys'),

      h('div.private-key-password', {}, [
        this.renderPasswordLabel(privateKey),

        this.renderPasswordInput(privateKey),

        !warning ? null : h('span.private-key-password-error', warning),
      ]),

      h('div.private-key-password-warning', `Warning: Never disclose this key.
        Anyone with your private keys can take steal any assets held in your
        account.`
      ),

      this.renderButtons(privateKey, this.state.password, address),
      
  ])
}