From 5c1a525fd487c7a322253cafc73375b95317960d Mon Sep 17 00:00:00 2001 From: Alma Date: Wed, 9 Apr 2025 23:36:12 +0200 Subject: [PATCH] update widget token mail 8 --- app/api/rocket-chat/messages/route.ts | 53 ++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/app/api/rocket-chat/messages/route.ts b/app/api/rocket-chat/messages/route.ts index fd5e2154..58ea9394 100644 --- a/app/api/rocket-chat/messages/route.ts +++ b/app/api/rocket-chat/messages/route.ts @@ -19,13 +19,51 @@ export async function GET() { return NextResponse.json({ error: "No access token found" }, { status: 401 }); } - // First, get user info using the OAuth token with additional headers + // First get the username from Keycloak + const keycloakResponse = await fetch( + `${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/userinfo`, + { + headers: { + 'Authorization': `Bearer ${session.accessToken}` + } + } + ); + + if (!keycloakResponse.ok) { + console.error('Failed to get Keycloak user info:', { + status: keycloakResponse.status, + statusText: keycloakResponse.statusText, + response: await keycloakResponse.text().catch(() => 'Could not get response text') + }); + return NextResponse.json( + { error: "Failed to get user info from Keycloak" }, + { status: keycloakResponse.status } + ); + } + + const keycloakUser = await keycloakResponse.json(); + const username = keycloakUser.preferred_username; + + console.log('Keycloak user info:', { + username, + sub: keycloakUser.sub + }); + + if (!username) { + return NextResponse.json( + { error: "No username found in Keycloak user info" }, + { status: 400 } + ); + } + + // Now get user info from Rocket.Chat using the Keycloak username const meResponse = await fetch('https://parole.slm-lab.net/api/v1/me', { headers: { 'Authorization': `Bearer ${session.accessToken}`, 'X-Auth-Token': session.accessToken, - 'X-User-Id': session.user.id, - 'X-Oauth-User': session.user.username || session.user.email?.split('@')[0] || '', + 'X-User-Id': keycloakUser.sub, + 'X-Oauth-User': username, + 'X-OAuth-Username': username }, cache: 'no-store', }); @@ -35,7 +73,8 @@ export async function GET() { status: meResponse.status, statusText: meResponse.statusText, headers: { - 'X-Oauth-User': session.user.username || session.user.email?.split('@')[0] || '', + 'X-Oauth-User': username, + 'X-OAuth-Username': username, 'Authorization': 'Bearer [hidden]' }, response: await meResponse.text().catch(() => 'Could not get response text') @@ -60,7 +99,8 @@ export async function GET() { 'Authorization': `Bearer ${session.accessToken}`, 'X-Auth-Token': session.accessToken, 'X-User-Id': userData._id, - 'X-Oauth-User': userData.username, + 'X-Oauth-User': username, + 'X-OAuth-Username': username }, cache: 'no-store', } @@ -95,7 +135,8 @@ export async function GET() { 'Authorization': `Bearer ${session.accessToken}`, 'X-Auth-Token': session.accessToken, 'X-User-Id': userData._id, - 'X-Oauth-User': userData.username, + 'X-Oauth-User': username, + 'X-OAuth-Username': username }, cache: 'no-store', }