import { NextResponse, NextRequest } from 'next/server'; import { getServerSession } from 'next-auth'; import { authOptions } from '@/app/api/auth/[...nextauth]/route'; export async function GET(req: NextRequest) { try { const session = await getServerSession(authOptions); if (!session?.user?.email || !session?.accessToken) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const nextcloudUrl = process.env.NEXTCLOUD_URL; if (!nextcloudUrl) { console.error('Missing Nextcloud URL'); return NextResponse.json( { error: 'Nextcloud configuration is missing' }, { status: 500 } ); } // Try to access the Mail app using the Keycloak token const response = await fetch(`${nextcloudUrl}/ocs/v2.php/cloud/user`, { headers: { 'Accept': 'application/json', 'OCS-APIRequest': 'true', 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest', 'Authorization': `Bearer ${session.accessToken}`, }, }); const responseText = await response.text(); let responseData; try { responseData = JSON.parse(responseText); } catch (error) { console.error('Failed to parse response:', responseText); return NextResponse.json({ error: 'Invalid response format' }, { status: 500 }); } if (!response.ok) { console.error('User info check failed:', { status: response.status, statusText: response.statusText, error: responseData, url: response.url, }); if (response.status === 401) { return NextResponse.json({ error: 'Nextcloud authentication failed' }, { status: 401 }); } return NextResponse.json( { error: "L'application Mail n'est pas disponible sur Nextcloud. Veuillez contacter votre administrateur." }, { status: 404 } ); } const userId = responseData?.ocs?.data?.id; if (!userId) { console.error('Failed to get user ID from Nextcloud'); return NextResponse.json( { error: "L'application Mail n'est pas disponible sur Nextcloud. Veuillez contacter votre administrateur." }, { status: 404 } ); } // Now try to access the Mail app const mailResponse = await fetch(`${nextcloudUrl}/ocs/v2.php/apps/mail/api/v1/accounts`, { headers: { 'Accept': 'application/json', 'OCS-APIRequest': 'true', 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest', 'Authorization': `Bearer ${session.accessToken}`, }, }); const mailResponseText = await mailResponse.text(); let mailResponseData; try { mailResponseData = JSON.parse(mailResponseText); } catch (error) { console.error('Failed to parse mail response:', mailResponseText); return NextResponse.json({ error: 'Invalid response format' }, { status: 500 }); } if (!mailResponse.ok) { console.error('Mail app check failed:', { status: mailResponse.status, statusText: mailResponse.statusText, error: mailResponseData, url: mailResponse.url, }); if (mailResponse.status === 401) { return NextResponse.json({ error: 'Nextcloud authentication failed' }, { status: 401 }); } return NextResponse.json( { error: "L'application Mail n'est pas disponible sur Nextcloud. Veuillez contacter votre administrateur." }, { status: 404 } ); } const accounts = mailResponseData?.ocs?.data || []; // For now, return a success response with an empty array return NextResponse.json([]); } catch (error) { console.error('Error checking Mail app:', error); return NextResponse.json( { error: "L'application Mail n'est pas disponible sur Nextcloud. Veuillez contacter votre administrateur." }, { status: 404 } ); } }