From b719766062eb66828950d0f0f104d8c53cc1c328 Mon Sep 17 00:00:00 2001 From: viehlieb Date: Wed, 11 Jan 2023 21:17:53 +0000 Subject: [PATCH] redirect to oidc provider if configured correctly (#2805) Co-authored-by: konrad Reviewed-on: https://kolaente.dev/vikunja/frontend/pulls/2805 Reviewed-by: konrad Co-authored-by: viehlieb Co-committed-by: viehlieb --- src/helpers/redirectToProvider.ts | 5 +++++ src/stores/auth.ts | 12 +++++++++++- src/types/IProvider.ts | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/helpers/redirectToProvider.ts b/src/helpers/redirectToProvider.ts index d5ca9f35ad..c1124df936 100644 --- a/src/helpers/redirectToProvider.ts +++ b/src/helpers/redirectToProvider.ts @@ -17,3 +17,8 @@ export const redirectToProvider = (provider: IProvider, redirectUrl = '') => { window.location.href = `${provider.authUrl}?client_id=${provider.clientId}&redirect_uri=${redirectUrl}${provider.key}&response_type=code&scope=openid email profile&state=${state}` } +export const redirectToProviderOnLogout = (provider: IProvider) => { + if (provider.logoutUrl.length > 0){ + window.location.href = `${provider.logoutUrl}` + } +} diff --git a/src/stores/auth.ts b/src/stores/auth.ts index 4bec958833..cb0aa1926b 100644 --- a/src/stores/auth.ts +++ b/src/stores/auth.ts @@ -9,7 +9,7 @@ import UserSettingsService from '@/services/userSettings' import {getToken, refreshToken, removeToken, saveToken} from '@/helpers/auth' import {setModuleLoading} from '@/stores/helper' import {success} from '@/message' -import {redirectToProvider} from '@/helpers/redirectToProvider' +import {redirectToProvider, redirectToProviderOnLogout} from '@/helpers/redirectToProvider' import {AUTH_TYPES, type IUser} from '@/modelTypes/IUser' import type {IUserSettings} from '@/modelTypes/IUserSettings' import router from '@/router' @@ -356,6 +356,16 @@ export const useAuthStore = defineStore('auth', () => { window.localStorage.clear() // Clear all settings and history we might have saved in local storage. await router.push({name: 'user.login'}) await checkAuth() + + // if configured, redirect to OIDC Provider on logout + const {auth} = useConfigStore() + if ( + auth.local.enabled === false && + auth.openidConnect.enabled && + auth.openidConnect.providers?.length === 1) + { + redirectToProviderOnLogout(auth.openidConnect.providers[0]) + } } return { diff --git a/src/types/IProvider.ts b/src/types/IProvider.ts index b70c1af1cd..4207289261 100644 --- a/src/types/IProvider.ts +++ b/src/types/IProvider.ts @@ -3,4 +3,5 @@ export interface IProvider { key: string; authUrl: string; clientId: string; + logoutUrl: string; }