diff options
| author | Julia <julia@insertdomain.name> | 2025-05-29 00:07:38 +0000 |
|---|---|---|
| committer | Julia <julia@insertdomain.name> | 2025-05-29 00:07:38 +0000 |
| commit | 6b554c178b81f13f83a69b19d44b72b282a0c119 (patch) | |
| tree | f5537f1a56323a4dd57ba150b3cb84a2d8b5dc63 /packages/backend/src/server/FileServerService.ts | |
| parent | merge: Security fixes (!970) (diff) | |
| parent | bump version for release (diff) | |
| download | sharkey-6b554c178b81f13f83a69b19d44b72b282a0c119.tar.gz sharkey-6b554c178b81f13f83a69b19d44b72b282a0c119.tar.bz2 sharkey-6b554c178b81f13f83a69b19d44b72b282a0c119.zip | |
merge: release 2025.4.2 (!1051)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1051
Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
Approved-by: Julia <julia@insertdomain.name>
Diffstat (limited to 'packages/backend/src/server/FileServerService.ts')
| -rw-r--r-- | packages/backend/src/server/FileServerService.ts | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/packages/backend/src/server/FileServerService.ts b/packages/backend/src/server/FileServerService.ts index a7e13a1b78..4ef5539cff 100644 --- a/packages/backend/src/server/FileServerService.ts +++ b/packages/backend/src/server/FileServerService.ts @@ -195,6 +195,10 @@ export class FileServerService { reply.header('Content-Length', file.file.size); if (!image) { + if (file.file.size > 0) { + reply.header('Accept-Ranges', 'bytes'); + } + if (request.headers.range && file.file.size > 0) { const range = request.headers.range as string; const parts = range.replace(/bytes=/, '').split('-'); @@ -215,7 +219,6 @@ export class FileServerService { }; reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); - reply.header('Accept-Ranges', 'bytes'); reply.header('Content-Length', chunksize); reply.code(206); } else { @@ -257,6 +260,10 @@ export class FileServerService { reply.header('Cache-Control', 'max-age=31536000, immutable'); reply.header('Content-Disposition', contentDisposition('inline', filename)); + if (file.file.size > 0) { + reply.header('Accept-Ranges', 'bytes'); + } + if (request.headers.range && file.file.size > 0) { const range = request.headers.range as string; const parts = range.replace(/bytes=/, '').split('-'); @@ -271,7 +278,6 @@ export class FileServerService { end, }); reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); - reply.header('Accept-Ranges', 'bytes'); reply.header('Content-Length', chunksize); reply.code(206); return fileStream; @@ -284,6 +290,10 @@ export class FileServerService { reply.header('Cache-Control', 'max-age=31536000, immutable'); reply.header('Content-Disposition', contentDisposition('inline', file.filename)); + if (file.file.size > 0) { + reply.header('Accept-Ranges', 'bytes'); + } + if (request.headers.range && file.file.size > 0) { const range = request.headers.range as string; const parts = range.replace(/bytes=/, '').split('-'); @@ -298,7 +308,6 @@ export class FileServerService { end, }); reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); - reply.header('Accept-Ranges', 'bytes'); reply.header('Content-Length', chunksize); reply.code(206); return fileStream; @@ -442,6 +451,10 @@ export class FileServerService { } if (!image) { + if (file.file && file.file.size > 0) { + reply.header('Accept-Ranges', 'bytes'); + } + if (request.headers.range && file.file && file.file.size > 0) { const range = request.headers.range as string; const parts = range.replace(/bytes=/, '').split('-'); @@ -462,7 +475,6 @@ export class FileServerService { }; reply.header('Content-Range', `bytes ${start}-${end}/${file.file.size}`); - reply.header('Accept-Ranges', 'bytes'); reply.header('Content-Length', chunksize); reply.code(206); } else { @@ -519,7 +531,7 @@ export class FileServerService { @bindThis private async downloadAndDetectTypeFromUrl(url: string): Promise< - { state: 'remote' ; mime: string; ext: string | null; path: string; cleanup: () => void; filename: string; } + { state: 'remote'; mime: string; ext: string | null; path: string; cleanup: () => void; filename: string; } > { const [path, cleanup] = await createTemp(); try { @@ -663,9 +675,11 @@ export class FileServerService { if (info.blocked) { reply.code(429); reply.send({ - message: 'Rate limit exceeded. Please try again later.', - code: 'RATE_LIMIT_EXCEEDED', - id: 'd5826d14-3982-4d2e-8011-b9e9f02499ef', + error: { + message: 'Rate limit exceeded. Please try again later.', + code: 'RATE_LIMIT_EXCEEDED', + id: 'd5826d14-3982-4d2e-8011-b9e9f02499ef', + }, }); return false; |