diff --git a/.env b/.env index db68eb19..c58a6e2b 100644 --- a/.env +++ b/.env @@ -8,14 +8,16 @@ KEYCLOAK_ISSUER=https://connect.slm-lab.net/realms/cercle KEYCLOAK_BASE_URL=https://connect.slm-lab.net NEXTCLOUD_URL=https://espace.slm-lab.net +NEXTCLOUD_CLIENT_ID=espace.slm-lab.net +NEXTCLOUD_CLIENT_SECRET=YHLVMGpu0nGRaP7gMDpSjRr1ia6HiSr1 DATABASE_URL="postgresql://postgres:postgres@localhost:5432/calendar_db?schema=public" # Sidebar iframes -NEXT_PUBLIC_IFRAME_DIARY_URL=https://espace.slm-lab.net/apps/diary +NEXT_PUBLIC_IFRAME_DIARY_URL=https://espace.slm-lab.net/apps/diary/?embedMode=true&hideNavigation=true NEXT_PUBLIC_IFRAME_MAIL_URL=https://espace.slm-lab.net/apps/mail/?embedMode=true&hideNavigation=true -NEXT_PUBLIC_IFRAME_DRIVE_URL=https://espace.slm-lab.net/apps/files -NEXT_PUBLIC_IFRAME_CONTACTS_URL=https://espace.slm-lab.net/apps/contacts +NEXT_PUBLIC_IFRAME_DRIVE_URL=https://espace.slm-lab.net/apps/files/?embedMode=true&hideNavigation=true +NEXT_PUBLIC_IFRAME_CONTACTS_URL=https://espace.slm-lab.net/apps/contacts/?embedMode=true&hideNavigation=true NEXT_PUBLIC_IFRAME_LEARN_URL=https://apprendre.slm-lab.net NEXT_PUBLIC_IFRAME_PAROLE_URL=https://parole.slm-lab.net/channel/City NEXT_PUBLIC_IFRAME_CHAPTER_URL=https://chapitre.slm-lab.net @@ -29,12 +31,12 @@ NEXT_PUBLIC_IFRAME_SHOWCASE_URL=https://page.slm-lab.net # Navigation bar iframes NEXT_PUBLIC_IFRAME_CONFERENCE_URL=https://vision.slm-lab.net NEXT_PUBLIC_IFRAME_RADIO_URL=https://galaorangelique.wixsite.com/website -NEXT_PUBLIC_IFRAME_TIMETRACKER_URL=https://espace.slm-lab.net/apps/timemanager -NEXT_PUBLIC_IFRAME_NOTES_URL=https://espace.slm-lab.net/apps/notes -NEXT_PUBLIC_IFRAME_ANNOUNCEMENT_URL=https://espace.slm-lab.net/apps/announcementcenter +NEXT_PUBLIC_IFRAME_TIMETRACKER_URL=https://espace.slm-lab.net/apps/timemanager/?embedMode=true&hideNavigation=true +NEXT_PUBLIC_IFRAME_NOTES_URL=https://espace.slm-lab.net/apps/notes/?embedMode=true&hideNavigation=true +NEXT_PUBLIC_IFRAME_ANNOUNCEMENT_URL=https://espace.slm-lab.net/apps/announcementcenter/?embedMode=true&hideNavigation=true # Avatar menu iframes -NEXT_PUBLIC_IFRAME_HEALTHVIEW_URL=https://espace.slm-lab.net/apps/health +NEXT_PUBLIC_IFRAME_HEALTHVIEW_URL=https://espace.slm-lab.net/apps/health/?embedMode=true&hideNavigation=true NEXT_PUBLIC_IFRAME_MISSIONVIEW_URL=https://connect.slm-lab.net/realms/cercle/protocol/openid-connect/auth?response_type=code&scope=openid&client_id=page.slm-lab.net&state=f72528f6756bc132e76dd258691b71cf&redirect_uri=https%3A%2F%2Fpage.slm-lab.net%2Fwp-admin%2F NEXT_PUBLIC_IFRAME_USERSVIEW_URL=https://example.com/users-view NEXT_PUBLIC_IFRAME_THEMESSAGE_URL=https://lemessage.slm-lab.net/admin/ diff --git a/app/api/emails/route.ts b/app/api/emails/route.ts index c34a2c18..21c86b07 100644 --- a/app/api/emails/route.ts +++ b/app/api/emails/route.ts @@ -6,63 +6,49 @@ export async function GET(req: NextRequest) { try { const session = await getServerSession(authOptions); - if (!session?.accessToken) { + if (!session?.user?.email) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const nextcloudUrl = process.env.NEXTCLOUD_URL; - if (!nextcloudUrl) { - console.error('Missing Nextcloud URL'); + const clientId = process.env.NEXTCLOUD_CLIENT_ID; + const clientSecret = process.env.NEXTCLOUD_CLIENT_SECRET; + + if (!nextcloudUrl || !clientId || !clientSecret) { + console.error('Missing Nextcloud configuration'); return NextResponse.json( { error: 'Nextcloud configuration is missing' }, { status: 500 } ); } - // First, try to get the user's Nextcloud ID using the OCS API - const userInfoResponse = await fetch(`${nextcloudUrl}/ocs/v2.php/cloud/user`, { + // First, get a Nextcloud OIDC token using client credentials + const tokenResponse = await fetch(`${nextcloudUrl}/index.php/apps/oauth2/api/v1/token`, { + method: 'POST', headers: { - 'Authorization': `Bearer ${session.accessToken}`, - 'Accept': 'application/json', - 'OCS-APIRequest': 'true', - 'Content-Type': 'application/json', - 'X-Requested-With': 'XMLHttpRequest', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`, }, + body: new URLSearchParams({ + grant_type: 'client_credentials', + scope: 'ocs', + }), }); - if (!userInfoResponse.ok) { - console.error('Failed to get user info:', { - status: userInfoResponse.status, - statusText: userInfoResponse.statusText, - url: userInfoResponse.url, - headers: Object.fromEntries(userInfoResponse.headers.entries()) + if (!tokenResponse.ok) { + console.error('Failed to get Nextcloud token:', { + status: tokenResponse.status, + statusText: tokenResponse.statusText, }); - - if (userInfoResponse.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 } - ); + return NextResponse.json({ error: 'Nextcloud authentication failed' }, { status: 401 }); } - const userInfo = await userInfoResponse.json(); - const userId = userInfo?.ocs?.data?.id; + const { access_token } = await tokenResponse.json(); - 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 using OCS API + // Now try to access the Mail app using the Nextcloud token const response = await fetch(`${nextcloudUrl}/ocs/v2.php/apps/mail/api/v1/accounts`, { headers: { - 'Authorization': `Bearer ${session.accessToken}`, + 'Authorization': `Bearer ${access_token}`, 'Accept': 'application/json', 'OCS-APIRequest': 'true', 'Content-Type': 'application/json', @@ -75,7 +61,6 @@ export async function GET(req: NextRequest) { status: response.status, statusText: response.statusText, url: response.url, - headers: Object.fromEntries(response.headers.entries()) }); if (response.status === 401) { @@ -92,7 +77,6 @@ export async function GET(req: NextRequest) { const accounts = data?.ocs?.data || []; // For now, return a success response with an empty array - // We'll implement the actual message fetching once we confirm the correct endpoint return NextResponse.json([]); } catch (error) { console.error('Error checking Mail app:', error);