NeahNew/.next/server/app/api/announcements/[id]/route.js
2026-01-02 14:32:36 +01:00

1 line
8.5 KiB
JavaScript

(()=>{var e={};e.id=5040,e.ids=[5040],e.modules={3295:e=>{"use strict";e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},7588:(e,r,s)=>{"use strict";s.r(r),s.d(r,{patchFetch:()=>T,routeModule:()=>f,serverHooks:()=>g,workAsyncStorage:()=>k,workUnitAsyncStorage:()=>_});var n={};s.r(n),s.d(n,{DELETE:()=>m,GET:()=>p});var o=s(96559),t=s(48088),i=s(37719),a=s(32190),c=s(35426),l=s(26690),u=s(79464);async function d(e){try{return!!await u.z.user.findUnique({where:{id:e},select:{id:!0}})}catch(e){return console.error("Error checking if user exists:",e),!1}}async function p(e,{params:r}){try{let e=await (0,c.getServerSession)(l.N);if(!e)return a.NextResponse.json({error:"Unauthorized"},{status:401});let{id:s}=await r,n=await u.z.announcement.findUnique({where:{id:s},include:{author:{select:{id:!0,email:!0}}}});if(!n)return a.NextResponse.json({error:"Announcement not found"},{status:404});let o=e.user.role||[],t=Array.isArray(o)?o:[o];if(!(n.targetRoles.includes("all")||n.targetRoles.some(e=>t.includes(e))))return a.NextResponse.json({error:"Forbidden"},{status:403});return a.NextResponse.json(n)}catch(r){console.error("Error fetching announcement:",r);let e=r instanceof Error?r.message:"Unknown error";return a.NextResponse.json({error:"Failed to fetch announcement",details:e},{status:500})}}async function m(e,{params:r}){try{let e=await (0,c.getServerSession)(l.N);if(!e)return a.NextResponse.json({error:"Unauthorized"},{status:401});if(!await d(e.user.id))return console.error("User not found in database:",e.user.id),a.NextResponse.json({error:"User not found",details:`The user ID from your session (${e.user.id}) doesn't exist in the database.`},{status:400});let s=e.user.role||[];if(!(Array.isArray(s)?s:[s]).some(e=>["admin","entrepreneurship","communication"].includes(e)))return a.NextResponse.json({error:"Forbidden"},{status:403});let{id:n}=await r;if(!await u.z.announcement.findUnique({where:{id:n}}))return a.NextResponse.json({error:"Announcement not found"},{status:404});return await u.z.announcement.delete({where:{id:n}}),a.NextResponse.json({message:"Announcement deleted successfully"})}catch(s){console.error("Error deleting announcement:",s);let e=s instanceof Error?s.message:"Unknown error",r="object"==typeof s&&null!==s&&"code"in s&&s.code?.toString()||"UNKNOWN";return a.NextResponse.json({error:"Failed to delete announcement",details:e,code:r},{status:500})}}let f=new o.AppRouteRouteModule({definition:{kind:t.RouteKind.APP_ROUTE,page:"/api/announcements/[id]/route",pathname:"/api/announcements/[id]",filename:"route",bundlePath:"app/api/announcements/[id]/route"},resolvedPagePath:"/Users/alma/Documents/NeahNew/app/api/announcements/[id]/route.ts",nextConfigOutput:"",userland:n}),{workAsyncStorage:k,workUnitAsyncStorage:_,serverHooks:g}=f;function T(){return(0,i.patchFetch)({workAsyncStorage:k,workUnitAsyncStorage:_})}},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")},25037:(e,r,s)=>{"use strict";s.d(r,{_:()=>o});var n=s(70762);let o=n.z.object({NODE_ENV:n.z.enum(["development","test","production"]).default("development"),DATABASE_URL:n.z.string().url(),NEWSDB_URL:n.z.string().regex(/^postgresql:\/\//,"Must be a valid PostgreSQL URL"),NEWS_API_URL:n.z.string().url(),KEYCLOAK_CLIENT_ID:n.z.string(),KEYCLOAK_CLIENT_SECRET:n.z.string(),KEYCLOAK_REALM:n.z.string(),KEYCLOAK_ISSUER:n.z.string().url(),LEANTIME_TOKEN:n.z.string(),LEANTIME_API_URL:n.z.string().url(),ROCKET_CHAT_TOKEN:n.z.string(),ROCKET_CHAT_USER_ID:n.z.string()}).parse(process.env)},26690:(e,r,s)=>{"use strict";s.d(r,{N:()=>a});var n=s(1926),o=s(10591);function t(e){let r=process.env[e];if(!r)throw Error(`Missing required environment variable: ${e}`);return r}async function i(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 a={providers:[(0,n.A)({clientId:t("KEYCLOAK_CLIENT_ID"),clientSecret:t("KEYCLOAK_CLIENT_SECRET"),issuer:t("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 n=(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=n,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,o.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 n=e.accessTokenExpires;if(n&&Date.now()<n)return e;if(!e.refreshToken)return console.log("No refresh token available, cannot refresh"),{...e,accessToken:void 0,refreshToken:void 0,idToken:void 0,error:"NoRefreshToken"};let t=await i(e);return"SessionNotActive"===t.error?(console.log("Keycloak session invalidated, clearing token to force re-authentication"),{...t,accessToken:void 0,refreshToken:void 0,idToken:void 0}):"RefreshAccessTokenError"!==t.error||t.accessToken?t:(console.log("Refresh token invalid, clearing session to force re-authentication"),{...t,accessToken:void 0,refreshToken:void 0,idToken:void 0})},async session({session:e,token:r}){if("SessionNotActive"===r.error||"NoRefreshToken"===r.error||!r.accessToken||!r.refreshToken)return console.log("Session invalidated or tokens missing, user will be signed out",{error:r.error,hasAccessToken:!!r.accessToken,hasRefreshToken:!!r.refreshToken}),null;if(r.error)throw Error(r.error);let s=Array.isArray(r.role)?r.role:[];return e.user={id:r.sub??"",email:r.email??null,name:r.name??null,image:null,username:r.username??"",first_name:r.first_name??"",last_name:r.last_name??"",role:s,nextcloudInitialized:!1},e.accessToken=r.accessToken,e.idToken=r.idToken,e.refreshToken=r.refreshToken,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")},79464:(e,r,s)=>{"use strict";s.d(r,{z:()=>t});var n=s(96330),o=s(25037);let t=globalThis.prisma||new n.PrismaClient({datasources:{db:{url:o._.DATABASE_URL}},log:["query"]})},79551:e=>{"use strict";e.exports=require("url")},81630:e=>{"use strict";e.exports=require("http")},94735:e=>{"use strict";e.exports=require("events")},96330:e=>{"use strict";e.exports=require("@prisma/client")},96487:()=>{}};var r=require("../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),n=r.X(0,[4243,5419,580,762],()=>s(7588));module.exports=n})();