@@ -8,6 +8,7 @@ import { generateRequestId } from '@/lib/core/utils/request'
88import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
99import { processFilesToUserFiles } from '@/lib/uploads/utils/file-utils'
1010import { downloadFileFromStorage } from '@/lib/uploads/utils/file-utils.server'
11+ import { assertToolFileAccess } from '@/app/api/files/authorization'
1112
1213export const dynamic = 'force-dynamic'
1314
@@ -19,7 +20,7 @@ export const POST = withRouteHandler(async (request: NextRequest) => {
1920 try {
2021 const authResult = await checkInternalAuth ( request , { requireWorkflowId : false } )
2122
22- if ( ! authResult . success ) {
23+ if ( ! authResult . success || ! authResult . userId ) {
2324 logger . warn ( `[${ requestId } ] Unauthorized Discord send attempt: ${ authResult . error } ` )
2425 return NextResponse . json (
2526 {
@@ -30,8 +31,9 @@ export const POST = withRouteHandler(async (request: NextRequest) => {
3031 )
3132 }
3233
34+ const userId = authResult . userId
3335 logger . info ( `[${ requestId } ] Authenticated Discord send request via ${ authResult . authType } ` , {
34- userId : authResult . userId ,
36+ userId,
3537 } )
3638
3739 const parsed = await parseRequest ( discordSendMessageContract , request , { } )
@@ -134,17 +136,30 @@ export const POST = withRouteHandler(async (request: NextRequest) => {
134136 }
135137 formData . append ( 'payload_json' , JSON . stringify ( payload ) )
136138
137- const downloadedFiles = await Promise . all (
138- userFiles . map ( async ( userFile , i ) => {
139- logger . info ( `[${ requestId } ] Downloading file ${ i } : ${ userFile . name } ` )
140- const buffer = await downloadFileFromStorage ( userFile , requestId , logger )
141- logger . info ( `[${ requestId } ] Added file ${ i } : ${ userFile . name } (${ buffer . length } bytes)` )
142- return { userFile, buffer }
139+ const accessResults = await Promise . all (
140+ userFiles . map ( ( file ) => assertToolFileAccess ( file . key , userId , requestId , logger ) )
141+ )
142+ const denied = accessResults . find ( ( r ) => r !== null )
143+ if ( denied ) return denied
144+
145+ const buffers = await Promise . all (
146+ userFiles . map ( async ( file , i ) => {
147+ try {
148+ logger . info ( `[${ requestId } ] Downloading file ${ i } : ${ file . name } ` )
149+ return await downloadFileFromStorage ( file , requestId , logger )
150+ } catch ( error ) {
151+ logger . error ( `[${ requestId } ] Failed to download attachment ${ file . name } :` , error )
152+ throw new Error (
153+ `Failed to download attachment "${ file . name } ": ${ error instanceof Error ? error . message : 'Unknown error' } `
154+ )
155+ }
143156 } )
144157 )
145158
146- for ( let i = 0 ; i < downloadedFiles . length ; i ++ ) {
147- const { userFile, buffer } = downloadedFiles [ i ]
159+ for ( let i = 0 ; i < userFiles . length ; i ++ ) {
160+ const userFile = userFiles [ i ]
161+ const buffer = buffers [ i ]
162+ logger . info ( `[${ requestId } ] Added file ${ i } : ${ userFile . name } (${ buffer . length } bytes)` )
148163 filesOutput . push ( {
149164 name : userFile . name ,
150165 mimeType : userFile . type || 'application/octet-stream' ,
0 commit comments