From e02ac0419044727ac67ffb0c8dec623431db7e10 Mon Sep 17 00:00:00 2001 From: Dany Date: Wed, 16 Jul 2025 11:46:00 +0200 Subject: [PATCH] fix: correct logout query params --- src/runtime/server/handler/logout.get.ts | 4 ++-- src/runtime/server/utils/oidc.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/runtime/server/handler/logout.get.ts b/src/runtime/server/handler/logout.get.ts index 5b1b7e2..5e58d9d 100644 --- a/src/runtime/server/handler/logout.get.ts +++ b/src/runtime/server/handler/logout.get.ts @@ -5,7 +5,7 @@ import { useRuntimeConfig } from '#imports' import { eventHandler, getQuery, getRequestURL, sendRedirect } from 'h3' import { withQuery } from 'ufo' import * as providerPresets from '../../providers' -import { configMerger, convertObjectToSnakeCase } from '../utils/oidc' +import { configMerger, convertObjectToCamelCase, convertObjectToSnakeCase } from '../utils/oidc' import { clearUserSession, getUserSession } from '../utils/session' export function logoutEventHandler({ onSuccess }: OAuthConfig) { @@ -15,7 +15,7 @@ export function logoutEventHandler({ onSuccess }: OAuthConfig) { const config = configMerger(useRuntimeConfig().oidc.providers[provider] as OidcProviderConfig, providerPresets[provider]) if (config.logoutUrl) { - const logoutParams = getQuery(event) + const logoutParams = convertObjectToCamelCase(getQuery(event)) const logoutRedirectUri = logoutParams.logoutRedirectUri || config.logoutRedirectUri // Set logout_hint and id_token_hint dynamic parameters if specified. According to https://openid.net/specs/openid-connect-rpinitiated-1_0.html#RPLogout diff --git a/src/runtime/server/utils/oidc.ts b/src/runtime/server/utils/oidc.ts index 59e1a26..cbf7d84 100644 --- a/src/runtime/server/utils/oidc.ts +++ b/src/runtime/server/utils/oidc.ts @@ -3,7 +3,7 @@ import type { RefreshTokenRequest, TokenRequest, TokenRespose, UserSession } fro import { createConsola } from 'consola' import { createDefu } from 'defu' import { sendRedirect } from 'h3' -import { snakeCase } from 'scule' +import { camelCase, snakeCase } from 'scule' import { normalizeURL } from 'ufo' import { textToBase64 } from 'undio' import { createProviderFetch, type OidcProviderConfig } from './provider' @@ -129,6 +129,13 @@ export function convertObjectToSnakeCase(object: Record) { }, {} as Record) } +export function convertObjectToCamelCase(object: Record) { + return Object.entries(object).reduce((acc, [key, value]) => { + acc[camelCase(key)] = value + return acc + }, {} as Record) +} + export async function oidcErrorHandler(event: H3Event, errorText: string, errorCode: number = 500) { const logger = useOidcLogger() await clearUserSession(event, true)