2017-06-29 23:03:11 +00:00
|
|
|
// @flow
|
|
|
|
import React, { Component } from 'react';
|
|
|
|
import translate from 'translations';
|
|
|
|
import { isValidPrivKey } from 'libs/validators';
|
|
|
|
|
2017-07-16 21:02:13 +00:00
|
|
|
export type PrivateKeyValue = {
|
|
|
|
key: string,
|
|
|
|
password: string,
|
2017-07-04 03:21:19 +00:00
|
|
|
valid: boolean
|
2017-06-29 23:03:11 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
function fixPkey(key) {
|
2017-07-04 03:21:19 +00:00
|
|
|
if (key.indexOf('0x') === 0) {
|
|
|
|
return key.slice(2);
|
|
|
|
}
|
|
|
|
return key;
|
2017-06-29 23:03:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export default class PrivateKeyDecrypt extends Component {
|
2017-07-04 03:21:19 +00:00
|
|
|
props: {
|
2017-07-16 21:02:13 +00:00
|
|
|
value: PrivateKeyValue,
|
|
|
|
onChange: (value: PrivateKeyValue) => void,
|
2017-07-04 03:21:19 +00:00
|
|
|
onUnlock: () => void
|
|
|
|
};
|
2017-06-29 23:03:11 +00:00
|
|
|
|
2017-07-04 03:21:19 +00:00
|
|
|
render() {
|
|
|
|
const { key, password } = this.props.value;
|
|
|
|
const fixedPkey = fixPkey(key);
|
|
|
|
const isValid = isValidPrivKey(fixedPkey.length);
|
|
|
|
const isPassRequired = fixedPkey.length > 64;
|
2017-06-29 23:03:11 +00:00
|
|
|
|
2017-07-04 03:21:19 +00:00
|
|
|
return (
|
|
|
|
<section className="col-md-4 col-sm-6">
|
|
|
|
<div id="selectedTypeKey">
|
|
|
|
<h4>
|
|
|
|
{translate('ADD_Radio_3')}
|
|
|
|
</h4>
|
|
|
|
<div className="form-group">
|
|
|
|
<textarea
|
|
|
|
id="aria-private-key"
|
|
|
|
className={`form-control ${isValid ? 'is-valid' : 'is-invalid'}`}
|
|
|
|
value={key}
|
|
|
|
onChange={this.onPkeyChange}
|
|
|
|
onKeyDown={this.onKeyDown}
|
|
|
|
placeholder={translate('x_PrivKey2')}
|
|
|
|
rows="4"
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
{isValid &&
|
|
|
|
isPassRequired &&
|
|
|
|
<div className="form-group">
|
|
|
|
<p>
|
|
|
|
{translate('ADD_Label_3')}
|
|
|
|
</p>
|
|
|
|
<input
|
|
|
|
className={`form-control ${password.length > 0
|
|
|
|
? 'is-valid'
|
|
|
|
: 'is-invalid'}`}
|
|
|
|
value={password}
|
|
|
|
onChange={this.onPasswordChange}
|
|
|
|
onKeyDown={this.onKeyDown}
|
|
|
|
placeholder={translate('x_Password')}
|
|
|
|
type="password"
|
|
|
|
/>
|
|
|
|
</div>}
|
|
|
|
</div>
|
|
|
|
</section>
|
|
|
|
);
|
|
|
|
}
|
2017-06-29 23:03:11 +00:00
|
|
|
|
2017-07-04 03:21:19 +00:00
|
|
|
onPkeyChange = (e: SyntheticInputEvent) => {
|
|
|
|
const fixedPkey = fixPkey(e.target.value);
|
|
|
|
const isValid = isValidPrivKey(fixedPkey.length);
|
|
|
|
const isPassRequired = fixedPkey.length > 64;
|
|
|
|
const valid =
|
|
|
|
isValid && (isPassRequired ? this.props.value.password.length > 0 : true);
|
2017-06-29 23:03:11 +00:00
|
|
|
|
2017-07-04 03:21:19 +00:00
|
|
|
this.props.onChange({ ...this.props.value, key: e.target.value, valid });
|
|
|
|
};
|
2017-06-29 23:03:11 +00:00
|
|
|
|
2017-07-04 03:21:19 +00:00
|
|
|
onPasswordChange = (e: SyntheticInputEvent) => {
|
|
|
|
const fixedPkey = fixPkey(this.props.value.key);
|
|
|
|
const isValid = isValidPrivKey(fixedPkey.length);
|
|
|
|
const isPassRequired = fixedPkey.length > 64;
|
|
|
|
const valid =
|
|
|
|
isValid && (isPassRequired ? e.target.value.length > 0 : true);
|
2017-06-29 23:03:11 +00:00
|
|
|
|
2017-07-04 03:21:19 +00:00
|
|
|
this.props.onChange({
|
|
|
|
...this.props.value,
|
|
|
|
password: e.target.value,
|
|
|
|
valid
|
|
|
|
});
|
|
|
|
};
|
2017-06-29 23:03:11 +00:00
|
|
|
|
2017-07-04 03:21:19 +00:00
|
|
|
onKeyDown = (e: SyntheticKeyboardEvent) => {
|
|
|
|
if (e.keyCode === 13) {
|
|
|
|
e.preventDefault();
|
|
|
|
e.stopPropagation();
|
|
|
|
this.props.onUnlock();
|
|
|
|
}
|
|
|
|
};
|
2017-06-29 23:03:11 +00:00
|
|
|
}
|