From 13e9530593dd83f35b9f5f0d34f1d13fb9039526 Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen <ruben.vanleeuwen@surf.nl> Date: Tue, 14 May 2024 11:26:35 +0200 Subject: [PATCH 1/4] 1077: Check graphql response for not_authorized errors and signout --- .../orchestrator-ui-components/src/rtk/api.ts | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/orchestrator-ui-components/src/rtk/api.ts b/packages/orchestrator-ui-components/src/rtk/api.ts index e24bc91ab..1579eae2e 100644 --- a/packages/orchestrator-ui-components/src/rtk/api.ts +++ b/packages/orchestrator-ui-components/src/rtk/api.ts @@ -1,4 +1,4 @@ -import { getSession } from 'next-auth/react'; +import { getSession, signOut } from 'next-auth/react'; import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; import { graphqlRequestBaseQuery } from '@rtk-query/graphql-request-base-query'; @@ -85,6 +85,24 @@ export const orchestratorApi = createApi({ const graphqlFn = graphqlRequestBaseQuery({ url: customApi ? customApi.apiBaseUrl : graphqlEndpointCore, prepareHeaders, + customErrors: (error) => { + const { name, message, stack, response } = error; + if ( + response && + response.errors && + response.errors.length > 0 + ) { + response.errors.map((error) => { + if ( + error.extensions?.error_type === + 'not_authorized' + ) { + signOut(); + } + }); + } + return { name, message, stack }; + }, }); return graphqlFn(args, api, {}); } From 14016d2074912bfa0c14e8540cbc043f1e957740 Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen <ruben.vanleeuwen@surf.nl> Date: Tue, 14 May 2024 12:18:44 +0200 Subject: [PATCH 2/4] 1077: Add component that checks for session on every page change when auth is active --- apps/wfo-ui | 2 +- .../WfoRouteChangeListener.tsx | 22 +++++++++++++++++++ .../WfoRouteChangeListener/index.tsx | 1 + .../src/components/index.ts | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/WfoRouteChangeListener.tsx create mode 100644 packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/index.tsx diff --git a/apps/wfo-ui b/apps/wfo-ui index 854d788c7..bcd4c58a8 160000 --- a/apps/wfo-ui +++ b/apps/wfo-ui @@ -1 +1 @@ -Subproject commit 854d788c7a8acce956d3892163a80655c9bb1c1f +Subproject commit bcd4c58a87bcdd04f31f7acc07f94c648402b518 diff --git a/packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/WfoRouteChangeListener.tsx b/packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/WfoRouteChangeListener.tsx new file mode 100644 index 000000000..2691a08ae --- /dev/null +++ b/packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/WfoRouteChangeListener.tsx @@ -0,0 +1,22 @@ +import React, { useEffect } from 'react'; + +import { getSession, signOut } from 'next-auth/react'; +import { useRouter } from 'next/router'; + +import { useGetOrchestratorConfig } from '@/hooks'; + +export const WfoRouteChangeListener = () => { + const router = useRouter(); + const { authActive } = useGetOrchestratorConfig(); + + useEffect(() => { + if (authActive) { + getSession().then((session) => { + if (!session) { + signOut(); + } + }); + } + }, [authActive, router]); + return <></>; +}; diff --git a/packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/index.tsx b/packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/index.tsx new file mode 100644 index 000000000..1c628f76d --- /dev/null +++ b/packages/orchestrator-ui-components/src/components/WfoRouteChangeListener/index.tsx @@ -0,0 +1 @@ +export * from './WfoRouteChangeListener'; diff --git a/packages/orchestrator-ui-components/src/components/index.ts b/packages/orchestrator-ui-components/src/components/index.ts index 995aeee49..5b0aad79d 100644 --- a/packages/orchestrator-ui-components/src/components/index.ts +++ b/packages/orchestrator-ui-components/src/components/index.ts @@ -28,3 +28,4 @@ export * from './WfoNoResults'; export * from './WfoStartButton'; export * from './WfoSubscriptionsList'; export * from './WfoSummary'; +export * from './WfoRouteChangeListener'; From 064393ae20f9362ce8dfa888f052581b562df5ac Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen <ruben.vanleeuwen@surf.nl> Date: Tue, 14 May 2024 12:21:13 +0200 Subject: [PATCH 3/4] 1077: Add changeset --- .changeset/spicy-olives-itch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/spicy-olives-itch.md diff --git a/.changeset/spicy-olives-itch.md b/.changeset/spicy-olives-itch.md new file mode 100644 index 000000000..73a30f5b6 --- /dev/null +++ b/.changeset/spicy-olives-itch.md @@ -0,0 +1,5 @@ +--- +"@orchestrator-ui/orchestrator-ui-components": minor +--- + +Signs user out when api calls fail because of expired token From 3c746b015fe7798d1d2526b3fa488cf35e10ba4a Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen <ruben.vanleeuwen@surf.nl> Date: Tue, 14 May 2024 15:44:36 +0200 Subject: [PATCH 4/4] 1077: PR comments --- apps/wfo-ui | 2 +- packages/orchestrator-ui-components/src/rtk/api.ts | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/apps/wfo-ui b/apps/wfo-ui index bcd4c58a8..6999cb6bb 160000 --- a/apps/wfo-ui +++ b/apps/wfo-ui @@ -1 +1 @@ -Subproject commit bcd4c58a87bcdd04f31f7acc07f94c648402b518 +Subproject commit 6999cb6bb154f6bb624ad9461ea8ee611b89ddf7 diff --git a/packages/orchestrator-ui-components/src/rtk/api.ts b/packages/orchestrator-ui-components/src/rtk/api.ts index 1579eae2e..57aae71c9 100644 --- a/packages/orchestrator-ui-components/src/rtk/api.ts +++ b/packages/orchestrator-ui-components/src/rtk/api.ts @@ -87,12 +87,9 @@ export const orchestratorApi = createApi({ prepareHeaders, customErrors: (error) => { const { name, message, stack, response } = error; - if ( - response && - response.errors && - response.errors.length > 0 - ) { + if (response?.errors && response.errors?.length > 0) { response.errors.map((error) => { + // TODO: https://github.com/workfloworchestrator/orchestrator-ui-library/issues/1105 if ( error.extensions?.error_type === 'not_authorized'