Skip to content

Commit e7d9f1e

Browse files
committed
AuthorizationResultParser
1 parent 3612084 commit e7d9f1e

5 files changed

Lines changed: 76 additions & 3 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "oidc-client",
33
"version": "1.0.0",
44
"description": "OpenID Connect (OIDC) client library",
5-
"main": "src/index.js",
5+
"main": "src/_index.js",
66
"scripts": {
77
"build": "webpack",
88
"test": "mocha --compilers js:babel-register test/*.spec.js"

src/AuthorizationResultParser.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
export default class AuthorizationResultParser {
2+
constructor(location) {
3+
this._location = location;
4+
}
5+
6+
parseResult(value) {
7+
value = value || this._location.hash;
8+
9+
var idx = value.lastIndexOf("#");
10+
if (idx >= 0) {
11+
value = value.substr(idx + 1);
12+
}
13+
14+
var params = {},
15+
regex = /([^&=]+)=([^&]*)/g,
16+
m;
17+
18+
var counter = 0;
19+
while (m = regex.exec(value)) {
20+
params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
21+
if (counter++ > 50) {
22+
return {
23+
error: "Response exceeded expected number of parameters"
24+
};
25+
}
26+
}
27+
28+
for (var prop in params) {
29+
return params;
30+
}
31+
}
32+
}

src/OidcClientService.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export default class OidcClientService {
2-
constructor(settings, metadataService) {
2+
constructor(settings, metadataService, authorizationResultParser) {
33
this._settings = settings;
44
this._metadataService = metadataService;
5+
this._authorizationResultParser = authorizationResultParser;
56
}
67
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1+
import AuthorizationResultParser from './AuthorizationResultParser';
12
import XMLHttpRequestFactory from './XMLHttpRequestFactory';
23
import JsonService from './JsonService';
34
import MetadataService from './MetadataService';
45

56
import OidcClientService from './OidcClientService';
67

8+
let parser = new AuthorizationResultParser(window.location);
79
let xmlHttpRequestFactory = new XMLHttpRequestFactory();
810
let jsonService = new JsonService(xmlHttpRequestFactory);
911
let metadataService = new MetadataService(jsonService);
1012

1113
export default class OidcClient extends OidcClientService {
1214
constructor(settings) {
13-
super(settings, metadataService)
15+
super(settings, metadataService, parser)
1416
}
1517
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import AuthorizationResultParser from '../src/AuthorizationResultParser';
2+
3+
import chai from 'chai';
4+
chai.should();
5+
let assert = chai.assert;
6+
7+
8+
describe("AuthorizationResultParser", function() {
9+
let subject;
10+
11+
beforeEach(function(){
12+
subject = new AuthorizationResultParser();
13+
});
14+
15+
describe("parseResult", function() {
16+
17+
it("should parse key/value pairs", function() {
18+
var result = subject.parseResult("a=apple&b=banana&c=carrot");
19+
result.should.deep.equal({a:"apple", b:"banana", c:"carrot"});
20+
});
21+
22+
it("should parse any order", function() {
23+
var result = subject.parseResult("b=banana&c=carrot&a=apple");
24+
result.should.deep.equal({a:"apple", b:"banana", c:"carrot"});
25+
});
26+
27+
it("should parse past host name and hash fragment", function() {
28+
var result = subject.parseResult("http://server?test1=xoxo&test2=xoxo/#a=apple&b=banana&c=carrot");
29+
result.should.deep.equal({a:"apple", b:"banana", c:"carrot"});
30+
});
31+
32+
it("should return error for long values", function() {
33+
var result = subject.parseResult("a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple&a=apple");
34+
result.should.have.property('error');
35+
});
36+
37+
});
38+
});

0 commit comments

Comments
 (0)