NeahNew/.next/server/chunks/6300.js
2025-05-06 23:01:34 +02:00

1 line
13 KiB
JavaScript

exports.id=6300,exports.ids=[6300],exports.modules={12269:(e,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})},14182:(e,r,o)=>{"use strict";o.d(r,{$R:()=>i,Ui:()=>c,XB:()=>l,XR:()=>u,YE:()=>n,ZT:()=>d,b4:()=>p,oD:()=>a});var t=o(91043);o(11046);let n={endpoint:process.env.MINIO_S3_UPLOAD_BUCKET_URL,region:process.env.MINIO_AWS_REGION,bucket:process.env.MINIO_AWS_S3_UPLOAD_BUCKET_NAME,missionsBucket:process.env.MINIO_MISSIONS_BUCKET||"missions",accessKey:process.env.MINIO_ACCESS_KEY||process.env.AWS_ACCESS_KEY_ID,secretKey:process.env.MINIO_SECRET_KEY||process.env.AWS_SECRET_ACCESS_KEY},s={region:n.region,endpoint:n.endpoint,forcePathStyle:!0};n.accessKey&&n.secretKey&&Object.assign(s,{credentials:{accessKeyId:n.accessKey,secretAccessKey:n.secretKey}});let a=new t.S3Client(s);async function c(e,r){try{let o=`user-${e}/${r}/`;console.log(`Listing objects with prefix: ${o}`);let s=new t.ListObjectsV2Command({Bucket:n.bucket,Prefix:o,Delimiter:"/"}),c=await a.send(s);return c.Contents?.map(e=>({id:e.Key,title:e.Key?.split("/").pop()?.replace(".md","")||"",lastModified:e.LastModified?.toISOString(),size:e.Size,type:"file",mime:e.Key?.endsWith(".md")?"text/markdown":"application/octet-stream",etag:e.ETag})).filter(e=>!e.title.startsWith(".placeholder")&&""!==e.title)||[]}catch(e){throw console.error("Error listing objects:",e),e}}async function l(e){try{let r=new t.GetObjectCommand({Bucket:n.bucket,Key:e}),o=await a.send(r);return await o.Body?.transformToString()}catch(e){throw console.error("Error getting object content:",e),e}}async function i(e,r,o){try{if(console.log(`Attempting to upload to S3/Minio: ${e}`),!n.bucket)throw Error("S3 bucket name is not configured");let s=new t.PutObjectCommand({Bucket:n.bucket,Key:e,Body:r,ContentType:o||(e.endsWith(".md")?"text/markdown":"text/plain")});console.log(`S3 PutObject request prepared for ${e}`);let c=await a.send(s);return console.log(`S3 PutObject successful for ${e}, ETag: ${c.ETag}`),{id:e,title:e.split("/").pop()?.replace(".md","")||"",lastModified:new Date().toISOString(),size:r.length,type:"file",mime:o||(e.endsWith(".md")?"text/markdown":"text/plain"),etag:c.ETag}}catch(r){throw console.error(`Error putting object to S3/Minio (${e}):`,r),r?.name==="NoSuchBucket"&&console.error(`Bucket "${n.bucket}" does not exist. Please create it first.`),r}}async function u(e){try{let r=new t.DeleteObjectCommand({Bucket:n.bucket,Key:e});return await a.send(r),!0}catch(e){throw console.error("Error deleting object:",e),e}}async function d(e){try{console.log(`Creating folder structure for user: ${e}`);let r=[];for(let o of["notes","diary","health","contacts"])try{let t=`user-${e}/${o}/`;console.log(`Creating folder: ${t}`),await i(t,"","application/x-directory");let n=`user-${e}/${o}/.placeholder`;await i(n,"Folder placeholder","text/plain"),r.push(o)}catch(e){console.error(`Error creating folder ${o}:`,e)}return console.log(`Successfully created ${r.length} folders for user ${e}: ${r.join(", ")}`),!0}catch(e){throw console.error("Error creating folder structure:",e),e}}function p(e,r){if(!e)return"";if(e.startsWith("http"))return e;console.log("Generating public URL for:",e);let o=e.startsWith("/")?e.substring(1):e;if(o.startsWith("pages/")){let e=process.env.NEXT_PUBLIC_MINIO_BASE_URL||process.env.MINIO_PUBLIC_URL;if(e){let r=e.replace(/\/$/,""),t=`${r}/${o}`;return console.log("Generated special public URL for pages path:",t),t}}let t=r||n.bucket,s=n.endpoint?.replace(/\/$/,"");if(console.log("S3 Config for URL generation:",{endpoint:s,bucket:t,cleanPath:o}),!s)return console.warn("No S3/Minio endpoint configured, returning original path"),o;let a=`${s}/${t}/${o}`;return console.log("Generated public URL:",a),a}(async()=>{try{console.log("Testing Minio/S3 connection...");let e=new t.ListObjectsV2Command({Bucket:n.bucket,MaxKeys:1}),r=await a.send(e);console.log("Minio/S3 connection successful! Bucket exists and is accessible."),console.log(`Bucket details: ${n.bucket}, contains ${r.KeyCount||0} objects`)}catch(e){console.error("CRITICAL ERROR: Failed to connect to Minio/S3 server!"),console.error("File uploads will fail until this is resolved."),console.error("Error details:",e),console.error("Please check your S3/Minio configuration and server status.")}})(),n.endpoint&&n.bucket||(console.error("ERROR: Missing required S3 environment variables!"),console.error("Please make sure your .env file contains:"),console.error("- MINIO_S3_UPLOAD_BUCKET_URL"),console.error("- MINIO_AWS_S3_UPLOAD_BUCKET_NAME"),console.error("- MINIO_ACCESS_KEY or AWS_ACCESS_KEY_ID"),console.error("- MINIO_SECRET_KEY or AWS_SECRET_ACCESS_KEY")),console.log("S3 Configuration:",{endpoint:n.endpoint||"MISSING!",region:n.region||"MISSING!",bucket:n.bucket||"MISSING!",hasAccessKey:!!n.accessKey||"MISSING!",hasSecretKey:!!n.secretKey||"MISSING!"})},19854:(e,r,o)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var t={};Object.defineProperty(r,"default",{enumerable:!0,get:function(){return s.default}});var n=o(12269);Object.keys(n).forEach(function(e){!("default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e))&&(e in r&&r[e]===n[e]||Object.defineProperty(r,e,{enumerable:!0,get:function(){return n[e]}}))});var s=function(e,r){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=a(r);if(o&&o.has(e))return o.get(e);var t={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&({}).hasOwnProperty.call(e,s)){var c=n?Object.getOwnPropertyDescriptor(e,s):null;c&&(c.get||c.set)?Object.defineProperty(t,s,c):t[s]=e[s]}return t.default=e,o&&o.set(e,t),t}(o(35426));function a(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,o=new WeakMap;return(a=function(e){return e?o:r})(e)}Object.keys(s).forEach(function(e){!("default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e))&&(e in r&&r[e]===s[e]||Object.defineProperty(r,e,{enumerable:!0,get:function(){return s[e]}}))})},22039:(e,r,o)=>{"use strict";o.d(r,{dm:()=>d,fU:()=>g,jY:()=>l,nq:()=>u,vB:()=>c,zt:()=>f});var t=o(14182),n=o(91043),s=o(11046);function a(e,r,o){return`${r}/attachments/${o}`}async function c(e,r,o){try{console.log("=== Starting logo upload process ==="),console.log("Upload params:",{userId:e,missionId:r,fileName:o.name,fileSize:o.size,fileType:o.type});let s=o.name.substring(o.name.lastIndexOf("."));console.log("File extension:",s);let a=`${r}/logo${s}`;console.log("Generated file path:",a),console.log("Converting file to buffer...");let c=await o.arrayBuffer(),l=Buffer.from(c);console.log("Buffer created, size:",l.length),console.log("Creating S3 command with bucket:",t.YE.bucket),console.log("S3 config:",{endpoint:t.YE.endpoint||"MISSING!",region:t.YE.region||"MISSING!",bucket:t.YE.bucket||"MISSING!",hasAccessKey:!!t.YE.accessKey||"MISSING!",hasSecretKey:!!t.YE.secretKey||"MISSING!"}),console.log("FULL S3 PATH:",`${t.YE.endpoint}/${t.YE.bucket}/${a}`);let i=new n.PutObjectCommand({Bucket:t.YE.bucket,Key:a,Body:l,ContentType:o.type,ACL:"public-read"});console.log("Sending upload command to S3/Minio..."),console.log("Command details:",{Bucket:i.input.Bucket,Key:i.input.Key,ContentType:i.input.ContentType,ACL:i.input.ACL,ContentLength:l.length});try{let e=await t.oD.send(i);console.log("Upload successful, result:",e)}catch(e){throw console.error("S3 upload error details:",e),console.error("Error name:",e.name),console.error("Error message:",e.message),e.$metadata&&console.error("Error metadata:",e.$metadata),e}return console.log("Upload complete, returning file path:",a),{filePath:a}}catch(e){throw console.error("Error uploading mission logo:",e),Error("Failed to upload mission logo")}}async function l(e,r,o){try{console.log("=== Starting attachment upload process ==="),console.log("Upload params:",{userId:e,missionId:r,fileName:o.name,fileSize:o.size,fileType:o.type});let s=a(e,r,o.name);console.log("Generated file path:",s),console.log("Converting file to buffer...");let c=await o.arrayBuffer(),l=Buffer.from(c);console.log("Buffer created, size:",l.length),console.log("FULL S3 PATH:",`${t.YE.endpoint}/${t.YE.bucket}/${s}`);let i=new n.PutObjectCommand({Bucket:t.YE.bucket,Key:s,Body:l,ContentType:o.type,ACL:"public-read"});console.log("Sending upload command to S3/Minio..."),console.log("Command details:",{Bucket:i.input.Bucket,Key:i.input.Key,ContentType:i.input.ContentType,ACL:i.input.ACL,ContentLength:l.length});try{let e=await t.oD.send(i);console.log("Upload successful, result:",e)}catch(e){throw console.error("S3 upload error details:",e),console.error("Error name:",e.name),console.error("Error message:",e.message),e.$metadata&&console.error("Error metadata:",e.$metadata),e}return{filename:o.name,filePath:s,fileType:o.type,fileSize:o.size}}catch(e){throw console.error("Error uploading mission attachment:",e),Error("Failed to upload mission attachment")}}async function i(e,r=3600){try{let o=new n.PutObjectCommand({Bucket:t.YE.bucket,Key:e});return await (0,s.A)(t.oD,o,{expiresIn:r})}catch(e){throw console.error("Error generating presigned URL for missions bucket:",e),e}}async function u(e,r,o,t=3600){try{let e=`${r}/logo${o}`;return{uploadUrl:await i(e,t),filePath:e}}catch(e){throw console.error("Error generating mission logo upload URL:",e),Error("Failed to generate upload URL for mission logo")}}async function d(e,r,o,t=3600){try{let n=a(e,r,o);return{uploadUrl:await i(n,t),filePath:n}}catch(e){throw console.error("Error generating mission attachment upload URL:",e),Error("Failed to generate upload URL for mission attachment")}}async function p(e){try{let r=new n.DeleteObjectCommand({Bucket:t.YE.bucket,Key:e});return await t.oD.send(r),!0}catch(e){throw console.error("Error deleting mission object:",e),e}}async function f(e){try{return await p(e),!0}catch(e){throw console.error("Error deleting mission attachment:",e),Error("Failed to delete mission attachment")}}async function g(e){try{return await p(e),!0}catch(e){throw console.error("Error deleting mission logo:",e),Error("Failed to delete mission logo")}}},25037:(e,r,o)=>{"use strict";o.d(r,{_:()=>n});var t=o(70762);let n=t.z.object({NODE_ENV:t.z.enum(["development","test","production"]).default("development"),DATABASE_URL:t.z.string().url(),NEWSDB_URL:t.z.string().regex(/^postgresql:\/\//,"Must be a valid PostgreSQL URL"),NEWS_API_URL:t.z.string().url(),KEYCLOAK_CLIENT_ID:t.z.string(),KEYCLOAK_CLIENT_SECRET:t.z.string(),KEYCLOAK_REALM:t.z.string(),KEYCLOAK_ISSUER:t.z.string().url(),LEANTIME_TOKEN:t.z.string(),LEANTIME_API_URL:t.z.string().url(),ROCKET_CHAT_TOKEN:t.z.string(),ROCKET_CHAT_USER_ID:t.z.string()}).parse(process.env)},26690:(e,r,o)=>{"use strict";o.d(r,{N:()=>c});var t=o(1926),n=o(10591);function s(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"}),o=await r.json();if(!r.ok)throw o;return{...e,accessToken:o.access_token,refreshToken:o.refresh_token??e.refreshToken,accessTokenExpires:Date.now()+1e3*o.expires_in}}catch(r){return console.error("Error refreshing access token:",r),{...e,error:"RefreshAccessTokenError"}}}let c={providers:[(0,t.A)({clientId:s("KEYCLOAK_CLIENT_ID"),clientSecret:s("KEYCLOAK_CLIENT_SECRET"),issuer:s("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 o=r.map(e=>e.replace(/^ROLE_/,"").toLowerCase());return console.log("Profile callback cleaned roles:",o),{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:o}}})],session:{strategy:"jwt",maxAge:2592e3},callbacks:{async jwt({token:e,account:r,profile:o}){if(r&&o){let t=(o.realm_access?.roles||[]).map(e=>e.replace(/^ROLE_/,"").toLowerCase());e.accessToken=r.access_token??"",e.refreshToken=r.refresh_token??"",e.accessTokenExpires=r.expires_at??0,e.sub=o.sub,e.role=t,e.username=o.preferred_username??"",e.first_name=o.given_name??"",e.last_name=o.family_name??""}else if(e.accessToken)try{let r=(0,n.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)}return Date.now()<1e3*e.accessTokenExpires?e:a(e)},async session({session:e,token:r}){if(r.error)throw Error(r.error);let o=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:o,nextcloudInitialized:!1},e.accessToken=r.accessToken,e}},pages:{signIn:"/signin",error:"/signin"},debug:!1}},78335:()=>{},79464:(e,r,o)=>{"use strict";o.d(r,{z:()=>s});var t=o(96330),n=o(25037);let s=globalThis.prisma||new t.PrismaClient({datasources:{db:{url:n._.DATABASE_URL}},log:["query"]})},96487:()=>{}};