1 line
7.9 KiB
JavaScript
1 line
7.9 KiB
JavaScript
(()=>{var e={};e.id=6086,e.ids=[6086],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,s,r)=>{"use strict";r.d(s,{N:()=>i});var t=r(1926),o=r(10591);function a(e){let s=process.env[e];if(!s)throw Error(`Missing required environment variable: ${e}`);return s}async function n(e){try{let s=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"}),r=await s.json();if(!s.ok)throw r;return{...e,accessToken:r.access_token,refreshToken:r.refresh_token??e.refreshToken,accessTokenExpires:Date.now()+1e3*r.expires_in}}catch(s){return console.error("Error refreshing access token:",s),{...e,error:"RefreshAccessTokenError"}}}let i={providers:[(0,t.A)({clientId:a("KEYCLOAK_CLIENT_ID"),clientSecret:a("KEYCLOAK_CLIENT_SECRET"),issuer:a("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 s=e.realm_access?.roles||[];console.log("Profile callback raw roles:",s);let r=s.map(e=>e.replace(/^ROLE_/,"").toLowerCase());return console.log("Profile callback cleaned roles:",r),{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:r}}})],session:{strategy:"jwt",maxAge:2592e3},callbacks:{async jwt({token:e,account:s,profile:r}){if(s&&r){let t=(r.realm_access?.roles||[]).map(e=>e.replace(/^ROLE_/,"").toLowerCase());e.accessToken=s.access_token??"",e.refreshToken=s.refresh_token??"",e.accessTokenExpires=s.expires_at??0,e.sub=r.sub,e.role=t,e.username=r.preferred_username??"",e.first_name=r.given_name??"",e.last_name=r.family_name??""}else if(e.accessToken)try{let s=(0,o.s)(e.accessToken);s.realm_access?.roles&&(e.role=s.realm_access.roles.map(e=>e.replace(/^ROLE_/,"").toLowerCase()))}catch(e){console.error("Error decoding token:",e)}return Date.now()<1e3*e.accessTokenExpires?e:n(e)},async session({session:e,token:s}){if(s.error)throw Error(s.error);let r=Array.isArray(s.role)?s.role:[];return e.user={id:s.sub??"",email:s.email??null,name:s.name??null,image:null,username:s.username??"",first_name:s.first_name??"",last_name:s.last_name??"",role:r,nextcloudInitialized:!1},e.accessToken=s.accessToken,e}},pages:{signIn:"/signin",error:"/signin"},debug:!1}},28354:e=>{"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")},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")},92659:(e,s,r)=>{"use strict";r.r(s),r.d(s,{patchFetch:()=>k,routeModule:()=>d,serverHooks:()=>h,workAsyncStorage:()=>f,workUnitAsyncStorage:()=>g});var t={};r.r(t),r.d(t,{GET:()=>m});var o=r(96559),a=r(48088),n=r(37719),i=r(35426),l=r(26690),c=r(32190);let u=new Map;async function p(e){if(u.has(e))return u.get(e);try{console.log("Fetching Leantime user with token:",process.env.LEANTIME_TOKEN?"Token present":"Token missing");let s=await fetch("https://agilite.slm-lab.net/api/jsonrpc",{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":process.env.LEANTIME_TOKEN||""},body:JSON.stringify({jsonrpc:"2.0",method:"leantime.rpc.Users.Users.getUserByEmail",id:1,params:{email:e}})});if(!s.ok)throw console.error("Failed to fetch user from Leantime:",{status:s.status,statusText:s.statusText}),Error(`Failed to fetch user from Leantime: ${s.status} ${s.statusText}`);let r=await s.json();if(console.log("Leantime user response:",r),!r.result||!1===r.result)return console.log("User not found in Leantime"),null;return u.set(e,r.result.id),setTimeout(()=>u.delete(e),3e5),r.result.id}catch(e){return console.error("Error getting Leantime user ID:",e),null}}async function m(e){try{let e=await (0,i.getServerSession)(l.N);if(console.log("Session:",e?"Present":"Missing"),!e)return c.NextResponse.json({error:"Unauthorized",message:"No session found. Please sign in."},{status:401});if(!e.user?.email)return c.NextResponse.json({error:"Unauthorized",message:"No email found in session. Please sign in again."},{status:401});console.log("User email:",e.user.email);let s=await p(e.user.email);if(console.log("Leantime user ID:",s),!s)return c.NextResponse.json({error:"User not found",message:"Could not find user in Leantime. Please check your email."},{status:404});console.log("Fetching tasks for user:",s);let r=await fetch("https://agilite.slm-lab.net/api/jsonrpc",{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":process.env.LEANTIME_TOKEN||""},body:JSON.stringify({jsonrpc:"2.0",method:"leantime.rpc.Tickets.Tickets.getAll",id:1,params:{projectId:0,userId:s,status:"all",limit:100}})});if(!r.ok)throw console.error("Failed to fetch tasks:",{status:r.status,statusText:r.statusText}),Error(`Failed to fetch tasks: ${r.status} ${r.statusText}`);let t=await r.json();if(console.log("Tasks response:",t),!t.result)return c.NextResponse.json({projects:[]});console.log("Fetching projects");let o=await fetch("https://agilite.slm-lab.net/api/jsonrpc",{method:"POST",headers:{"Content-Type":"application/json","X-API-Key":process.env.LEANTIME_TOKEN||""},body:JSON.stringify({jsonrpc:"2.0",method:"leantime.rpc.Projects.getAll",id:1})});if(!o.ok)throw console.error("Failed to fetch projects:",{status:o.status,statusText:o.statusText}),Error(`Failed to fetch projects: ${o.status} ${o.statusText}`);let a=await o.json();console.log("Projects response:",a);let n=new Map;t.result.forEach(e=>{let s=a.result.find(s=>s.id===e.projectId),r=s?s.name:`Project ${e.projectId}`,t=e.projectId.toString();n.has(t)||n.set(t,{id:t,name:r,labels:[]});let o=n.get(t);if(!o.labels.find(s=>s.name===e.status)){let s,r;switch(e.status.toString()){case"1":s="NEW",r="bg-blue-100 text-blue-800";break;case"2":s="INPROGRESS",r="bg-yellow-100 text-yellow-800";break;case"3":s="DONE",r="bg-green-100 text-green-800";break;default:s="UNKNOWN",r="bg-gray-100 text-gray-800"}o.labels.push({id:`${t}-${e.status}`,name:e.status,statusType:s,class:r})}});let u=Array.from(n.values()).sort((e,s)=>e.name.localeCompare(s.name));return console.log("Final projects:",u),c.NextResponse.json({projects:u})}catch(e){return console.error("Error fetching status labels:",e),c.NextResponse.json({error:"Failed to fetch status labels",message:e instanceof Error?e.message:"Unknown error occurred"},{status:500})}}let d=new o.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/leantime/status-labels/route",pathname:"/api/leantime/status-labels",filename:"route",bundlePath:"app/api/leantime/status-labels/route"},resolvedPagePath:"/Users/alma/Documents/NeahNew/app/api/leantime/status-labels/route.ts",nextConfigOutput:"",userland:t}),{workAsyncStorage:f,workUnitAsyncStorage:g,serverHooks:h}=d;function k(){return(0,n.patchFetch)({workAsyncStorage:f,workUnitAsyncStorage:g})}},94735:e=>{"use strict";e.exports=require("events")},96487:()=>{}};var s=require("../../../../webpack-runtime.js");s.C(e);var r=e=>s(s.s=e),t=s.X(0,[4243,5419,580],()=>r(92659));module.exports=t})(); |