From 6f15cafc525c49fde5949fc14e493fd088f1be99 Mon Sep 17 00:00:00 2001 From: Amitoj Singh Date: Sun, 9 Jun 2024 15:14:59 -0700 Subject: [PATCH] fix auto login (#676) * fix ss autologin * fix ss autologin * fix autologin --- .../src/pages/Browser/Browser.tsx | 91 ++++++-------- .../assets/browser_injection.js | 118 ------------------ .../keepkey-desktop/assets/ss_autologin.js | 2 +- packages/keepkey-desktop/scripts/dev.ts | 8 +- packages/keepkey-desktop/src/ipcListeners.ts | 5 - packages/keepkey-desktop/src/types.ts | 1 - 6 files changed, 46 insertions(+), 179 deletions(-) delete mode 100644 packages/keepkey-desktop/assets/browser_injection.js diff --git a/packages/keepkey-desktop-app/src/pages/Browser/Browser.tsx b/packages/keepkey-desktop-app/src/pages/Browser/Browser.tsx index 4825cd6f7..ac042798f 100644 --- a/packages/keepkey-desktop-app/src/pages/Browser/Browser.tsx +++ b/packages/keepkey-desktop-app/src/pages/Browser/Browser.tsx @@ -81,45 +81,43 @@ const clearClipBoardIfWCString = async () => { } const checkIfSSDApp = (currentUrl: string) => { - const url = new URL(currentUrl) - const kkDesktopApiKey = localStorage.getItem('@app/serviceKey') - const webview = getWebview() - - if ( - url.origin === getConfig().REACT_APP_SHAPESHIFT_DAPP_URL || - url.origin === 'http://localhost:3000' - ) { - if (!webview) return - - webview - .executeJavaScript('localStorage.getItem("localWalletType");', true) - .then((savedWalletType: any) => { - if (!savedWalletType || savedWalletType === 'keepkey') { - const localWalletDeviceId = localStorage.getItem('localWalletDeviceId') - webview - .executeJavaScript('localStorage.getItem("localWalletDeviceId");', true) - .then((savedWalletId: any) => { - if (!savedWalletId || savedWalletId !== localWalletDeviceId) { - if (!kkDesktopApiKey || !localWalletDeviceId) return - - ipcListeners.getSSAutoLogin(localWalletDeviceId, kkDesktopApiKey).then( - (injection: any) => { - console.log('INJECTION', injection) - webview.executeJavaScript(injection) - }, - // .then(() => webview.reload()) - ) - } - }) - } - }) - .catch(console.error) + try { + if (currentUrl === 'about:blank') return + const url = new URL(currentUrl) + if ( + url.origin === getConfig().REACT_APP_SHAPESHIFT_DAPP_URL || + url.origin === 'http://localhost:3000' + ) { + const webview = getWebview() + if (!webview) return + webview + .executeJavaScript('localStorage.getItem("localWalletType");', true) + .then((savedWalletType: any) => { + if (!savedWalletType || savedWalletType === 'keepkey') { + const localWalletDeviceId = localStorage.getItem('localWalletDeviceId') + webview + .executeJavaScript('localStorage.getItem("localWalletDeviceId");', true) + .then((savedWalletId: any) => { + if (!savedWalletId || savedWalletId !== localWalletDeviceId) { + const kkDesktopApiKey = localStorage.getItem('@app/serviceKey') + if (!kkDesktopApiKey || !localWalletDeviceId) return + + ipcListeners.getSSAutoLogin(localWalletDeviceId, kkDesktopApiKey).then( + injection => { + console.log('INJECTION', injection) + webview.executeJavaScript(injection) + }, + // .then(() => webview.reload()) + ) + } + }) + } + }) + .catch(console.error) + } + } catch (error) { + console.error(error) } - - if (kkDesktopApiKey) - ipcListeners - .getBrowserInjection(kkDesktopApiKey) - .then((injection: any) => webview.executeJavaScript(injection)) } export const Browser = () => { @@ -201,6 +199,7 @@ export const Browser = () => { webview.executeJavaScript(`localStorage.setItem( 'WCM_RECENT_WALLET_DATA', '{"id": "fdcaaa47c154988ff2ce28d39248eb10366ec60c7de725f73b0d33b5bb9b9a64","name": "KeepKey Desktop","homepage": "https://www.keepkey.com/","image_id": "eb4227d9-366c-466c-db8f-ab7e45985500","order": 5690,"desktop": {"native": "keepkey://launch","universal": ""}}')`) + checkIfSSDApp(webview.getURL()) } webview.addEventListener('dom-ready', listener) return () => { @@ -212,7 +211,7 @@ export const Browser = () => { const webview = getWebviewWc()! const listener = () => { setWebviewWcReady(true) - ipcListeners.then((injection: any) => webview.executeJavaScript(injection)) + //ipcListeners.then((injection: any) => webview.executeJavaScript(injection)) } webview.addEventListener('dom-ready', listener) return () => { @@ -276,20 +275,6 @@ export const Browser = () => { } }, []) - useEffect(() => { - const webview = getWebview()! - const listener = () => { - const url = webview.getURL() - if (url === 'about:blank') return - //dispatch({ type: WalletActions.SET_BROWSER_URL, payload: url }) - checkIfSSDApp(url) - } - webview.addEventListener('did-finish-load', listener) - return () => { - webview.removeEventListener('did-finish-load', listener) - } - }, [dispatch]) - useEffect(() => { const webview = getWebview()! if (webviewReady && (url !== webview.getURL() || forceLoad)) { diff --git a/packages/keepkey-desktop/assets/browser_injection.js b/packages/keepkey-desktop/assets/browser_injection.js deleted file mode 100644 index 689acf799..000000000 --- a/packages/keepkey-desktop/assets/browser_injection.js +++ /dev/null @@ -1,118 +0,0 @@ -const KK_SDK_API_KEY = 'API_KEY_HERE' - -const fetchEthAddress = (resolve, reject) => { - fetch('http://localhost:1646/addresses/eth', { - method: 'POST', - headers: { - Authorization: `Bearer ${KK_SDK_API_KEY}`, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - show_display: false, - address_n: [2147483692, 2147483708, 2147483648, 0, 0], - }), - }) - .then(resp => { - resp.json().then(({ address }) => resolve(address)) - }) - .catch(reject) -} - -const fetchChainId = resolve => { - resolve('0x1') -} - -window.ethereum = { - isMetaMask: true, - - request: ({ method, params }) => - new Promise((resolve, reject) => { - console.log('[INJECTED] REQUEST FUNCTION CALLED: ', method, params) - switch (method) { - case 'eth_chainId': - fetchChainId(resolve, reject) - break - case 'eth_requestAccounts': - fetchEthAddress(resolve, reject) - break - case 'eth_accounts': - fetchEthAddress(resolve, reject) - break - case 'wallet_addEthereumChain': - resolve('Successfully added Ethereum chain.') - break - case 'wallet_switchEthereumChain': - resolve('Successfully switched Ethereum chain.') - break - case 'eth_sendTransaction': - resolve('Transaction sent successfully.') - break - case 'wallet_watchAsset': - resolve('Asset added to wallet successfully.') - break - case 'wallet_requestPermissions': - resolve([{ eth_accounts: {} }]) - break - case 'wallet_getPermissions': - resolve([{ eth_accounts: {} }]) - break - case 'eth_accounts': - fetchEthAddress(resolve, reject) - break - case 'eth_getEncryptionPublicKey': - resolve('Encryption public key') - break - case 'eth_decrypt': - resolve('Decrypted data') - break - case 'eth_sign': - resolve('Signature') - break - case 'personal_sign': - resolve('Personal signature') - break - case 'personal_ecRecover': - resolve('Recovered address') - break - case 'eth_signTypedData': - resolve('Typed data signature') - break - case 'eth_signTypedData_v3': - resolve('Typed data v3 signature') - break - case 'eth_signTypedData_v4': - resolve('Typed data v4 signature') - break - case 'net_version': - resolve('Network version') - break - case 'eth_getBlockByNumber': - resolve('Block data') - break - default: - reject(`Method ${method} not supported.`) - break - } - }), - - // Enable provider (deprecated, use request('eth_requestAccounts') instead) - enable: () => {}, - - on: (eventName, callback) => { - console.log('[INJECTED] ON FUNCTION CALLED: ', eventName, callback) - }, - - removeListener: (eventName, callback) => { - console.log('[INJECTED] REMOVE LISTENER FUNCTION CALLED: ', eventName, callback) - }, - - close: () => { - console.log('[INJECTED] CLOSE FUNCTION CALLED: ') - }, - - chainId: '0x1', - - selectedAddress: '0x2356A15042F98f0a53784F42237bd4b2873AADCF', - - isConnected: false, -} diff --git a/packages/keepkey-desktop/assets/ss_autologin.js b/packages/keepkey-desktop/assets/ss_autologin.js index 53ca0843a..8834b01f5 100644 --- a/packages/keepkey-desktop/assets/ss_autologin.js +++ b/packages/keepkey-desktop/assets/ss_autologin.js @@ -1,5 +1,5 @@ // Initialized in browser_injection.js -// const KK_SDK_API_KEY = 'API_KEY_HERE' +const KK_SDK_API_KEY = 'API_KEY_HERE' const KK_DEVICE_ID = 'WALLET_DEVICE_ID_HERE' console.log('LOADED SS AUTOLOGIN SCRIPT') diff --git a/packages/keepkey-desktop/scripts/dev.ts b/packages/keepkey-desktop/scripts/dev.ts index efd531747..7aefe1d92 100644 --- a/packages/keepkey-desktop/scripts/dev.ts +++ b/packages/keepkey-desktop/scripts/dev.ts @@ -16,8 +16,14 @@ export const dev = async () => { await build() + // only build dir in dev, speeds up the process await electronBuilder.build({ dir: true, + x64: false, + ia32: false, + armv7l: false, + arm64: false, + universal: false, }) console.log('Launching unpacked app...') @@ -51,7 +57,7 @@ export const dev = async () => { child.stderr.on('data', data => { console.error(`stderr [electron main] : ${data}`) - console.error("stderr [electron main] : ",JSON.stringify(data)) + console.error('stderr [electron main] : ', JSON.stringify(data)) }) process.on('SIGINT', () => { diff --git a/packages/keepkey-desktop/src/ipcListeners.ts b/packages/keepkey-desktop/src/ipcListeners.ts index ad5b1d06f..c69738e25 100644 --- a/packages/keepkey-desktop/src/ipcListeners.ts +++ b/packages/keepkey-desktop/src/ipcListeners.ts @@ -317,11 +317,6 @@ export const ipcListeners: IpcListeners = { }) }, - async getBrowserInjection(sdkApiKey: string) { - const injection = readFileSync(path.join(__dirname, 'assets/browser_injection.js')) - return injection.toString().replace('API_KEY_HERE', sdkApiKey) - }, - async getSSAutoLogin(walletId: string, sdkApiKey: string) { const injection = readFileSync(path.join(__dirname, 'assets/ss_autologin.js')) return injection diff --git a/packages/keepkey-desktop/src/types.ts b/packages/keepkey-desktop/src/types.ts index ea06973f2..ee840e068 100644 --- a/packages/keepkey-desktop/src/types.ts +++ b/packages/keepkey-desktop/src/types.ts @@ -99,7 +99,6 @@ export type IpcListeners = { forceReconnect(): Promise setAlwaysOnTop(value: boolean): Promise clearLocalStorage(): Promise - getBrowserInjection(sdkApiKey: string): Promise getSSAutoLogin(walletId: string, sdkApiKey: string): Promise getProtocolLaunchUrl(): Promise handleWalletConnectUrlInProtocol(connect: (uri: string) => Promise): Promise