Skip to content

Commit

Permalink
Make sure we handle failures in mediaproxied requests gracefully (#505)
Browse files Browse the repository at this point in the history
* Make sure we handle failures in mediaproxied requests gracefully

* changelog

* linting

* changelog

* Don't set response headers if they're not present
  • Loading branch information
tadzik authored Sep 5, 2024
1 parent 69d531b commit 4792f07
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
1 change: 1 addition & 0 deletions changelog.d/505.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Make sure we handle failures in mediaproxied requests gracefully.
37 changes: 26 additions & 11 deletions src/components/media-proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,17 +153,32 @@ export class MediaProxy {
}
const [, serverName, mediaId] = mxcMatch;
const url = `${this.matrixClient.homeserverUrl}/_matrix/client/v1/media/download/${serverName}/${mediaId}`;
get(url, {
headers: {
'Authorization': `Bearer ${this.matrixClient.accessToken}`,
},
}, (getRes) => {
const { statusCode } = res;
res.setHeader('content-disposition', getRes.headers['content-disposition'] as string);
res.setHeader('content-type', getRes.headers['content-type'] as string);
res.setHeader('content-length', getRes.headers['content-length'] as string);
res.status(statusCode);
getRes.pipe(res);
return new Promise<void>((resolve, reject) => {
get(url, {
headers: {
'Authorization': `Bearer ${this.matrixClient.accessToken}`,
},
}, (getRes) => {
try {
const { statusCode } = res;
if (getRes.headers['content-disposition']) {
res.setHeader('content-disposition', getRes.headers['content-disposition']);
}
if (getRes.headers['content-type']) {
res.setHeader('content-type', getRes.headers['content-type']);
}
if (getRes.headers['content-length']) {
res.setHeader('content-length', getRes.headers['content-length']);
}
res.status(statusCode);
getRes.pipe(res);
resolve();
}
catch (err: unknown) {
log.error('Failed to handle authenticated media request:', err);
reject(new ApiError('Failed to handle authenticated media request', ErrCode.Unknown));
}
});
});
}

Expand Down

0 comments on commit 4792f07

Please sign in to comment.