(()=>{var e={};e.id=558,e.ids=[558],e.modules={3295:e=>{"use strict";e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11723:e=>{"use strict";e.exports=require("querystring")},12412:e=>{"use strict";e.exports=require("assert")},26690:(e,r,s)=>{"use strict";s.d(r,{N:()=>i});var o=s(1926),t=s(10591);function n(e){let r=process.env[e];if(!r)throw Error(`Missing required environment variable: ${e}`);return r}async function a(e){try{let r=await fetch(`${process.env.KEYCLOAK_ISSUER}/protocol/openid-connect/token`,{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:process.env.KEYCLOAK_CLIENT_ID,client_secret:process.env.KEYCLOAK_CLIENT_SECRET,grant_type:"refresh_token",refresh_token:e.refreshToken||""}),method:"POST"}),s=await r.json();if(!r.ok){if("invalid_grant"===s.error||s.error_description?.includes("Session not active")||s.error_description?.includes("Token is not active"))return console.log("Keycloak session invalidated (likely logged out from iframe), marking token for removal"),{...e,error:"SessionNotActive"};throw s}return{...e,accessToken:s.access_token,refreshToken:s.refresh_token??e.refreshToken,idToken:e.idToken,accessTokenExpires:Date.now()+1e3*s.expires_in}}catch(r){if(console.error("Error refreshing access token:",r),r?.error==="invalid_grant"||r?.error_description?.includes("Session not active")||r?.error_description?.includes("Token is not active"))return{...e,error:"SessionNotActive"};return{...e,error:"RefreshAccessTokenError"}}}let i={providers:[(0,o.A)({clientId:n("KEYCLOAK_CLIENT_ID"),clientSecret:n("KEYCLOAK_CLIENT_SECRET"),issuer:n("KEYCLOAK_ISSUER"),authorization:{params:{scope:"openid profile email roles"}},profile(e){console.log("Keycloak profile callback:",{rawProfile:e,rawRoles:e.roles,realmAccess:e.realm_access,groups:e.groups});let r=e.realm_access?.roles||[];console.log("Profile callback raw roles:",r);let s=r.map(e=>e.replace(/^ROLE_/,"").toLowerCase());return console.log("Profile callback cleaned roles:",s),{id:e.sub,name:e.name??e.preferred_username,email:e.email,first_name:e.given_name??"",last_name:e.family_name??"",username:e.preferred_username??e.email?.split("@")[0]??"",role:s}}})],session:{strategy:"jwt",maxAge:2592e3},callbacks:{async jwt({token:e,account:r,profile:s}){if(r&&s){let o=(s.realm_access?.roles||[]).map(e=>e.replace(/^ROLE_/,"").toLowerCase());e.accessToken=r.access_token??"",e.refreshToken=r.refresh_token??"",e.idToken=r.id_token??"",e.accessTokenExpires=r.expires_at??0,e.sub=s.sub,e.role=o,e.username=s.preferred_username??"",e.first_name=s.given_name??"",e.last_name=s.family_name??""}else if(e.accessToken)try{let r=(0,t.s)(e.accessToken);r.realm_access?.roles&&(e.role=r.realm_access.roles.map(e=>e.replace(/^ROLE_/,"").toLowerCase()))}catch(e){console.error("Error decoding token:",e)}let o=e.accessTokenExpires;if(o&&Date.now(){"use strict";e.exports=require("util")},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},55511:e=>{"use strict";e.exports=require("crypto")},55591:e=>{"use strict";e.exports=require("https")},57127:(e,r,s)=>{"use strict";s.r(r),s.d(r,{patchFetch:()=>_,routeModule:()=>m,serverHooks:()=>h,workAsyncStorage:()=>k,workUnitAsyncStorage:()=>f});var o={};s.r(o),s.d(o,{GET:()=>p,POST:()=>d});var t=s(96559),n=s(48088),a=s(37719),i=s(35426),c=s(26690),l=s(32190);async function u(){try{let e=await fetch(`${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"client_credentials",client_id:process.env.KEYCLOAK_CLIENT_ID,client_secret:process.env.KEYCLOAK_CLIENT_SECRET})}),r=await e.json();if(console.log("Token Response:",{status:e.status,ok:e.ok,data:r}),!e.ok||!r.access_token)return console.error("Token Error Details:",{status:e.status,data:r}),null;return r.access_token}catch(e){return console.error("Token Error:",e),null}}async function p(){try{if(!await (0,i.getServerSession)(c.N))return l.NextResponse.json({message:"Non autoris\xe9"},{status:401});let e=await u();if(!e)return l.NextResponse.json({message:"Erreur d'authentification"},{status:401});let r=await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups`,{headers:{Authorization:`Bearer ${e}`}});if(!r.ok)return l.NextResponse.json({message:"\xc9chec de la r\xe9cup\xe9ration des groupes"},{status:r.status});let s=await r.json();if(!Array.isArray(s))return l.NextResponse.json([]);let o=await Promise.all(s.map(async r=>{try{let s=await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups/${r.id}/members/count`,{headers:{Authorization:`Bearer ${e}`}}),o=0;return s.ok&&(o=await s.json()),{id:r.id,name:r.name,path:r.path,membersCount:o}}catch(e){return{id:r.id,name:r.name,path:r.path,membersCount:0}}}));return l.NextResponse.json(o)}catch(e){return console.error("Groups API Error:",e),l.NextResponse.json({message:"Une erreur est survenue"},{status:500})}}async function d(e){try{if(!await (0,i.getServerSession)(c.N))return l.NextResponse.json({message:"Non autoris\xe9"},{status:401});let{name:r}=await e.json();if(!r?.trim())return l.NextResponse.json({message:"Le nom du groupe est requis"},{status:400});let s=await u();if(!(await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/groups`,{method:"POST",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({name:r})})).ok)throw Error("\xc9chec de la cr\xe9ation du groupe");return l.NextResponse.json({id:Date.now().toString(),name:r,path:`/${r}`,membersCount:0})}catch(e){return console.error("Create Group Error:",e),l.NextResponse.json({message:e instanceof Error?e.message:"Une erreur est survenue"},{status:500})}}let m=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/groups/route",pathname:"/api/groups",filename:"route",bundlePath:"app/api/groups/route"},resolvedPagePath:"/Users/alma/Documents/NeahNew/app/api/groups/route.ts",nextConfigOutput:"",userland:o}),{workAsyncStorage:k,workUnitAsyncStorage:f,serverHooks:h}=m;function _(){return(0,a.patchFetch)({workAsyncStorage:k,workUnitAsyncStorage:f})}},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},74075:e=>{"use strict";e.exports=require("zlib")},78335:()=>{},79428:e=>{"use strict";e.exports=require("buffer")},79551:e=>{"use strict";e.exports=require("url")},81630:e=>{"use strict";e.exports=require("http")},94735:e=>{"use strict";e.exports=require("events")},96487:()=>{}};var r=require("../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),o=r.X(0,[4243,5419,580],()=>s(57127));module.exports=o})();