on master help sign in
auth: use fake token when skipping signing
6e6455atomholford
src/lib/useWalletConnect.ts+17−8
@@ -30,7 +30,13 @@ type ConnectEvent = {
30};
30};
31
31
32export const useWalletConnect = () => {
32export const useWalletConnect = () => {
33− const { setWallet, setAuthToken, resetWallet }: any = useWallet();
33+ const {
34+ setWallet,
35+ setAuthToken,
36+ setFakeToken,
37+ skipLoginSigning,
38+ resetWallet,
39+ }: any = useWallet();
34 const [connector, setConnector] = useState<WalletConnect | null>(null);
40 const [connector, setConnector] = useState<WalletConnect | null>(null);
35 const [address, setAddress] = useState<string | null>(null);
41 const [address, setAddress] = useState<string | null>(null);
36 const [peerMeta, setPeerMeta] = useState<PeerMeta | null>(null);
42 const [peerMeta, setPeerMeta] = useState<PeerMeta | null>(null);
@@ -81,6 +87,15 @@ export const useWalletConnect = () => {
81 return;
87 return;
82 }
88 }
83
89
90+ const wallet: WalletConnectWallet = {
91+ address,
92+ };
93+ setWallet(Just(wallet));
94+ if (skipLoginSigning) {
95+ setFakeToken();
96+ return;
97+ }
98+
84 let authToken = Nothing();
99 let authToken = Nothing();
85 try {
100 try {
86 const token = await getAuthToken({
101 const token = await getAuthToken({
@@ -89,6 +104,7 @@ export const useWalletConnect = () => {
89 walletType: WALLET_TYPES.WALLET_CONNECT,
104 walletType: WALLET_TYPES.WALLET_CONNECT,
90 });
105 });
91 authToken = Just(token);
106 authToken = Just(token);
107+ setAuthToken(authToken);
92 } catch (e) {
108 } catch (e) {
93 if (e.message === 'METHOD_NOT_SUPPORTED') {
109 if (e.message === 'METHOD_NOT_SUPPORTED') {
94 console.warn(
110 console.warn(
@@ -99,13 +115,6 @@ export const useWalletConnect = () => {
99 //TODO should errors with this *really* prevent login?
115 //TODO should errors with this *really* prevent login?
100 }
116 }
101 }
117 }
102−
103− const wallet: WalletConnectWallet = {
104− address,
105− };
106−
107− setAuthToken(authToken);
108− setWallet(Just(wallet));
109 };
118 };
110
119
111 const isConnected = () => {
120 const isConnected = () => {
src/store/wallet.js+21−2
@@ -8,6 +8,7 @@ import React, {
8} from 'react';
8} from 'react';
9import { Just, Nothing } from 'folktale/maybe';
9import { Just, Nothing } from 'folktale/maybe';
10import { includes } from 'lodash';
10import { includes } from 'lodash';
11+import { randomHex } from 'web3-utils';
11
12
12import { walletFromMnemonic } from 'lib/wallet';
13import { walletFromMnemonic } from 'lib/wallet';
13import {
14import {
@@ -55,6 +56,10 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
55 // Allow users to skip signing the auth token on login
56 // Allow users to skip signing the auth token on login
56 const [skipLoginSigning, setSkipLoginSigning] = useState(false);
57 const [skipLoginSigning, setSkipLoginSigning] = useState(false);
57
58
59+ const setFakeToken = () => {
60+ setAuthToken(Just(randomHex(32)));
61+ };
62+
58 // See: https://github.com/urbit/bridge/issues/549#issuecomment-1048359617
63 // See: https://github.com/urbit/bridge/issues/549#issuecomment-1048359617
59 // This is used for legacy compatibility; this flow should eventually be
64 // This is used for legacy compatibility; this flow should eventually be
60 // be removed after ~1 year.
65 // be removed after ~1 year.
@@ -74,6 +79,11 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
74
79
75 const _wallet = wallet.value;
80 const _wallet = wallet.value;
76 const _web3 = web3.value;
81 const _web3 = web3.value;
82+ if (skipLoginSigning) {
83+ setFakeToken();
84+ return;
85+ }
86+
77 const token = await getAuthToken({
87 const token = await getAuthToken({
78 wallet: _wallet,
88 wallet: _wallet,
79 walletType,
89 walletType,
@@ -84,7 +94,15 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
84
94
85 setAuthToken(Just(token));
95 setAuthToken(Just(token));
86 })();
96 })();
97+ }, [
98+ wallet,
99+ walletType,
100+ walletHdPath,
101+ web3,
87− }, [wallet, walletType, walletHdPath, web3, useLegacyTokenSigning]);
102+ useLegacyTokenSigning,
103+ setAuthToken,
104+ skipLoginSigning,
105+ ]);
88
106
89 const setWalletType = useCallback(
107 const setWalletType = useCallback(
90 walletType => {
108 walletType => {
@@ -179,7 +197,8 @@ function _useWallet(initialWallet = Nothing(), initialMnemonic = Nothing()) {
179 useLegacyTokenSigning,
197 useLegacyTokenSigning,
180 setUseLegacyTokenSigning,
198 setUseLegacyTokenSigning,
181 skipLoginSigning,
199 skipLoginSigning,
182− setSkipLoginSigning
200+ setSkipLoginSigning,
201+ setFakeToken,
183 };
202 };
184}
203}
185
204
src/views/Login/Ledger.tsx+15−5
@@ -52,7 +52,13 @@ interface LedgerProps {
52export default function Ledger({ className, goHome }: LedgerProps) {
52export default function Ledger({ className, goHome }: LedgerProps) {
53 useLoginView(WALLET_TYPES.LEDGER);
53 useLoginView(WALLET_TYPES.LEDGER);
54
54
55+ const {
56+ setWallet,
55− const { setWallet, setWalletHdPath, setAuthToken }: any = useWallet();
57+ setWalletHdPath,
58+ setAuthToken,
59+ setFakeToken,
60+ skipLoginSigning,
61+ }: any = useWallet();
56
62
57 const validate = useMemo(
63 const validate = useMemo(
58 () =>
64 () =>
@@ -77,20 +83,24 @@ export default function Ledger({ className, goHome }: LedgerProps) {
77 const chainCode = Buffer.from(info.chainCode!.toString(), 'hex');
83 const chainCode = Buffer.from(info.chainCode!.toString(), 'hex');
78 const pub = Buffer.from(publicKeyConvert(publicKey, true));
84 const pub = Buffer.from(publicKeyConvert(publicKey, true));
79 const hd = bip32.fromPublicKey(pub, chainCode);
85 const hd = bip32.fromPublicKey(pub, chainCode);
86+ setWallet(Just(hd));
87+ setWalletHdPath(addHdPrefix(values.hdpath));
88+ if (skipLoginSigning) {
89+ setFakeToken();
90+ return;
91+ }
92+
80 const authToken = await getAuthToken({
93 const authToken = await getAuthToken({
81 walletType: WALLET_TYPES.LEDGER,
94 walletType: WALLET_TYPES.LEDGER,
82 walletHdPath: addHdPrefix(values.hdpath),
95 walletHdPath: addHdPrefix(values.hdpath),
83 });
96 });
84−
85 setAuthToken(Just(authToken));
97 setAuthToken(Just(authToken));
86− setWallet(Just(hd));
87− setWalletHdPath(addHdPrefix(values.hdpath));
88 } catch (error) {
98 } catch (error) {
89 console.error(error);
99 console.error(error);
90 return { [FORM_ERROR]: error.message };
100 return { [FORM_ERROR]: error.message };
91 }
101 }
92 },
102 },
93− [setAuthToken, setWallet, setWalletHdPath]
103+ [setAuthToken, setFakeToken, setWallet, setWalletHdPath, skipLoginSigning]
94 );
104 );
95
105
96 const onValues = useCallback(({ valid, values, form }) => {
106 const onValues = useCallback(({ valid, values, form }) => {
src/views/Login/LoginSelector.tsx+19−3
@@ -62,6 +62,7 @@ export default function LoginSelector({
62 setWallet,
62 setWallet,
63 setWalletType,
63 setWalletType,
64 setAuthToken,
64 setAuthToken,
65+ setFakeToken,
65 skipLoginSigning,
66 skipLoginSigning,
66 setSkipLoginSigning,
67 setSkipLoginSigning,
67 }: any = useWallet();
68 }: any = useWallet();
@@ -105,6 +106,15 @@ export default function LoginSelector({
105
106
106 const wallet = new MetamaskWallet(accounts[0]);
107 const wallet = new MetamaskWallet(accounts[0]);
107 const web3 = new Web3(window.ethereum);
108 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+
108 const authToken = await getAuthToken({
118 const authToken = await getAuthToken({
109 address: wallet.address,
119 address: wallet.address,
110 walletType: WALLET_TYPES.METAMASK,
120 walletType: WALLET_TYPES.METAMASK,
@@ -112,8 +122,6 @@ export default function LoginSelector({
112 });
122 });
113
123
114 setAuthToken(Just(authToken));
124 setAuthToken(Just(authToken));
115− setWallet(Just(wallet));
116− setWalletType(WALLET_TYPES.METAMASK);
117
125
118 goHome();
126 goHome();
119 } catch (e) {
127 } catch (e) {
@@ -121,7 +129,15 @@ export default function LoginSelector({
121 setMetamask(false);
129 setMetamask(false);
122 setMetamaskSelected(false);
130 setMetamaskSelected(false);
123 }
131 }
132+ }, [
133+ setMetamask,
134+ setWallet,
124− }, [setAuthToken, setWallet, setWalletType, setMetamask, goHome]);
135+ setWalletType,
136+ skipLoginSigning,
137+ setAuthToken,
138+ goHome,
139+ setFakeToken,
140+ ]);
125
141
126 const onSubmitWalletConnect = useCallback(async () => {
142 const onSubmitWalletConnect = useCallback(async () => {
127 try {
143 try {
src/views/Login/Metamask.js+23−5
@@ -22,7 +22,13 @@ import Web3 from 'web3';
22
22
23export default function Metamask({ className, goHome }) {
23export default function Metamask({ className, goHome }) {
24 useLoginView(WALLET_TYPES.METAMASK);
24 useLoginView(WALLET_TYPES.METAMASK);
25+ const {
26+ setWallet,
25− const { setWallet, setWalletType, setAuthToken } = useWallet();
27+ setWalletType,
28+ setAuthToken,
29+ setFakeToken,
30+ skipLoginSigning,
31+ } = useWallet();
26
32
27 const { setMetamask } = useNetwork();
33 const { setMetamask } = useNetwork();
28
34
@@ -37,8 +43,15 @@ export default function Metamask({ className, goHome }) {
37 method: 'eth_requestAccounts',
43 method: 'eth_requestAccounts',
38 });
44 });
39 const wallet = new MetamaskWallet(accounts.result[0]);
45 const wallet = new MetamaskWallet(accounts.result[0]);
40−
41 const web3 = new Web3(window.ethereum);
46 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+
42 const authToken = await getAuthToken({
55 const authToken = await getAuthToken({
43 address: wallet.address,
56 address: wallet.address,
44 walletType: WALLET_TYPES.METAMASK,
57 walletType: WALLET_TYPES.METAMASK,
@@ -46,13 +59,18 @@ export default function Metamask({ className, goHome }) {
46 });
59 });
47
60
48 setAuthToken(Just(authToken));
61 setAuthToken(Just(authToken));
49− setWallet(Just(wallet));
50− setWalletType(WALLET_TYPES.METAMASK);
51 } catch (e) {
62 } catch (e) {
52 console.error(e);
63 console.error(e);
53 return { [FORM_ERROR]: e.message };
64 return { [FORM_ERROR]: e.message };
54 }
65 }
66+ }, [
67+ setMetamask,
68+ setWallet,
55− }, [setAuthToken, setWallet, setWalletType, setMetamask]);
69+ setWalletType,
70+ skipLoginSigning,
71+ setAuthToken,
72+ setFakeToken,
73+ ]);
56
74
57 return (
75 return (
58 <Grid className={className}>
76 <Grid className={className}>
src/views/Login/Trezor.tsx+15−4
@@ -41,7 +41,13 @@ interface TrezorProps {
41export default function Trezor({ className, goHome }: TrezorProps) {
41export default function Trezor({ className, goHome }: TrezorProps) {
42 useLoginView(WALLET_TYPES.TREZOR);
42 useLoginView(WALLET_TYPES.TREZOR);
43
43
44+ const {
45+ setWallet,
44− const { setWallet, setWalletHdPath, setAuthToken }: any = useWallet();
46+ setWalletHdPath,
47+ setAuthToken,
48+ setFakeToken,
49+ skipLoginSigning,
50+ }: any = useWallet();
45
51
46 const validate = useMemo(
52 const validate = useMemo(
47 () =>
53 () =>
@@ -81,6 +87,13 @@ export default function Trezor({ className, goHome }: TrezorProps) {
81
87
82 const pub = Buffer.from(publicKeyConvert(publicKey, true));
88 const pub = Buffer.from(publicKeyConvert(publicKey, true));
83 const hd = bip32.fromPublicKey(pub, chainCode);
89 const hd = bip32.fromPublicKey(pub, chainCode);
90+ setWallet(Just(hd));
91+ setWalletHdPath(values.hdPath);
92+
93+ if (skipLoginSigning) {
94+ setFakeToken();
95+ return;
96+ }
84
97
85 const authToken = await getAuthToken({
98 const authToken = await getAuthToken({
86 walletType: WALLET_TYPES.TREZOR,
99 walletType: WALLET_TYPES.TREZOR,
@@ -88,10 +101,8 @@ export default function Trezor({ className, goHome }: TrezorProps) {
88 });
101 });
89
102
90 setAuthToken(Just(authToken));
103 setAuthToken(Just(authToken));
91− setWallet(Just(hd));
92− setWalletHdPath(values.hdPath);
93 },
104 },
94− [setAuthToken, setWallet, setWalletHdPath]
105+ [setAuthToken, setFakeToken, setWallet, setWalletHdPath, skipLoginSigning]
95 );
106 );
96
107
97 const onValues = useCallback(({ valid, values, form }) => {
108 const onValues = useCallback(({ valid, values, form }) => {