diff --git a/app/api/nextcloud/status/route.ts b/app/api/nextcloud/status/route.ts index 27ea3142..94bc8c0d 100644 --- a/app/api/nextcloud/status/route.ts +++ b/app/api/nextcloud/status/route.ts @@ -4,7 +4,7 @@ import { authOptions } from '@/app/api/auth/[...nextauth]/route'; import { DOMParser } from '@xmldom/xmldom'; async function establishNextcloudSession(nextcloudUrl: string, keycloakToken: string) { - // First, try to establish a session with Nextcloud + // First, try to establish a session with Nextcloud using the Keycloak token const sessionResponse = await fetch(`${nextcloudUrl}/index.php/apps/oauth2/api/v1/token`, { method: 'POST', headers: { @@ -12,8 +12,11 @@ async function establishNextcloudSession(nextcloudUrl: string, keycloakToken: st 'Authorization': `Bearer ${keycloakToken}`, }, body: new URLSearchParams({ - grant_type: 'authorization_code', - code: keycloakToken, + grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange', + subject_token: keycloakToken, + subject_token_type: 'urn:ietf:params:oauth:token-type:access_token', + client_id: process.env.NEXTCLOUD_CLIENT_ID || '', + client_secret: process.env.NEXTCLOUD_CLIENT_SECRET || '', }).toString(), }); @@ -23,9 +26,8 @@ async function establishNextcloudSession(nextcloudUrl: string, keycloakToken: st throw new Error('Failed to establish Nextcloud session'); } - // Get the session cookie from the response - const cookies = sessionResponse.headers.getSetCookie(); - return cookies.join('; '); + const sessionData = await sessionResponse.json(); + return sessionData.access_token; } export async function GET() { @@ -60,15 +62,15 @@ export async function GET() { try { // Establish Nextcloud session - const sessionCookie = await establishNextcloudSession(nextcloudUrl, session.accessToken); + const nextcloudToken = await establishNextcloudSession(nextcloudUrl, session.accessToken); - // Get user's folders using WebDAV with session cookie + // Get user's folders using WebDAV with Nextcloud token const webdavUrl = `${nextcloudUrl}/remote.php/dav/files/${encodeURIComponent(session.user.email)}/`; console.log('Requesting WebDAV URL:', webdavUrl); const foldersResponse = await fetch(webdavUrl, { headers: { - 'Cookie': sessionCookie, + 'Authorization': `Bearer ${nextcloudToken}`, 'Depth': '1', 'Content-Type': 'application/xml', },