From fff489091e7be8da8be3a6d805b049d1f11a64d9 Mon Sep 17 00:00:00 2001 From: Anton Nikolaev Date: Wed, 2 Jun 2021 11:29:11 -0700 Subject: [PATCH] Paste oauth token using deeplink Reviewed By: passy Differential Revision: D28790868 fbshipit-source-id: 6a22809444462af15915fa4f06e76e64ebb7f590 --- desktop/app/package.json | 1 - desktop/app/src/dispatcher/application.tsx | 28 +++++++++++++++------- desktop/app/src/reducers/application.tsx | 15 ++++++++++++ desktop/app/src/sandy-chrome/LeftRail.tsx | 13 +++++----- desktop/yarn.lock | 25 ------------------- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/desktop/app/package.json b/desktop/app/package.json index b55c9212e..111927c15 100644 --- a/desktop/app/package.json +++ b/desktop/app/package.json @@ -51,7 +51,6 @@ "promise-retry": "^2.0.1", "promisify-child-process": "^4.1.0", "prop-types": "^15.6.0", - "query-string": "^7.0.0", "react": "17.0.2", "react-async": "^10.0.0", "react-debounce-render": "^7.0.0", diff --git a/desktop/app/src/dispatcher/application.tsx b/desktop/app/src/dispatcher/application.tsx index 899e6fcfa..f90783620 100644 --- a/desktop/app/src/dispatcher/application.tsx +++ b/desktop/app/src/dispatcher/application.tsx @@ -8,7 +8,12 @@ */ import {remote, ipcRenderer, IpcRendererEvent} from 'electron'; -import {toggleAction} from '../reducers/application'; +import { + ACTIVE_SHEET_SIGN_IN, + setActiveSheet, + setPastedToken, + toggleAction, +} from '../reducers/application'; import {Group, SUPPORTED_GROUPS} from '../reducers/supportForm'; import {Store} from '../reducers/index'; import {Logger} from '../fb-interfaces/Logger'; @@ -20,7 +25,6 @@ import { } from '../utils/exportData'; import {tryCatchReportPlatformFailures} from '../utils/metrics'; import {selectPlugin} from '../reducers/connections'; -import qs from 'query-string'; export const uriComponents = (url: string): Array => { if (!url) { @@ -74,9 +78,11 @@ export default (store: Store, _logger: Logger) => { 'flipper-protocol-handler', (_event: IpcRendererEvent, query: string) => { const uri = new URL(query); - if (query.startsWith('flipper://import')) { - const {search} = new URL(query); - const {url} = qs.parse(search); + if (uri.protocol !== 'flipper:') { + return; + } + if (uri.pathname.match(/^\/*import\/*$/)) { + const url = uri.searchParams.get('url'); store.dispatch(toggleAction('downloadingImportData', true)); return ( typeof url === 'string' && @@ -91,16 +97,20 @@ export default (store: Store, _logger: Logger) => { store.dispatch(toggleAction('downloadingImportData', false)); }) ); - } else if ( - uri.protocol === 'flipper:' && - uri.pathname.includes('support-form') - ) { + } else if (uri.pathname.match(/^\/*support-form\/*$/)) { const formParam = uri.searchParams.get('form'); const grp = deeplinkFormParamToGroups(formParam); if (grp) { grp.handleSupportFormDeeplinks(store); } return; + } else if (uri.pathname.match(/^\/*login\/*$/)) { + const token = uri.searchParams.get('token'); + store.dispatch(setPastedToken(token ?? undefined)); + if (store.getState().application.activeSheet !== ACTIVE_SHEET_SIGN_IN) { + store.dispatch(setActiveSheet(ACTIVE_SHEET_SIGN_IN)); + } + return; } const match = uriComponents(query); if (match.length > 1) { diff --git a/desktop/app/src/reducers/application.tsx b/desktop/app/src/reducers/application.tsx index b0e75da70..229e238fb 100644 --- a/desktop/app/src/reducers/application.tsx +++ b/desktop/app/src/reducers/application.tsx @@ -12,6 +12,7 @@ import {v1 as uuidv1} from 'uuid'; import {ReactElement} from 'react'; import CancellableExportStatus from '../chrome/CancellableExportStatus'; import {Actions} from './'; +import produce from 'immer'; export const ACTIVE_SHEET_PLUGIN_SHEET: 'PLUGIN_SHEET' = 'PLUGIN_SHEET'; export const ACTIVE_SHEET_PLUGINS: 'PLUGINS' = 'PLUGINS'; export const ACTIVE_SHEET_SELECT_PLUGINS_TO_EXPORT: 'SELECT_PLUGINS_TO_EXPORT' = @@ -87,6 +88,7 @@ export type State = { launcherMsg: LauncherMsg; statusMessages: Array; xcodeCommandLineToolsDetected: boolean; + pastedToken?: string; }; type BooleanActionType = @@ -154,6 +156,10 @@ export type Action = payload: { isDetected: boolean; }; + } + | { + type: 'SET_PASTED_TOKEN'; + payload?: string; }; export const initialState: () => State = () => ({ @@ -288,6 +294,10 @@ export default function reducer( return state; } else if (action.type === 'SET_XCODE_DETECTED') { return {...state, xcodeCommandLineToolsDetected: action.payload.isDetected}; + } else if (action.type === 'SET_PASTED_TOKEN') { + return produce(state, (draft) => { + draft.pastedToken = action.payload; + }); } else { return state; } @@ -366,3 +376,8 @@ export const setXcodeDetected = (isDetected: boolean): Action => ({ type: 'SET_XCODE_DETECTED', payload: {isDetected}, }); + +export const setPastedToken = (pastedToken?: string): Action => ({ + type: 'SET_PASTED_TOKEN', + payload: pastedToken, +}); diff --git a/desktop/app/src/sandy-chrome/LeftRail.tsx b/desktop/app/src/sandy-chrome/LeftRail.tsx index a14a1daf3..e8c610a97 100644 --- a/desktop/app/src/sandy-chrome/LeftRail.tsx +++ b/desktop/app/src/sandy-chrome/LeftRail.tsx @@ -31,6 +31,7 @@ import {SidebarLeft, SidebarRight} from './SandyIcons'; import {useDispatch, useStore} from '../utils/useStore'; import { ACTIVE_SHEET_PLUGINS, + ACTIVE_SHEET_SIGN_IN, setActiveSheet, toggleLeftSidebarVisible, toggleRightSidebarVisible, @@ -39,7 +40,6 @@ import {theme, Layout, withTrackingScope} from 'flipper-plugin'; import SetupDoctorScreen, {checkHasNewProblem} from './SetupDoctorScreen'; import SettingsSheet from '../chrome/SettingsSheet'; import WelcomeScreen from './WelcomeScreen'; -import SignInSheet from '../chrome/fb-stubs/SignInSheet'; import {errorCounterAtom} from '../chrome/ConsoleLogs'; import {ToplevelProps} from './SandyApp'; import {useValue} from 'flipper-plugin'; @@ -370,9 +370,10 @@ function LoginButton() { const user = useStore((state) => state.user); const login = (user?.id ?? null) !== null; const profileUrl = user?.profile_picture?.uri; - const [showLogin, setShowLogin] = useState(false); + const showLogin = useCallback(() => { + dispatch(setActiveSheet(ACTIVE_SHEET_SIGN_IN)); + }, [dispatch]); const [showLogout, setShowLogout] = useState(false); - const onClose = useCallback(() => setShowLogin(false), []); const onHandleVisibleChange = useCallback( (visible) => setShowLogout(visible), [], @@ -385,10 +386,11 @@ function LoginButton() { error instanceof UserUnauthorizedError || error instanceof UserNotSignedInError ) { - setShowLogin(true); + showLogin(); } }); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return login ? ( @@ -418,9 +420,8 @@ function LoginButton() { } title="Log In" - onClick={() => setShowLogin(true)} + onClick={showLogin} /> - {showLogin && } ); } diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 12bfb481c..8b6553662 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -6691,11 +6691,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= - finalhandler@1.1.2, finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -10887,16 +10882,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.0.tgz#aaad2c8d5c6a6d0c6afada877fecbd56af79e609" - integrity sha512-Iy7moLybliR5ZgrK/1R3vjrXq03S13Vz4Rbm5Jg3EFq1LUmQppto0qtXz4vqZ386MSRjZgnTSZ9QC+NZOSd/XA== - dependencies: - decode-uri-component "^0.2.0" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - querystring@0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" @@ -12530,11 +12515,6 @@ spectron@^14.0.0: split "^1.0.1" webdriverio "^6.9.1" -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -12628,11 +12608,6 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - string-convert@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"