on master help sign in
auth: use fake token when skipping signing

TODO: lazily generate token when actually needing to sign

commit6e6455a2a4c65675a0e1eb87a53b23868b090863 authortomholford <tomholford@users.noreply.github.com> dateThu 6 Oct 2022, 22:55 (4 years ago) parentde4ad94
6 files changed+110−27
src/lib/useWalletConnect.ts+17−8 src/store/wallet.js+21−2 src/views/Login/Ledger.tsx+15−5 src/views/Login/LoginSelector.tsx+19−3 src/views/Login/Metamask.js+23−5 src/views/Login/Trezor.tsx+15−4
src/lib/useWalletConnect.ts+17−8
@@ -30,7 +30,13 @@ type ConnectEvent = {
3030};
3131
3232export const useWalletConnect = () => {
33− const { setWallet, setAuthToken, resetWallet }: any = useWallet();
33+ const {
34+ setWallet,
35+ setAuthToken,
36+ setFakeToken,
37+ skipLoginSigning,
38+ resetWallet,
39+ }: any = useWallet();
3440 const [connector, setConnector] = useState<WalletConnect | null>(null);
3541 const [address, setAddress] = useState<string | null>(null);
3642 const [peerMeta, setPeerMeta] = useState<PeerMeta | null>(null);
@@ -81,6 +87,15 @@ export const useWalletConnect = () => {
8187 return;
8288 }
8389
90+ const wallet: WalletConnectWallet = {
91+ address,
92+ };
93+ setWallet(Just(wallet));
94+ if (skipLoginSigning) {
95+ setFakeToken();
96+ return;
97+ }
98+
8499 let authToken = Nothing();
85100 try {
86101 const token = await getAuthToken({
@@ -89,6 +104,7 @@ export const useWalletConnect = () => {
89104 walletType: WALLET_TYPES.WALLET_CONNECT,
90105 });
91106 authToken = Just(token);
107+ setAuthToken(authToken);
92108 } catch (e) {
93109 if (e.message === 'METHOD_NOT_SUPPORTED') {
94110 console.warn(
@@ -99,13 +115,6 @@ export const useWalletConnect = () => {
99115 //TODO should errors with this *really* prevent login?
100116 }
101117 }
102−
103− const wallet: WalletConnectWallet = {
104− address,
105− };
106−
107− setAuthToken(authToken);
108− setWallet(Just(wallet));
109118 };
110119
111120 const isConnected = () => {
src/store/wallet.js+21−2
@@ -8,6 +8,7 @@ import React, {
88} from 'react';
99import { Just, Nothing } from 'folktale/maybe';
1010import { includes } from 'lodash';
11+import { randomHex } from 'web3-utils';
1112
1213import { walletFromMnemonic } from 'lib/wallet';
1314import {
@@ -55,6 +56,10 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
5556 // Allow users to skip signing the auth token on login
5657 const [skipLoginSigning, setSkipLoginSigning] = useState(false);
5758
59+ const setFakeToken = () => {
60+ setAuthToken(Just(randomHex(32)));
61+ };
62+
5863 // See: https://github.com/urbit/bridge/issues/549#issuecomment-1048359617
5964 // This is used for legacy compatibility; this flow should eventually be
6065 // be removed after ~1 year.
@@ -74,6 +79,11 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
7479
7580 const _wallet = wallet.value;
7681 const _web3 = web3.value;
82+ if (skipLoginSigning) {
83+ setFakeToken();
84+ return;
85+ }
86+
7787 const token = await getAuthToken({
7888 wallet: _wallet,
7989 walletType,
@@ -84,7 +94,15 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
8494
8595 setAuthToken(Just(token));
8696 })();
87− }, [wallet, walletType, walletHdPath, web3, useLegacyTokenSigning]);
97+ }, [
98+ wallet,
99+ walletType,
100+ walletHdPath,
101+ web3,
102+ useLegacyTokenSigning,
103+ setAuthToken,
104+ skipLoginSigning,
105+ ]);
88106
89107 const setWalletType = useCallback(
90108 walletType => {
@@ -179,7 +197,8 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
179197 useLegacyTokenSigning,
180198 setUseLegacyTokenSigning,
181199 skipLoginSigning,
182− setSkipLoginSigning
200+ setSkipLoginSigning,
201+ setFakeToken,
183202 };
184203}
185204
src/views/Login/Ledger.tsx+15−5
@@ -52,7 +52,13 @@ interface LedgerProps {
5252export default function Ledger({ className, goHome }: LedgerProps) {
5353 useLoginView(WALLET_TYPES.LEDGER);
5454
55− const { setWallet, setWalletHdPath, setAuthToken }: any = useWallet();
55+ const {
56+ setWallet,
57+ setWalletHdPath,
58+ setAuthToken,
59+ setFakeToken,
60+ skipLoginSigning,
61+ }: any = useWallet();
5662
5763 const validate = useMemo(
5864 () =>
@@ -77,20 +83,24 @@ export default function Ledger({ className, goHome }: LedgerProps) {
7783 const chainCode = Buffer.from(info.chainCode!.toString(), 'hex');
7884 const pub = Buffer.from(publicKeyConvert(publicKey, true));
7985 const hd = bip32.fromPublicKey(pub, chainCode);
86+ setWallet(Just(hd));
87+ setWalletHdPath(addHdPrefix(values.hdpath));
88+ if (skipLoginSigning) {
89+ setFakeToken();
90+ return;
91+ }
92+
8093 const authToken = await getAuthToken({
8194 walletType: WALLET_TYPES.LEDGER,
8295 walletHdPath: addHdPrefix(values.hdpath),
8396 });
84−
8597 setAuthToken(Just(authToken));
86− setWallet(Just(hd));
87− setWalletHdPath(addHdPrefix(values.hdpath));
8898 } catch (error) {
8999 console.error(error);
90100 return { [FORM_ERROR]: error.message };
91101 }
92102 },
93− [setAuthToken, setWallet, setWalletHdPath]
103+ [setAuthToken, setFakeToken, setWallet, setWalletHdPath, skipLoginSigning]
94104 );
95105
96106 const onValues = useCallback(({ valid, values, form }) => {
src/views/Login/LoginSelector.tsx+19−3
@@ -62,6 +62,7 @@ export default function LoginSelector({
6262 setWallet,
6363 setWalletType,
6464 setAuthToken,
65+ setFakeToken,
6566 skipLoginSigning,
6667 setSkipLoginSigning,
6768 }: any = useWallet();
@@ -105,6 +106,15 @@ export default function LoginSelector({
105106
106107 const wallet = new MetamaskWallet(accounts[0]);
107108 const web3 = new Web3(window.ethereum);
109+ setWallet(Just(wallet));
110+ setWalletType(WALLET_TYPES.METAMASK);
111+
112+ if (skipLoginSigning) {
113+ setFakeToken();
114+ goHome();
115+ return;
116+ }
117+
108118 const authToken = await getAuthToken({
109119 address: wallet.address,
110120 walletType: WALLET_TYPES.METAMASK,
@@ -112,8 +122,6 @@ export default function LoginSelector({
112122 });
113123
114124 setAuthToken(Just(authToken));
115− setWallet(Just(wallet));
116− setWalletType(WALLET_TYPES.METAMASK);
117125
118126 goHome();
119127 } catch (e) {
@@ -121,7 +129,15 @@ export default function LoginSelector({
121129 setMetamask(false);
122130 setMetamaskSelected(false);
123131 }
124− }, [setAuthToken, setWallet, setWalletType, setMetamask, goHome]);
132+ }, [
133+ setMetamask,
134+ setWallet,
135+ setWalletType,
136+ skipLoginSigning,
137+ setAuthToken,
138+ goHome,
139+ setFakeToken,
140+ ]);
125141
126142 const onSubmitWalletConnect = useCallback(async () => {
127143 try {
src/views/Login/Metamask.js+23−5
@@ -22,7 +22,13 @@ import Web3 from 'web3';
2222
2323export default function Metamask({ className, goHome }) {
2424 useLoginView(WALLET_TYPES.METAMASK);
25− const { setWallet, setWalletType, setAuthToken } = useWallet();
25+ const {
26+ setWallet,
27+ setWalletType,
28+ setAuthToken,
29+ setFakeToken,
30+ skipLoginSigning,
31+ } = useWallet();
2632
2733 const { setMetamask } = useNetwork();
2834
@@ -37,8 +43,15 @@ export default function Metamask({ className, goHome }) {
3743 method: 'eth_requestAccounts',
3844 });
3945 const wallet = new MetamaskWallet(accounts.result[0]);
40−
4146 const web3 = new Web3(window.ethereum);
47+ setWallet(Just(wallet));
48+ setWalletType(WALLET_TYPES.METAMASK);
49+
50+ if (skipLoginSigning) {
51+ setFakeToken();
52+ return;
53+ }
54+
4255 const authToken = await getAuthToken({
4356 address: wallet.address,
4457 walletType: WALLET_TYPES.METAMASK,
@@ -46,13 +59,18 @@ export default function Metamask({ className, goHome }) {
4659 });
4760
4861 setAuthToken(Just(authToken));
49− setWallet(Just(wallet));
50− setWalletType(WALLET_TYPES.METAMASK);
5162 } catch (e) {
5263 console.error(e);
5364 return { [FORM_ERROR]: e.message };
5465 }
55− }, [setAuthToken, setWallet, setWalletType, setMetamask]);
66+ }, [
67+ setMetamask,
68+ setWallet,
69+ setWalletType,
70+ skipLoginSigning,
71+ setAuthToken,
72+ setFakeToken,
73+ ]);
5674
5775 return (
5876 <Grid className={className}>
src/views/Login/Trezor.tsx+15−4
@@ -41,7 +41,13 @@ interface TrezorProps {
4141export default function Trezor({ className, goHome }: TrezorProps) {
4242 useLoginView(WALLET_TYPES.TREZOR);
4343
44− const { setWallet, setWalletHdPath, setAuthToken }: any = useWallet();
44+ const {
45+ setWallet,
46+ setWalletHdPath,
47+ setAuthToken,
48+ setFakeToken,
49+ skipLoginSigning,
50+ }: any = useWallet();
4551
4652 const validate = useMemo(
4753 () =>
@@ -81,6 +87,13 @@ export default function Trezor({ className, goHome }: TrezorProps) {
8187
8288 const pub = Buffer.from(publicKeyConvert(publicKey, true));
8389 const hd = bip32.fromPublicKey(pub, chainCode);
90+ setWallet(Just(hd));
91+ setWalletHdPath(values.hdPath);
92+
93+ if (skipLoginSigning) {
94+ setFakeToken();
95+ return;
96+ }
8497
8598 const authToken = await getAuthToken({
8699 walletType: WALLET_TYPES.TREZOR,
@@ -88,10 +101,8 @@ export default function Trezor({ className, goHome }: TrezorProps) {
88101 });
89102
90103 setAuthToken(Just(authToken));
91− setWallet(Just(hd));
92− setWalletHdPath(values.hdPath);
93104 },
94− [setAuthToken, setWallet, setWalletHdPath]
105+ [setAuthToken, setFakeToken, setWallet, setWalletHdPath, skipLoginSigning]
95106 );
96107
97108 const onValues = useCallback(({ valid, values, form }) => {