1 line
6.5 KiB
JavaScript
1 line
6.5 KiB
JavaScript
"use strict";exports.id=2620,exports.ids=[2620],exports.modules={14182:(e,t,r)=>{r.d(t,{$R:()=>a,Ui:()=>c,XB:()=>l,XR:()=>u,YE:()=>s,ZT:()=>d,b4:()=>p,oD:()=>i});var o=r(91043);r(11046);let s={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},n={region:s.region,endpoint:s.endpoint,forcePathStyle:!0};s.accessKey&&s.secretKey&&Object.assign(n,{credentials:{accessKeyId:s.accessKey,secretAccessKey:s.secretKey}});let i=new o.S3Client(n);async function c(e,t){try{let r=`user-${e}/${t}/`;console.log(`Listing objects with prefix: ${r}`);let n=new o.ListObjectsV2Command({Bucket:s.bucket,Prefix:r,Delimiter:"/"}),c=await i.send(n);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 t=new o.GetObjectCommand({Bucket:s.bucket,Key:e}),r=await i.send(t);return await r.Body?.transformToString()}catch(e){throw console.error("Error getting object content:",e),e}}async function a(e,t,r){try{if(console.log(`Attempting to upload to S3/Minio: ${e}`),!s.bucket)throw Error("S3 bucket name is not configured");let n=new o.PutObjectCommand({Bucket:s.bucket,Key:e,Body:t,ContentType:r||(e.endsWith(".md")?"text/markdown":"text/plain")});console.log(`S3 PutObject request prepared for ${e}`);let c=await i.send(n);return console.log(`S3 PutObject successful for ${e}, ETag: ${c.ETag}`),{id:e,title:e.split("/").pop()?.replace(".md","")||"",lastModified:new Date().toISOString(),size:t.length,type:"file",mime:r||(e.endsWith(".md")?"text/markdown":"text/plain"),etag:c.ETag}}catch(t){throw console.error(`Error putting object to S3/Minio (${e}):`,t),t?.name==="NoSuchBucket"&&console.error(`Bucket "${s.bucket}" does not exist. Please create it first.`),t}}async function u(e){try{let t=new o.DeleteObjectCommand({Bucket:s.bucket,Key:e});return await i.send(t),!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 t=[];for(let r of["notes","diary","health","contacts"])try{let o=`user-${e}/${r}/`;console.log(`Creating folder: ${o}`),await a(o,"","application/x-directory");let s=`user-${e}/${r}/.placeholder`;await a(s,"Folder placeholder","text/plain"),t.push(r)}catch(e){console.error(`Error creating folder ${r}:`,e)}return console.log(`Successfully created ${t.length} folders for user ${e}: ${t.join(", ")}`),!0}catch(e){throw console.error("Error creating folder structure:",e),e}}function p(e,t){if(!e)return"";if(e.startsWith("http"))return e;console.log("Generating public URL for:",e);let r=e.startsWith("/")?e.substring(1):e;if(r.startsWith("pages/")){let e=process.env.NEXT_PUBLIC_MINIO_BASE_URL||process.env.MINIO_PUBLIC_URL;if(e){let t=e.replace(/\/$/,""),o=`${t}/${r}`;return console.log("Generated special public URL for pages path:",o),o}}let o=t||s.bucket,n=s.endpoint?.replace(/\/$/,"");if(console.log("S3 Config for URL generation:",{endpoint:n,bucket:o,cleanPath:r}),!n)return console.warn("No S3/Minio endpoint configured, returning original path"),r;let i=`${n}/${o}/${r}`;return console.log("Generated public URL:",i),i}(async()=>{try{console.log("Testing Minio/S3 connection...");let e=new o.ListObjectsV2Command({Bucket:s.bucket,MaxKeys:1}),t=await i.send(e);console.log("Minio/S3 connection successful! Bucket exists and is accessible."),console.log(`Bucket details: ${s.bucket}, contains ${t.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.")}})(),s.endpoint&&s.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:s.endpoint||"MISSING!",region:s.region||"MISSING!",bucket:s.bucket||"MISSING!",hasAccessKey:!!s.accessKey||"MISSING!",hasSecretKey:!!s.secretKey||"MISSING!"})},22620:(e,t,r)=>{r.r(t),r.d(t,{GET:()=>l});var o=r(32190),s=r(19854),n=r(26690),i=r(14182);async function c(e){let t=await (0,s.getServerSession)(n.N);return t?.user?.id?{authorized:!0,userId:t.user.id}:(console.error("Unauthorized access attempt:",{url:e.url,method:e.method,headers:Object.fromEntries(e.headers)}),{authorized:!1,userId:null})}async function l(e){try{let t,{authorized:r,userId:s}=await c(e);if(!r||!s)return o.NextResponse.json({error:"Unauthorized"},{status:401});let{searchParams:n}=new URL(e.url),l=n.get("path"),a=n.get("id");if(!l&&!a)return o.NextResponse.json({error:"Path or ID parameter is required"},{status:400});if(a){if(!(t=a).startsWith(`user-${s}/`))return console.error("Unauthorized file access attempt:",{userId:s,fileId:a}),o.NextResponse.json({error:"Unauthorized access to file"},{status:403})}else if(!l)return o.NextResponse.json({error:"Invalid parameters"},{status:400});else if(l.includes(`/files/cube-${s}/`)||l.includes(`user-${s}/`))t=l;else{if(!(l.startsWith("/files/")||l.includes("/Private/")))return console.error("Unauthorized file access attempt:",{userId:s,filePath:l}),o.NextResponse.json({error:"Unauthorized access to file"},{status:403});let e=l.split("/").filter(Boolean),r=e[e.length-1],n="notes";l.includes("/Notes/")?n="notes":l.includes("/Diary/")?n="diary":l.includes("/Contacts/")?n="contacts":l.includes("/Health/")&&(n="health"),t=`user-${s}/${n}/${r}`,console.log("Converted NextCloud path to S3 key:",{path:l,key:t})}console.log("Fetching file content from S3:",{key:t});let u=await (0,i.XB)(t);if(!u)return o.NextResponse.json({error:"File not found"},{status:404});return o.NextResponse.json({content:u})}catch(e){return console.error("Error fetching file content:",e),o.NextResponse.json({error:"Internal server error",details:e instanceof Error?e.message:String(e)},{status:500})}}}}; |