on master help sign in
passport: include keyfile when available

We include it during the invite flow, because we always end up configuring the keys. And we include it when redownloading our passport, if the auto-derived keys are available.

commit117708df8b0d3954286aebabd70f5487c2a93839 authorFang <git@fang.io> dateWed 30 Jun 2021, 20:02 (5 years ago) parentfbc8b0c
4 files changed+21−9
src/lib/invite.js+7−3 src/views/Activate/ActivateCode.js+1−1 src/views/Activate/PassportDownload.js+8−3 src/views/UrbitID/DownloadKeys.js+5−2
src/lib/invite.js+7−3
@@ -3,14 +3,14 @@ import * as wg from './walletgen';
33import JSZip from 'jszip';
44import saveAs from 'file-saver';
55
6−export async function generateWallet(point) {
6+export async function generateWallet(point, boot) {
77 const ticket = await wg.makeTicket(point);
8− const wallet = await wg.generateWallet(point, ticket);
8+ const wallet = await wg.generateWallet(point, ticket, boot);
99 return wallet;
1010}
1111
1212//TODO should be moved to lib/walletgen
13−export async function downloadWallet(paperWallets) {
13+export async function downloadWallet(paperWallets, keyfile, keyfilename) {
1414 if (paperWallets.length === 1) {
1515 const zip = new JSZip();
1616
@@ -24,6 +24,10 @@ export async function downloadWallet(paperWallets) {
2424 folder.file(filename, frame.image);
2525 });
2626
27+ if (keyfile && keyfilename) {
28+ folder.file(keyfilename, keyfile);
29+ }
30+
2731 await zip.generateAsync({ type: 'blob' }).then(content => {
2832 saveAs(content, `${zipName}.zip`);
2933 // resolve(true);
src/views/Activate/ActivateCode.js+1−1
@@ -126,7 +126,7 @@ export default function ActivateCode() {
126126
127127 setDerivedPoint(Just(point));
128128 setInviteWallet(inviteWallet);
129− setDerivedWallet(Just(await generateWallet(point)));
129+ setDerivedWallet(Just(await generateWallet(point, true)));
130130 } else {
131131 return {
132132 [FORM_ERROR]:
src/views/Activate/PassportDownload.js+8−3
@@ -1,10 +1,12 @@
11import React, { useState, useEffect, useCallback } from 'react';
22import { Just, Nothing } from 'folktale/maybe';
33import { Grid, P } from 'indigo-react';
4+import ob from 'urbit-ob';
45
56import * as need from 'lib/need';
67import { downloadWallet } from 'lib/invite';
78import { useLocalRouter } from 'lib/LocalRouter';
9+import { compileNetworkingKey } from 'lib/keys';
810
911import { DownloadButton, ForwardButton } from 'components/Buttons';
1012import PaperBuilder from 'components/PaperBuilder';
@@ -20,7 +22,7 @@ export default function PassportDownload({ className }) {
2022 setGenerated,
2123 } = useActivateFlow();
2224 const { push, names } = useLocalRouter();
23− // const point = need.point(derivedPoint);
25+ const point = need.point(derivedPoint);
2426 const wallet = need.wallet(derivedWallet);
2527
2628 const [paper, setPaper] = useState(Nothing());
@@ -32,9 +34,12 @@ export default function PassportDownload({ className }) {
3234 });
3335
3436 const download = useCallback(() => {
35− downloadWallet(paper.getOrElse([]));
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';
40+ downloadWallet(paper.getOrElse([]), netkey, filename);
3641 setDownloaded(true);
37− }, [paper, setDownloaded]);
42+ }, [paper, wallet, point, setDownloaded]);
3843
3944 // sync paper value to activation state
4045 useEffect(
src/views/UrbitID/DownloadKeys.js+5−2
@@ -8,6 +8,7 @@ import { DownloadButton, RestartButton } from 'components/Buttons';
88import PaperBuilder from 'components/PaperBuilder';
99
1010import { downloadWallet } from 'lib/invite';
11+import useKeyfileGenerator from 'lib/useKeyfileGenerator';
1112
1213import { useWallet } from 'store/wallet';
1314import { Grid, P } from 'indigo-react';
@@ -22,13 +23,15 @@ export default function AdminRedownload() {
2223 const _urbitWallet = need.wallet(urbitWallet);
2324 const point = need.point(pointCursor);
2425
26+ const { keyfile, filename } = useKeyfileGenerator();
27+
2528 const [paper, setPaper] = useState(Nothing());
2629 const [downloaded, setDownloaded] = useState(false);
2730
2831 const doDownload = useCallback(() => {
29− downloadWallet(paper.value);
32+ downloadWallet(paper.value, keyfile, filename);
3033 setDownloaded(true);
31− }, [paper, setDownloaded]);
34+ }, [paper, keyfile, filename, setDownloaded]);
3235
3336 const goBack = useCallback(() => pop(), [pop]);
3437