1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-12-01 04:43:29 +03:00

Merge pull request #659 from matrix-org/t3chguy/media_fixes

fix auth header and filename=undefined
This commit is contained in:
David Baker
2018-06-18 13:46:59 +01:00
committed by GitHub
2 changed files with 34 additions and 5 deletions

View File

@@ -1071,6 +1071,10 @@ MatrixBaseApis.prototype.searchUserDirectory = function(opts) {
* @param {string=} opts.name Name to give the file on the server. Defaults * @param {string=} opts.name Name to give the file on the server. Defaults
* to <tt>file.name</tt>. * to <tt>file.name</tt>.
* *
* @param {boolean=} opts.includeFilename if false will not send the filename,
* e.g for encrypted file uploads where filename leaks are undesirable.
* Defaults to true.
*
* @param {string=} opts.type Content-type for the upload. Defaults to * @param {string=} opts.type Content-type for the upload. Defaults to
* <tt>file.type</tt>, or <tt>applicaton/octet-stream</tt>. * <tt>file.type</tt>, or <tt>applicaton/octet-stream</tt>.
* *

View File

@@ -118,6 +118,10 @@ module.exports.MatrixHttpApi.prototype = {
* @param {string=} opts.name Name to give the file on the server. Defaults * @param {string=} opts.name Name to give the file on the server. Defaults
* to <tt>file.name</tt>. * to <tt>file.name</tt>.
* *
* @param {boolean=} opts.includeFilename if false will not send the filename,
* e.g for encrypted file uploads where filename leaks are undesirable.
* Defaults to true.
*
* @param {string=} opts.type Content-type for the upload. Defaults to * @param {string=} opts.type Content-type for the upload. Defaults to
* <tt>file.type</tt>, or <tt>applicaton/octet-stream</tt>. * <tt>file.type</tt>, or <tt>applicaton/octet-stream</tt>.
* *
@@ -152,6 +156,9 @@ module.exports.MatrixHttpApi.prototype = {
opts = {}; opts = {};
} }
// default opts.includeFilename to true (ignoring falsey values)
const includeFilename = opts.includeFilename !== false;
// if the file doesn't have a mime type, use a default since // if the file doesn't have a mime type, use a default since
// the HS errors if we don't supply one. // the HS errors if we don't supply one.
const contentType = opts.type || file.type || 'application/octet-stream'; const contentType = opts.type || file.type || 'application/octet-stream';
@@ -272,10 +279,26 @@ module.exports.MatrixHttpApi.prototype = {
} }
}); });
let url = this.opts.baseUrl + "/_matrix/media/v1/upload"; let url = this.opts.baseUrl + "/_matrix/media/v1/upload";
url += "?access_token=" + encodeURIComponent(this.opts.accessToken);
url += "&filename=" + encodeURIComponent(fileName); const queryArgs = [];
if (includeFilename && fileName) {
queryArgs.push("filename=" + encodeURIComponent(fileName));
}
if (!this.useAuthorizationHeader) {
queryArgs.push("access_token="
+ encodeURIComponent(this.opts.accessToken));
}
if (queryArgs.length > 0) {
url += "?" + queryArgs.join("&");
}
xhr.open("POST", url); xhr.open("POST", url);
if (this.useAuthorizationHeader) {
xhr.setRequestHeader("Authorization", "Bearer " + this.opts.accessToken);
}
xhr.setRequestHeader("Content-Type", contentType); xhr.setRequestHeader("Content-Type", contentType);
xhr.send(body); xhr.send(body);
promise = defer.promise; promise = defer.promise;
@@ -283,9 +306,11 @@ module.exports.MatrixHttpApi.prototype = {
// dirty hack (as per _request) to allow the upload to be cancelled. // dirty hack (as per _request) to allow the upload to be cancelled.
promise.abort = xhr.abort.bind(xhr); promise.abort = xhr.abort.bind(xhr);
} else { } else {
const queryParams = { const queryParams = {};
filename: fileName,
}; if (includeFilename && fileName) {
queryParams.filename = fileName;
}
promise = this.authedRequest( promise = this.authedRequest(
opts.callback, "POST", "/upload", queryParams, body, { opts.callback, "POST", "/upload", queryParams, body, {