Skip to content

Commit 4666c40

Browse files
committed
enhance http calls to OP to check content-type on response for json DuendeArchive#488
1 parent c6d76a5 commit 4666c40

File tree

6 files changed

+84
-45
lines changed

6 files changed

+84
-45
lines changed

dist/oidc-client.js

Lines changed: 11 additions & 6 deletions
Large diffs are not rendered by default.

dist/oidc-client.min.js

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/oidc-client.js

Lines changed: 11 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/oidc-client.min.js

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/JsonService.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,18 @@ export class JsonService {
2626
Log.debug("HTTP response received, status", req.status);
2727

2828
if (req.status === 200) {
29-
try {
30-
resolve(JSON.parse(req.responseText));
29+
var contentType = req.getResponseHeader("Content-Type");
30+
if (contentType && contentType.startsWith("application/json")) {
31+
try {
32+
resolve(JSON.parse(req.responseText));
33+
}
34+
catch (e) {
35+
Log.error("Error parsing JSON response", e.message);
36+
reject(e);
37+
}
3138
}
32-
catch (e) {
33-
Log.error("Error parsing JSON response", e.message);
34-
reject(e);
39+
else {
40+
reject(Error("Invalid response Content-Type: " + contentType + ", from URL: " + url));
3541
}
3642
}
3743
else {

test/unit/JsonService.spec.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ describe("JsonService", function() {
6060
});
6161

6262
stubHttpRequest.status = 200;
63+
stubHttpRequest.responseHeaders.set('Content-Type', 'application/json');
6364
stubHttpRequest.responseText = JSON.stringify({foo:1, bar:'test'});
6465
stubHttpRequest.onload();
6566
});
@@ -94,12 +95,30 @@ describe("JsonService", function() {
9495

9596
stubHttpRequest.onerror();
9697
});
98+
99+
it("should reject promise when http response content type is not json", function(done) {
100+
let p = subject.getJson("http://test");
101+
102+
p.then(result => {
103+
assert.fail();
104+
}, error => {
105+
error.should.be.instanceof(Error);
106+
error.message.indexOf('text/html').should.be.above(-1);
107+
done();
108+
});
109+
110+
stubHttpRequest.status = 200;
111+
stubHttpRequest.responseHeaders.set('Content-Type', 'text/html');
112+
stubHttpRequest.responseText = JSON.stringify({foo:1, bar:'test'});
113+
stubHttpRequest.onload();
114+
});
97115
});
98116
});
99117

100118
class StubXMLHttpRequest {
101119
constructor() {
102120
this.headers = new Map();
121+
this.responseHeaders = new Map();
103122
}
104123

105124
open(method, url) {
@@ -111,6 +130,10 @@ class StubXMLHttpRequest {
111130
this.headers.set(header, value);
112131
}
113132

133+
getResponseHeader(name){
134+
return this.responseHeaders.get(name);
135+
}
136+
114137
send() {
115138
}
116139
}

0 commit comments

Comments
 (0)