on master help sign in
keys: Activate flow uses same keygen as Home view
commit1951323d0dd89bb4bb751b947fd254eca9f5852f authortomholford <tomholford@users.noreply.github.com> dateTue 14 Dec 2021, 23:49 (5 years ago) parent349ddc7
6 files changed+37−25
src/lib/useKeyfileGenerator.js → src/lib/useKeyfileGenerator.ts+31−13 src/views/Activate/MasterKeyDownload.tsx+2−8 src/views/UrbitID/DownloadKeys.js+1−1 src/views/UrbitID/Home.tsx+1−1 src/views/UrbitOS/Home.tsx+1−1 src/views/UrbitOS/NetworkKeys.tsx+1−1
src/lib/useKeyfileGenerator.js → src/lib/useKeyfileGenerator.tsrenamed+31−13
@@ -18,20 +18,35 @@ import {
1818} from './keys';
1919import useCurrentPermissions from './useCurrentPermissions';
2020import { convertToInt } from './convertToInt';
21+import { stripSigPrefix } from 'form/formatters';
22+
23+// overrideable defaults:
24+// seed - derived from wallet, mnemonic, or token (if posisble)
25+// point - the current pointCursor
26+interface useKeyfileGeneratorArgs {
27+ seed?: string;
28+ point?: number;
29+}
2130
22−export default function useKeyfileGenerator(manualNetworkSeed) {
23− const { urbitWallet, wallet, authMnemonic, authToken } = useWallet();
24− const { pointCursor } = usePointCursor();
25− const { getDetails } = usePointCache();
31+export default function useKeyfileGenerator({
32+ seed,
33+ point,
34+}: useKeyfileGeneratorArgs) {
35+ const { urbitWallet, wallet, authMnemonic, authToken }: any = useWallet();
36+ const { pointCursor }: any = usePointCursor();
37+ const { syncDetails, getDetails }: any = usePointCache();
2638
2739 const [notice, setNotice] = useState('Deriving networking keys...');
2840 const [downloaded, setDownloaded] = useState(false);
2941 const [generating, setGenerating] = useState(true);
30− const [keyfile, setKeyfile] = useState(false);
31−
42+ const [keyfile, setKeyfile] = useState<boolean | string>(false);
3243 const [code, setCode] = useState(false);
3344
34− const _point = need.point(pointCursor);
45+ const _point = point || need.point(pointCursor);
46+ useEffect(() => {
47+ syncDetails(_point);
48+ }, [_point, syncDetails]);
49+
3550 const details = getDetails(_point);
3651
3752 const networkRevision = details.matchWith({
@@ -56,8 +71,8 @@ export default function useKeyfileGenerator(manualNetworkSeed) {
5671
5772 const _details = need.details(details);
5873
59− const networkSeed = manualNetworkSeed
60− ? Just(manualNetworkSeed)
74+ const networkSeed = seed
75+ ? Just(seed)
6176 : await attemptNetworkSeedDerivation({
6277 urbitWallet,
6378 wallet,
@@ -88,14 +103,14 @@ export default function useKeyfileGenerator(manualNetworkSeed) {
88103 return;
89104 }
90105
91− setNotice();
106+ setNotice('');
92107 setCode(generateCode(pair));
93108 setKeyfile(compileNetworkKey(pair, _point, networkRevision));
94109 setGenerating(false);
95110 }, [
96111 networkRevision,
97112 hasNetworkKeys,
98− manualNetworkSeed,
113+ seed,
99114 urbitWallet,
100115 wallet,
101116 authMnemonic,
@@ -106,11 +121,14 @@ export default function useKeyfileGenerator(manualNetworkSeed) {
106121 ]);
107122
108123 const filename = useMemo(() => {
109− return `${ob.patp(_point).slice(1)}-${networkRevision}.key`;
110− // TODO: ^ unifiy "remove tilde" calls
124+ return `${stripSigPrefix(ob.patp(_point))}-${networkRevision}.key`;
111125 }, [_point, networkRevision]);
112126
113127 const download = useCallback(() => {
128+ if (typeof keyfile !== 'string') {
129+ return;
130+ }
131+
114132 saveAs(
115133 new Blob([keyfile], {
116134 type: 'text/plain;charset=utf-8',
src/views/Activate/MasterKeyDownload.tsx+2−8
@@ -14,12 +14,11 @@ import { FadeableMasterKeyPresenter as MasterKeyPresenter } from './MasterKeyPre
1414import { useActivateFlow } from './ActivateFlow';
1515import ActivateView from './ActivateView';
1616import { useLocalRouter } from 'lib/LocalRouter';
17−import { compileNetworkKey } from 'lib/keys';
18−import { downloadWallet } from 'lib/invite';
1917import PaperBuilder from 'components/PaperBuilder';
2018import { DEFAULT_FADE_TIMEOUT, MASTER_KEY_DURATION } from 'lib/constants';
2119import { timeout } from 'lib/timeout';
2220import View from 'components/View';
21+import useKeyfileGenerator from 'lib/useKeyfileGenerator';
2322
2423const MasterKeyDownload = () => {
2524 const {
@@ -46,12 +45,7 @@ const MasterKeyDownload = () => {
4645 Just: p => p.value.toFixed(),
4746 });
4847
49− const download = useCallback(async () => {
50− const netkey = compileNetworkKey(wallet.network.keys, point, 1);
51− //TODO could be deduplicated with useKeyfileGenerator's logic
52− const filename = ob.patp(point).slice(1) + '-1.key';
53− await downloadWallet(paper.getOrElse([]), netkey, filename);
54− }, [paper, wallet, point]);
48+ const { download } = useKeyfileGenerator({ point });
5549
5650 // sync paper value to activation state
5751 useEffect(
src/views/UrbitID/DownloadKeys.js+1−1
@@ -26,7 +26,7 @@ export default function AdminRedownload() {
2626 const _urbitWallet = need.wallet(urbitWallet);
2727 const point = need.point(pointCursor);
2828
29− const { keyfile, filename } = useKeyfileGenerator();
29+ const { keyfile, filename } = useKeyfileGenerator({});
3030
3131 const [paper, setPaper] = useState(Nothing());
3232 const [downloaded, setDownloaded] = useState(false);
src/views/UrbitID/Home.tsx+1−1
@@ -43,7 +43,7 @@ export default function UrbitIDHome() {
4343 return null;
4444 }
4545 }, [urbitWallet]);
46− const { keyfile, filename } = useKeyfileGenerator();
46+ const { keyfile, filename } = useKeyfileGenerator({});
4747 const [paper, setPaper] = useState(Nothing());
4848
4949 const downloadKeys = useCallback(() => {
src/views/UrbitOS/Home.tsx+1−1
@@ -42,7 +42,7 @@ export default function UrbitOSHome() {
4242 names,
4343 ]);
4444
45− const { bind: keyBind, code } = useKeyfileGenerator();
45+ const { bind: keyBind, code } = useKeyfileGenerator({});
4646
4747 return (
4848 <Window className="os-home">
src/views/UrbitOS/NetworkKeys.tsx+1−1
@@ -72,7 +72,7 @@ function useSetKeys(
7272 generating: keyfileGenerating,
7373 filename,
7474 bind: keyfileBind,
75− } = useKeyfileGenerator(manualNetworkSeed);
75+ } = useKeyfileGenerator({ seed: manualNetworkSeed });
7676
7777 const buildNetworkSeed = useCallback(
7878 async manualSeed => {