PathSecret.tsx 2.74 KB
Newer Older
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
// Copyright 2015-2020 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 <http://www.gnu.org/licenses/>.

import React, { useEffect, useState } from 'react';
import { ScrollView } from 'react-native';

import ScreenHeading from 'components/ScreenHeading';
import PathCard from 'components/PathCard';
import QrView from 'components/QrView';
import { SafeAreaViewContainer } from 'components/SafeAreaContainer';
import { PasswordedAccountExportWarning } from 'components/Warnings';
import testIDs from 'e2e/testIDs';
import { NavigationAccountIdentityProps } from 'types/props';
import { withAccountStore, withCurrentIdentity } from 'utils/HOC';
import { getNetworkKey, getPathName } from 'utils/identitiesUtils';
import { useSeedRef } from 'utils/seedRefHooks';

function PathSecret({
	accounts,
	route,
	navigation
}: NavigationAccountIdentityProps<'PathSecret'>): React.ReactElement {
	const { currentIdentity } = accounts.state;
	const [secret, setSecret] = useState<string>('');
	const { substrateSecret, isSeedRefValid } = useSeedRef(
		currentIdentity.encryptedSeed
	);
	const path = route.params.path;
	const pathMeta = currentIdentity.meta.get(path)!;

	useEffect(() => {
		const getAndSetSecret = async (): Promise<void> => {
			const networkKey = getNetworkKey(path, currentIdentity);
			const password = route.params.password ?? '';
			const accountName = getPathName(path, currentIdentity);
			const generatedSecret = await substrateSecret(`${path}///${password}`);
			setSecret(`secret:0x${generatedSecret}:${networkKey}:${accountName}`);
		};

		getAndSetSecret();
	}, [
		path,
		pathMeta,
57
		route.params.password,
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
		navigation,
		currentIdentity,
		isSeedRefValid,
		substrateSecret
	]);

	return (
		<SafeAreaViewContainer>
			<ScreenHeading
				title={'Export Account'}
				subtitle={'export this account to an hot machine'}
			/>
			<ScrollView testID={testIDs.PathSecret.screen} bounces={false}>
				<PathCard identity={currentIdentity} path={path} />
				<QrView data={secret} testID={secret} />
				{pathMeta.hasPassword && <PasswordedAccountExportWarning />}
			</ScrollView>
		</SafeAreaViewContainer>
	);
}

export default withAccountStore(withCurrentIdentity(PathSecret));