on master help sign in
passport: include keyfile when available
117708dFang
src/lib/invite.js+7−3
@@ -3,14 +3,14 @@ import * as wg from './walletgen';
3import JSZip from 'jszip';
3import JSZip from 'jszip';
4import saveAs from 'file-saver';
4import saveAs from 'file-saver';
5
5
6−export async function generateWallet(point) {
6+export async function generateWallet(point, boot) {
7 const ticket = await wg.makeTicket(point);
7 const ticket = await wg.makeTicket(point);
8− const wallet = await wg.generateWallet(point, ticket);
8+ const wallet = await wg.generateWallet(point, ticket, boot);
9 return wallet;
9 return wallet;
10}
10}
11
11
12//TODO should be moved to lib/walletgen
12//TODO should be moved to lib/walletgen
13−export async function downloadWallet(paperWallets) {
13+export async function downloadWallet(paperWallets, keyfile, keyfilename) {
14 if (paperWallets.length === 1) {
14 if (paperWallets.length === 1) {
15 const zip = new JSZip();
15 const zip = new JSZip();
16
16
@@ -24,6 +24,10 @@ export async function downloadWallet(paperWallets) {
24 folder.file(filename, frame.image);
24 folder.file(filename, frame.image);
25 });
25 });
26
26
27+ if (keyfile && keyfilename) {
28+ folder.file(keyfilename, keyfile);
29+ }
30+
27 await zip.generateAsync({ type: 'blob' }).then(content => {
31 await zip.generateAsync({ type: 'blob' }).then(content => {
28 saveAs(content, `${zipName}.zip`);
32 saveAs(content, `${zipName}.zip`);
29 // resolve(true);
33 // resolve(true);
src/views/Activate/ActivateCode.js+1−1
@@ -126,7 +126,7 @@ export default function ActivateCode() {
126
126
127 setDerivedPoint(Just(point));
127 setDerivedPoint(Just(point));
128 setInviteWallet(inviteWallet);
128 setInviteWallet(inviteWallet);
129− setDerivedWallet(Just(await generateWallet(point)));
129+ setDerivedWallet(Just(await generateWallet(point, true)));
130 } else {
130 } else {
131 return {
131 return {
132 [FORM_ERROR]:
132 [FORM_ERROR]:
src/views/Activate/PassportDownload.js+8−3
@@ -1,10 +1,12 @@
1import React, { useState, useEffect, useCallback } from 'react';
1import React, { useState, useEffect, useCallback } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
2import { Just, Nothing } from 'folktale/maybe';
3import { Grid, P } from 'indigo-react';
3import { Grid, P } from 'indigo-react';
4+import ob from 'urbit-ob';
4
5
5import * as need from 'lib/need';
6import * as need from 'lib/need';
6import { downloadWallet } from 'lib/invite';
7import { downloadWallet } from 'lib/invite';
7import { useLocalRouter } from 'lib/LocalRouter';
8import { useLocalRouter } from 'lib/LocalRouter';
9+import { compileNetworkingKey } from 'lib/keys';
8
10
9import { DownloadButton, ForwardButton } from 'components/Buttons';
11import { DownloadButton, ForwardButton } from 'components/Buttons';
10import PaperBuilder from 'components/PaperBuilder';
12import PaperBuilder from 'components/PaperBuilder';
@@ -20,7 +22,7 @@ export default function PassportDownload({ className }) {
20 setGenerated,
22 setGenerated,
21 } = useActivateFlow();
23 } = useActivateFlow();
22 const { push, names } = useLocalRouter();
24 const { push, names } = useLocalRouter();
23− // const point = need.point(derivedPoint);
25+ const point = need.point(derivedPoint);
24 const wallet = need.wallet(derivedWallet);
26 const wallet = need.wallet(derivedWallet);
25
27
26 const [paper, setPaper] = useState(Nothing());
28 const [paper, setPaper] = useState(Nothing());
@@ -32,9 +34,12 @@ export default function PassportDownload({ className }) {
32 });
34 });
33
35
34 const download = useCallback(() => {
36 const download = useCallback(() => {
37+ const netkey = compileNetworkingKey(wallet.network.keys, point, 1);
38+ //TODO could be deduplicated with useKeyfileGenerator's logic
39+ const filename = ob.patp(point).slice(1) + '-1.key';
35− downloadWallet(paper.getOrElse([]));
40+ downloadWallet(paper.getOrElse([]), netkey, filename);
36 setDownloaded(true);
41 setDownloaded(true);
37− }, [paper, setDownloaded]);
42+ }, [paper, wallet, point, setDownloaded]);
38
43
39 // sync paper value to activation state
44 // sync paper value to activation state
40 useEffect(
45 useEffect(
src/views/UrbitID/DownloadKeys.js+5−2
@@ -8,6 +8,7 @@ import { DownloadButton, RestartButton } from 'components/Buttons';
8import PaperBuilder from 'components/PaperBuilder';
8import PaperBuilder from 'components/PaperBuilder';
9
9
10import { downloadWallet } from 'lib/invite';
10import { downloadWallet } from 'lib/invite';
11+import useKeyfileGenerator from 'lib/useKeyfileGenerator';
11
12
12import { useWallet } from 'store/wallet';
13import { useWallet } from 'store/wallet';
13import { Grid, P } from 'indigo-react';
14import { Grid, P } from 'indigo-react';
@@ -22,13 +23,15 @@ export default function AdminRedownload() {
22 const _urbitWallet = need.wallet(urbitWallet);
23 const _urbitWallet = need.wallet(urbitWallet);
23 const point = need.point(pointCursor);
24 const point = need.point(pointCursor);
24
25
26+ const { keyfile, filename } = useKeyfileGenerator();
27+
25 const [paper, setPaper] = useState(Nothing());
28 const [paper, setPaper] = useState(Nothing());
26 const [downloaded, setDownloaded] = useState(false);
29 const [downloaded, setDownloaded] = useState(false);
27
30
28 const doDownload = useCallback(() => {
31 const doDownload = useCallback(() => {
29− downloadWallet(paper.value);
32+ downloadWallet(paper.value, keyfile, filename);
30 setDownloaded(true);
33 setDownloaded(true);
31− }, [paper, setDownloaded]);
34+ }, [paper, keyfile, filename, setDownloaded]);
32
35
33 const goBack = useCallback(() => pop(), [pop]);
36 const goBack = useCallback(() => pop(), [pop]);
34
37