feat(settings): add transparent addresses in export private keys

This commit is contained in:
George Lima 2019-04-15 22:42:53 -03:00
parent 5319f06588
commit 1ba67a866f
1 changed files with 39 additions and 24 deletions

View File

@ -203,17 +203,21 @@ type State = {
error: string | null,
};
const SHIELDED_ADDRESS_PRIVATE_KEY_PREFIX = 'secret-extended-key';
const initialState = {
viewKeys: [],
privateKeys: [],
importedPrivateKeys: '',
isLoading: false,
successExportViewKeys: false,
successExportPrivateKeys: false,
successImportPrivateKeys: false,
error: null,
};
export class SettingsView extends PureComponent<Props, State> {
state = {
viewKeys: [],
privateKeys: [],
importedPrivateKeys: '',
isLoading: false,
successExportViewKeys: false,
successExportPrivateKeys: false,
successImportPrivateKeys: false,
error: null,
};
state = initialState;
componentDidMount() {
const { loadAddresses } = this.props;
@ -221,6 +225,10 @@ export class SettingsView extends PureComponent<Props, State> {
loadAddresses();
}
resetState = () => {
this.setState(initialState);
};
getWalletFolderPath = () => {
const { app } = electron.remote;
@ -259,22 +267,24 @@ export class SettingsView extends PureComponent<Props, State> {
exportPrivateKeys = () => {
const { addresses } = this.props;
const zAddresses = addresses.filter(({ address }) => address.startsWith('z'));
this.setState({ isLoading: true });
Promise.all(
zAddresses.map(async ({ address }) => {
const privateKey = await rpc.z_exportkey(address);
addresses.map(async ({ address }) => {
const privateKey = await (address.startsWith('z')
? rpc.z_exportkey(address)
: rpc.dumpprivkey(address));
return { zAddress: address, key: privateKey };
}),
).then((privateKeys) => {
this.setState({
privateKeys,
successExportPrivateKeys: true,
isLoading: false,
});
});
)
.then((privateKeys) => {
this.setState({
privateKeys,
successExportPrivateKeys: true,
isLoading: false,
});
})
.catch(error => this.setState({ isLoading: false, error: error.message }));
};
importPrivateKeys = () => {
@ -289,7 +299,11 @@ export class SettingsView extends PureComponent<Props, State> {
this.setState({ isLoading: true, error: null });
Promise.all(keys.map(key => rpc.z_importkey(key)))
Promise.all(
keys.map(key => (key.startsWith(SHIELDED_ADDRESS_PRIVATE_KEY_PREFIX)
? rpc.z_importkey(key)
: rpc.importprivkey(key))),
)
.then(() => {
this.setState({
successImportPrivateKeys: true,
@ -449,12 +463,13 @@ export class SettingsView extends PureComponent<Props, State> {
onConfirm={this.exportPrivateKeys}
showButtons={!successExportPrivateKeys}
width={550}
onClose={this.resetState}
>
{() => (
<ModalContent>
{successExportPrivateKeys ? (
privateKeys.map(({ zAddress, key }, index) => (
<>
<div key={zAddress}>
<ViewKeyHeader>
<ViewKeyLabel value={`Private Key for Address #${index + 1}`} />
<ViewKeyAddress value={`Address: ${zAddress}`} />
@ -467,7 +482,7 @@ export class SettingsView extends PureComponent<Props, State> {
/>
<ClipboardButton text={key} />
</ViewKeyContentWrapper>
</>
</div>
))
) : (
<TextComponent value={EXPORT_PRIV_KEYS_CONTENT} />