fixed #54: Requests are not responding on iOS with non-string values in header object

This commit is contained in:
Sefa Ilkimen
2018-01-04 00:40:40 +01:00
parent d67e80dfe0
commit a9c3be124e
5 changed files with 76 additions and 2 deletions
+1
View File
@@ -3,6 +3,7 @@
## 1.9.1
- Fixed #45: does not encode arrays correctly as HTTP GET parameter on Android
- Fixed #54: requests are not responding on iOS with non-string values in header object
## v1.9.0
+1 -1
View File
@@ -64,7 +64,7 @@ cordova.plugin.http.useBasicAuth('user', 'password');
```
### setHeader
Set a header for all future requests to a specified host. Takes a hostname, a header and a value.
Set a header for all future requests to a specified host. Takes a hostname, a header and a value (must be a string value).
```js
cordova.plugin.http.setHeader('Hostname', 'Header', 'Value');
+16 -1
View File
@@ -33,6 +33,16 @@ const app = {
};
},
throw: function(error) {
document.getElementById('statusInput').value = 'finished';
app.printResult('result - throwed', error.message);
app.lastResult = {
type: 'throwed',
message: error.message
};
},
getResult: function(cb) {
cb(app.lastResult);
},
@@ -46,7 +56,12 @@ const app = {
document.getElementById('expectedTextarea').value = expectedText;
document.getElementById('resultTextarea').value = '';
document.getElementById('descriptionLbl').innerText = titleText;
testDefinition.func(app.resolve, app.reject);
try {
testDefinition.func(app.resolve, app.reject);
} catch (error) {
app.throw(error);
}
},
onBeforeTest: function(testIndex, cb) {
+20
View File
@@ -282,6 +282,26 @@ const tests = [
.url
.should.be.equal('http://httpbin.org/get?myArray[]=val1&myArray[]=val2&myArray[]=val3&myString=testString');
}
},{
description: 'should reject non-string values in local header object #54',
expected: 'rejected: {"status": 0, "error": "advanced-http: header values must be strings" ...',
func: function(resolve, reject) {
cordova.plugin.http.get('http://httpbin.org/get', {}, { myTestHeader: 1 }, resolve, reject);
},
validationFunc: function(driver, result) {
result.type.should.be.equal('rejected');
result.data.error.should.be.equal('advanced-http: header values must be strings');
}
},{
description: 'should throw an error while setting non-string value as global header #54',
expected: 'throwed: "advanced-http: header values must be strings"',
func: function(resolve, reject) {
cordova.plugin.http.setHeader('myTestHeader', 2);
},
validationFunc: function(driver, result) {
result.type.should.be.equal('throwed');
result.message.should.be.equal('advanced-http: header values must be strings');
}
}
];
+38
View File
@@ -42,6 +42,7 @@ var cookieHandler = require(pluginId + '.cookie-handler');
var MANDATORY_SUCCESS = 'advanced-http: missing mandatory "onSuccess" callback function';
var MANDATORY_FAIL = 'advanced-http: missing mandatory "onFail" callback function';
var ADDING_COOKIES_NOT_SUPPORTED = 'advanced-http: "setHeader" does not support adding cookies, please use "setCookie" function instead';
var HEADER_VALUE_MUST_BE_STRING = 'advanced-http: header values must be strings';
// Thanks Mozilla: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22
function b64EncodeUnicode(str) {
@@ -65,6 +66,23 @@ function mergeHeaders(globalHeaders, localHeaders) {
return localHeaders;
}
function checkHeaders(headers, onFail) {
var keys = Object.keys(headers);
var key;
for (var i = 0; i < keys.length; i++) {
key = keys[i];
if (typeof headers[key] !== 'string') {
return onFail({
status: 0,
error: HEADER_VALUE_MUST_BE_STRING,
headers: {}
});
}
}
}
function checkSerializer(serializer) {
serializer = serializer || '';
serializer = serializer.trim().toLowerCase();
@@ -173,6 +191,10 @@ var http = {
throw new Error(ADDING_COOKIES_NOT_SUPPORTED);
}
if (typeof value !== 'string') {
throw new Error(HEADER_VALUE_MUST_BE_STRING);
}
this.headers[host] = this.headers[host] || {};
this.headers[host][header] = value;
},
@@ -212,6 +234,8 @@ var http = {
data = data || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, success);
var onFail = injectCookieHandler(url, failure);
@@ -223,6 +247,8 @@ var http = {
params = params || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, success);
var onFail = injectCookieHandler(url, failure);
@@ -234,6 +260,8 @@ var http = {
data = data || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, success);
var onFail = injectCookieHandler(url, failure);
@@ -246,6 +274,8 @@ var http = {
data = data || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, success);
var onFail = injectCookieHandler(url, failure);
@@ -258,6 +288,8 @@ var http = {
params = params || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, success);
var onFail = injectCookieHandler(url, failure);
@@ -269,6 +301,8 @@ var http = {
params = params || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, success);
var onFail = injectCookieHandler(url, failure);
@@ -280,6 +314,8 @@ var http = {
params = params || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, success);
var onFail = injectCookieHandler(url, failure);
@@ -291,6 +327,8 @@ var http = {
params = params || {};
headers = getMergedHeaders(url, headers, this.headers);
checkHeaders(headers, failure);
var onSuccess = injectCookieHandler(url, injectFileEntryHandler(success));
var onFail = injectCookieHandler(url, failure);