From c2e62155ccaabd48715ed3d1c81b369633330fbf Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 15 May 2023 16:56:27 +0800 Subject: [PATCH 1/5] Pass pocket auth token in query string --- packages/api/src/routers/integration_router.ts | 14 +++++--------- packages/web/pages/settings/integrations.tsx | 14 +++----------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/packages/api/src/routers/integration_router.ts b/packages/api/src/routers/integration_router.ts index 7614aeacd..a2a667dd0 100644 --- a/packages/api/src/routers/integration_router.ts +++ b/packages/api/src/routers/integration_router.ts @@ -1,10 +1,10 @@ +import axios from 'axios' import cors from 'cors' import express from 'express' -import { corsConfig } from '../utils/corsConfig' import { env } from '../env' -import axios from 'axios' -import { buildLogger } from '../utils/logger' import { getClaimsByToken } from '../utils/auth' +import { corsConfig } from '../utils/corsConfig' +import { buildLogger } from '../utils/logger' const logger = buildLogger('app.dispatch') @@ -24,7 +24,7 @@ export function integrationRouter() { } const consumerKey = env.pocket.consumerKey - const redirectUri = `${env.client.url}/settings/integrations?state=pocketAuthorizationFinished` + const redirectUri = `${env.client.url}/settings/integrations` try { // make a POST request to Pocket to get a request token const response = await axios.post<{ code: string }>( @@ -41,13 +41,9 @@ export function integrationRouter() { } ) const { code } = response.data - // store the request token in a cookie - res.cookie('pocketRequestToken', code, { - maxAge: 1000 * 60 * 60, - }) // redirect the user to Pocket to authorize the request token res.redirect( - `https://getpocket.com/auth/authorize?request_token=${code}&redirect_uri=${redirectUri}` + `https://getpocket.com/auth/authorize?request_token=${code}&redirect_uri=${redirectUri}?pocketToken=${code}` ) } catch (e) { logger.info('pocket/request-token exception:', e) diff --git a/packages/web/pages/settings/integrations.tsx b/packages/web/pages/settings/integrations.tsx index 80983b1ef..2572a23d4 100644 --- a/packages/web/pages/settings/integrations.tsx +++ b/packages/web/pages/settings/integrations.tsx @@ -13,7 +13,6 @@ import { } from '../../components/elements/LayoutPrimitives' import { SettingsLayout } from '../../components/templates/SettingsLayout' import { fetchEndpoint } from '../../lib/appConfig' -import { cookieValue } from '../../lib/cookieHelpers' import { deleteIntegrationMutation } from '../../lib/networking/mutations/deleteIntegrationMutation' import { importFromIntegrationMutation } from '../../lib/networking/mutations/importFromIntegrationMutation' import { setIntegrationMutation } from '../../lib/networking/mutations/setIntegrationMutation' @@ -104,12 +103,8 @@ export default function Integrations(): JSX.Element { useEffect(() => { const connectToPocket = async () => { try { - // get the token from cookies - const token = cookieValue('pocketRequestToken', document.cookie) - if (!token) { - showErrorToast('There was an error connecting to Pocket.') - return - } + // get the token from query string + const token = router.query.pocketToken as string const result = await setIntegrationMutation({ token, name: 'POCKET', @@ -127,10 +122,7 @@ export default function Integrations(): JSX.Element { } } if (!router.isReady) return - if ( - router.query.state == 'pocketAuthorizationFinished' && - !pocketConnected - ) { + if (router.query.pocketToken && !pocketConnected) { connectToPocket() } }, [router]) From 40b0e18b2295d728b28bc9c1deb78c84bb6e9b11 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 15 May 2023 17:31:26 +0800 Subject: [PATCH 2/5] Revalidate integrations after connected with pocket --- packages/web/pages/settings/integrations.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/web/pages/settings/integrations.tsx b/packages/web/pages/settings/integrations.tsx index 2572a23d4..a906ec184 100644 --- a/packages/web/pages/settings/integrations.tsx +++ b/packages/web/pages/settings/integrations.tsx @@ -112,8 +112,9 @@ export default function Integrations(): JSX.Element { enabled: true, }) if (result) { - revalidate() + router.replace('/settings/integrations') showSuccessToast('Connected with Pocket.') + revalidate() } else { showErrorToast('There was an error connecting to Pocket.') } From ed0952c36261ebe8437f3b0c10cefd7e018fb71f Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 15 May 2023 17:37:18 +0800 Subject: [PATCH 3/5] Replace router after connected --- packages/web/pages/settings/integrations.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web/pages/settings/integrations.tsx b/packages/web/pages/settings/integrations.tsx index a906ec184..68077ba11 100644 --- a/packages/web/pages/settings/integrations.tsx +++ b/packages/web/pages/settings/integrations.tsx @@ -112,12 +112,12 @@ export default function Integrations(): JSX.Element { enabled: true, }) if (result) { - router.replace('/settings/integrations') showSuccessToast('Connected with Pocket.') - revalidate() } else { showErrorToast('There was an error connecting to Pocket.') } + router.replace('/settings/integrations') + revalidate() } catch (err) { showErrorToast('Error: ' + err) } From a842fecf7f7b02f5a1ef6d7383787c9604fc7f10 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 15 May 2023 17:53:24 +0800 Subject: [PATCH 4/5] Replace router if connection failed --- packages/web/pages/settings/integrations.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/web/pages/settings/integrations.tsx b/packages/web/pages/settings/integrations.tsx index 68077ba11..d8241f0cf 100644 --- a/packages/web/pages/settings/integrations.tsx +++ b/packages/web/pages/settings/integrations.tsx @@ -116,10 +116,11 @@ export default function Integrations(): JSX.Element { } else { showErrorToast('There was an error connecting to Pocket.') } - router.replace('/settings/integrations') - revalidate() } catch (err) { showErrorToast('Error: ' + err) + } finally { + router.replace('/settings/integrations') + revalidate() } } if (!router.isReady) return From 87ef6f2d01bd0ba8d98bfdbd9f50232a437e00b6 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 15 May 2023 21:46:11 +0800 Subject: [PATCH 5/5] Fix revalidation --- .../web/lib/networking/queries/useGetIntegrationsQuery.tsx | 5 +++-- packages/web/pages/settings/integrations.tsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/web/lib/networking/queries/useGetIntegrationsQuery.tsx b/packages/web/lib/networking/queries/useGetIntegrationsQuery.tsx index e7a4c0501..3541380d9 100644 --- a/packages/web/lib/networking/queries/useGetIntegrationsQuery.tsx +++ b/packages/web/lib/networking/queries/useGetIntegrationsQuery.tsx @@ -71,7 +71,8 @@ export function useGetIntegrationsQuery(): IntegrationsQueryResponse { return { isValidating: false, integrations: [], - // eslint-disable-next-line @typescript-eslint/no-empty-function - revalidate: () => {}, + revalidate: () => { + mutate() + }, } } diff --git a/packages/web/pages/settings/integrations.tsx b/packages/web/pages/settings/integrations.tsx index d8241f0cf..95c6925ff 100644 --- a/packages/web/pages/settings/integrations.tsx +++ b/packages/web/pages/settings/integrations.tsx @@ -112,6 +112,7 @@ export default function Integrations(): JSX.Element { enabled: true, }) if (result) { + revalidate() showSuccessToast('Connected with Pocket.') } else { showErrorToast('There was an error connecting to Pocket.') @@ -120,7 +121,6 @@ export default function Integrations(): JSX.Element { showErrorToast('Error: ' + err) } finally { router.replace('/settings/integrations') - revalidate() } } if (!router.isReady) return