NeahNew/.next/server/chunks/2620.js
2026-01-02 14:32:36 +01:00

1 line
3.7 KiB
JavaScript

"use strict";exports.id=2620,exports.ids=[2620],exports.modules={14182:(e,t,r)=>{r.d(t,{$R:()=>i,Ui:()=>l,XB:()=>a,XR:()=>c,YE:()=>n,ZT:()=>d,b4:()=>u,oD:()=>o});var s=r(91043);let n={endpoint:"https://dome-api.slm-lab.net",region:"us-east-1",bucket:process.env.S3_BUCKET||"pages",accessKey:"4aBT4CMb7JIMMyUtp4Pl",secretKey:"HGn39XhCIlqOjmDVzRK9MED2Fci2rYvDDgbLFElg"},o=new s.S3Client({region:n.region,endpoint:n.endpoint,credentials:{accessKeyId:n.accessKey,secretAccessKey:n.secretKey},forcePathStyle:!0});async function i(e,t,r){let i=new s.PutObjectCommand({Bucket:n.bucket,Key:e,Body:"string"==typeof t?Buffer.from(t,"utf-8"):t,ContentType:r||"text/plain"});return await o.send(i),{key:e}}async function a(e){try{let t=new s.GetObjectCommand({Bucket:n.bucket,Key:e}),r=await o.send(t);if(!r.Body)return null;let i=[];for await(let e of r.Body)i.push(e);return Buffer.concat(i).toString("utf-8")}catch(e){return console.error("Error getting object content:",e),null}}async function c(e){let t=new s.DeleteObjectCommand({Bucket:n.bucket,Key:e});await o.send(t)}async function l(e,t){let r=`user-${e}/${t}/`,i=new s.ListObjectsV2Command({Bucket:n.bucket,Prefix:r,Delimiter:"/"});return((await o.send(i)).Contents||[]).filter(e=>e.Key&&!e.Key.endsWith("/")&&!e.Key.includes(".placeholder")).map(e=>({key:e.Key,name:e.Key.split("/").pop()||e.Key,size:e.Size,lastModified:e.LastModified}))}function u(e,t){if(!e)return"";if(e.startsWith("http"))return e;let r=e.startsWith("/")?e.substring(1):e,s=n.endpoint?.replace(/\/$/,""),o=t||n.bucket;return s?`${s}/${o}/${r}`:r}async function d(e){for(let t of["notes","diary","health","contacts"])try{let r=`user-${e}/${t}/`;await i(r,"","application/x-directory");let s=`user-${e}/${t}/.placeholder`;await i(s,"Folder placeholder","text/plain"),console.log(`Created folder: ${r}`)}catch(r){console.error(`Error creating folder ${t} for user ${e}:`,r)}}},22620:(e,t,r)=>{r.r(t),r.d(t,{GET:()=>c});var s=r(32190),n=r(19854),o=r(26690),i=r(14182);async function a(e){let t=await (0,n.getServerSession)(o.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 c(e){try{let t,{authorized:r,userId:n}=await a(e);if(!r||!n)return s.NextResponse.json({error:"Unauthorized"},{status:401});let{searchParams:o}=new URL(e.url),c=o.get("path"),l=o.get("id");if(!c&&!l)return s.NextResponse.json({error:"Path or ID parameter is required"},{status:400});if(l){if(!(t=l).startsWith(`user-${n}/`))return console.error("Unauthorized file access attempt:",{userId:n,fileId:l}),s.NextResponse.json({error:"Unauthorized access to file"},{status:403})}else if(!c)return s.NextResponse.json({error:"Invalid parameters"},{status:400});else if(c.includes(`/files/cube-${n}/`)||c.includes(`user-${n}/`))t=c;else{if(!(c.startsWith("/files/")||c.includes("/Private/")))return console.error("Unauthorized file access attempt:",{userId:n,filePath:c}),s.NextResponse.json({error:"Unauthorized access to file"},{status:403});let e=c.split("/").filter(Boolean),r=e[e.length-1],o="notes";c.includes("/Notes/")?o="notes":c.includes("/Diary/")?o="diary":c.includes("/Contacts/")?o="contacts":c.includes("/Health/")&&(o="health"),t=`user-${n}/${o}/${r}`,console.log("Converted NextCloud path to S3 key:",{path:c,key:t})}console.log("Fetching file content from S3:",{key:t});let u=await (0,i.XB)(t);if(!u)return s.NextResponse.json({error:"File not found"},{status:404});return s.NextResponse.json({content:u})}catch(e){return console.error("Error fetching file content:",e),s.NextResponse.json({error:"Internal server error",details:e instanceof Error?e.message:String(e)},{status:500})}}}};