From dfc91a253c19746b1062189740242c5b1992c7a5 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Tue, 8 Aug 2017 16:37:14 +0200 Subject: Parse Sabre Exception in OC.Files.Client and file-upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In case of error, instead of a generic error message, an upload will display whichever message is returned in the Sabre Exception, if applicable. Signed-off-by: Daniel Calviño Sánchez --- core/js/files/client.js | 47 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 10 deletions(-) (limited to 'core/js/files') diff --git a/core/js/files/client.js b/core/js/files/client.js index e810381342a..3fe24e62508 100644 --- a/core/js/files/client.js +++ b/core/js/files/client.js @@ -394,6 +394,26 @@ return status >= 200 && status <= 299; }, + /** + * Parse the Sabre exception out of the given response, if any + * + * @param {Object} response object + * @return {Object} array of parsed message and exception (only the first one) + */ + _getSabreException: function(response) { + var result = {}; + var xml = response.xhr.responseXML; + var messages = xml.getElementsByTagNameNS('http://sabredav.org/ns', 'message'); + var exceptions = xml.getElementsByTagNameNS('http://sabredav.org/ns', 'exception'); + if (messages.length) { + result.message = messages[0].textContent; + } + if (exceptions.length) { + result.exception = exceptions[0].textContent; + } + return result; + }, + /** * Returns the default PROPFIND properties to use during a call. * @@ -447,7 +467,8 @@ } deferred.resolve(result.status, results); } else { - deferred.reject(result.status); + result = _.extend(result, self._getSabreException(result)); + deferred.reject(result.status, result); } }); return promise; @@ -521,7 +542,8 @@ var results = self._parseResult(result.body); deferred.resolve(result.status, results); } else { - deferred.reject(result.status); + result = _.extend(result, self._getSabreException(result)); + deferred.reject(result.status, result); } }); return promise; @@ -560,7 +582,8 @@ if (self._isSuccessStatus(result.status)) { deferred.resolve(result.status, self._parseResult([result.body])[0]); } else { - deferred.reject(result.status); + result = _.extend(result, self._getSabreException(result)); + deferred.reject(result.status, result); } } ); @@ -590,7 +613,8 @@ if (self._isSuccessStatus(result.status)) { deferred.resolve(result.status, result.body); } else { - deferred.reject(result.status); + result = _.extend(result, self._getSabreException(result)); + deferred.reject(result.status, result); } } ); @@ -639,7 +663,8 @@ if (self._isSuccessStatus(result.status)) { deferred.resolve(result.status); } else { - deferred.reject(result.status); + result = _.extend(result, self._getSabreException(result)); + deferred.reject(result.status, result); } } ); @@ -663,7 +688,8 @@ if (self._isSuccessStatus(result.status)) { deferred.resolve(result.status); } else { - deferred.reject(result.status); + result = _.extend(result, self._getSabreException(result)); + deferred.reject(result.status, result); } } ); @@ -727,11 +753,12 @@ this._buildUrl(path), headers ).then( - function(response) { - if (self._isSuccessStatus(response.status)) { - deferred.resolve(response.status); + function(result) { + if (self._isSuccessStatus(result.status)) { + deferred.resolve(result.status); } else { - deferred.reject(response.status); + result = _.extend(result, self._getSabreException(result)); + deferred.reject(result.status, result); } } ); -- cgit v1.2.3