Skip to content

Commit d103a43

Browse files
committed
reorg dependencies
1 parent e7d9f1e commit d103a43

18 files changed

Lines changed: 593 additions & 58 deletions

src/AuthorizationResultParser.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import Window from './Window';
2+
13
export default class AuthorizationResultParser {
2-
constructor(location) {
3-
this._location = location;
4+
5+
constructor(window){
6+
this._window = window || Window;
47
}
5-
8+
69
parseResult(value) {
7-
value = value || this._location.hash;
10+
value = value || this._window.location.hash;
811

912
var idx = value.lastIndexOf("#");
1013
if (idx >= 0) {
@@ -29,4 +32,5 @@ export default class AuthorizationResultParser {
2932
return params;
3033
}
3134
}
35+
3236
}

src/JsonService.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import XMLHttpRequestFactory from './XMLHttpRequestFactory';
2+
13
export default class JsonService {
24
constructor(httpRequestFactory) {
3-
this._httpRequestFactory = httpRequestFactory;
5+
this._httpRequestFactory = httpRequestFactory || XMLHttpRequestFactory;
46
}
57

68
getJson(url, token) {

src/MetadataService.js

Lines changed: 90 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,93 @@
1+
import JsonService from './JsonService';
2+
13
export default class MetadataService {
2-
constructor(jsonService){
3-
this._jsonService = jsonService;
4+
constructor(settings, jsonService) {
5+
6+
if (!settings){
7+
throw new Error("settings");
8+
}
9+
10+
this._settings = settings;
11+
this._jsonService = jsonService || new JsonService();
412
}
13+
14+
getMetadata(url) {
15+
return new Promise((resolve, reject) => {
16+
if (this._settings.metadata) {
17+
return resolve(settings.metadata);
18+
}
19+
20+
if (!settings.authority) {
21+
reject(new Error("No authority configured"));
22+
}
23+
24+
return getJson(settings.authority)
25+
.then(function(metadata) {
26+
settings.metadata = metadata;
27+
return metadata;
28+
}, function(err) {
29+
return error("Failed to load metadata (" + err && err.message + ")");
30+
});
31+
});
32+
}
33+
34+
getKeys() {
35+
log("OidcClient.loadX509SigningKeyAsync");
36+
37+
var settings = this._settings;
38+
39+
function getKeyAsync(jwks) {
40+
if (!jwks.keys || !jwks.keys.length) {
41+
return error("Signing keys empty");
42+
}
43+
44+
var key = jwks.keys[0];
45+
if (key.kty !== "RSA") {
46+
return error("Signing key not RSA");
47+
}
48+
49+
if (!key.x5c || !key.x5c.length) {
50+
return error("RSA keys empty");
51+
}
52+
53+
return resolve(key.x5c[0]);
54+
}
55+
56+
if (settings.jwks) {
57+
return getKeyAsync(settings.jwks);
58+
}
59+
60+
return this.loadMetadataAsync().then(function (metadata) {
61+
if (!metadata.jwks_uri) {
62+
return error("Metadata does not contain jwks_uri");
63+
}
64+
65+
return getJson(metadata.jwks_uri).then(function (jwks) {
66+
settings.jwks = jwks;
67+
return getKeyAsync(jwks);
68+
}, function (err) {
69+
return error("Failed to load signing keys (" + err && err.message + ")");
70+
});
71+
});
72+
};
73+
74+
getAuthorizationEndpoint() {
75+
log("OidcClient.loadAuthorizationEndpoint");
76+
77+
if (this._settings.authorization_endpoint) {
78+
return resolve(this._settings.authorization_endpoint);
79+
}
80+
81+
if (!this._settings.authority) {
82+
return error("No authorization_endpoint configured");
83+
}
84+
85+
return this.loadMetadataAsync().then(function (metadata) {
86+
if (!metadata.authorization_endpoint) {
87+
return error("Metadata does not contain authorization_endpoint");
88+
}
89+
90+
return metadata.authorization_endpoint;
91+
});
92+
};
593
}

src/OidcClientService.js

Lines changed: 178 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,181 @@
1+
import OidcClientSettings from './OidcClientSettings';
2+
13
export default class OidcClientService {
2-
constructor(settings, metadataService, authorizationResultParser) {
3-
this._settings = settings;
4-
this._metadataService = metadataService;
5-
this._authorizationResultParser = authorizationResultParser;
4+
constructor(settings) {
5+
if (!settings) {
6+
throw new Error("settings");
7+
}
8+
9+
this._settings = new OidcClientSettings(settings);
610
}
11+
12+
get settings() {
13+
return this._settings;
14+
}
15+
16+
createSigninRequest(){
17+
}
18+
19+
processSigninResponse(){
20+
}
21+
22+
createSignoutRequest(){
23+
}
24+
25+
// OidcClient.prototype.createTokenRequestAsync = function () {
26+
// log("OidcClient.createTokenRequestAsync");
27+
28+
// var client = this;
29+
// var settings = client._settings;
30+
31+
// return client.loadAuthorizationEndpoint().then(function (authorization_endpoint) {
32+
33+
// var state = rand();
34+
// var url = authorization_endpoint + "?state=" + encodeURIComponent(state);
35+
36+
// if (client.isOidc) {
37+
// var nonce = rand();
38+
// url += "&nonce=" + encodeURIComponent(nonce);
39+
// }
40+
41+
// var required = ["client_id", "redirect_uri", "response_type", "scope"];
42+
// required.forEach(function (key) {
43+
// var value = settings[key];
44+
// if (value) {
45+
// url += "&" + key + "=" + encodeURIComponent(value);
46+
// }
47+
// });
48+
49+
// var optional = ["prompt", "display", "max_age", "ui_locales", "id_token_hint", "login_hint", "acr_values"];
50+
// optional.forEach(function (key) {
51+
// var value = settings[key];
52+
// if (value) {
53+
// url += "&" + key + "=" + encodeURIComponent(value);
54+
// }
55+
// });
56+
57+
// var request_state = {
58+
// oidc: client.isOidc,
59+
// oauth: client.isOAuth,
60+
// state: state
61+
// };
62+
63+
// if (nonce) {
64+
// request_state["nonce"] = nonce;
65+
// }
66+
67+
// settings.request_state_store.setItem(settings.request_state_key, JSON.stringify(request_state));
68+
69+
// return {
70+
// request_state: request_state,
71+
// url: url
72+
// };
73+
// });
74+
// }
75+
76+
// OidcClient.prototype.createLogoutRequestAsync = function (id_token_hint) {
77+
// log("OidcClient.createLogoutRequestAsync");
78+
79+
// var settings = this._settings;
80+
// return this.loadMetadataAsync().then(function (metadata) {
81+
// if (!metadata.end_session_endpoint) {
82+
// return error("No end_session_endpoint in metadata");
83+
// }
84+
85+
// var url = metadata.end_session_endpoint;
86+
// if (id_token_hint && settings.post_logout_redirect_uri) {
87+
// url += "?post_logout_redirect_uri=" + encodeURIComponent(settings.post_logout_redirect_uri);
88+
// url += "&id_token_hint=" + encodeURIComponent(id_token_hint);
89+
// }
90+
// return url;
91+
// });
92+
// }
93+
94+
95+
96+
// OidcClient.prototype.processResponseAsync = function (queryString) {
97+
// log("OidcClient.processResponseAsync");
98+
99+
// var client = this;
100+
// var settings = client._settings;
101+
102+
// var request_state = settings.request_state_store.getItem(settings.request_state_key);
103+
// settings.request_state_store.removeItem(settings.request_state_key);
104+
105+
// if (!request_state) {
106+
// return error("No request state loaded");
107+
// }
108+
109+
// request_state = JSON.parse(request_state);
110+
// if (!request_state) {
111+
// return error("No request state loaded");
112+
// }
113+
114+
// if (!request_state.state) {
115+
// return error("No state loaded");
116+
// }
117+
118+
// var result = parseOidcResult(queryString);
119+
// if (!result) {
120+
// return error("No OIDC response");
121+
// }
122+
123+
// if (result.error) {
124+
// return error(result.error);
125+
// }
126+
127+
// if (result.state !== request_state.state) {
128+
// return error("Invalid state");
129+
// }
130+
131+
// if (request_state.oidc) {
132+
// if (!result.id_token) {
133+
// return error("No identity token");
134+
// }
135+
136+
// if (!request_state.nonce) {
137+
// return error("No nonce loaded");
138+
// }
139+
// }
140+
141+
// if (request_state.oauth) {
142+
// if (!result.access_token) {
143+
// return error("No access token");
144+
// }
145+
146+
// if (!result.token_type || result.token_type.toLowerCase() !== "bearer") {
147+
// return error("Invalid token type");
148+
// }
149+
150+
// if (!result.expires_in) {
151+
// return error("No token expiration");
152+
// }
153+
// }
154+
155+
// var promise = resolve();
156+
// if (request_state.oidc && request_state.oauth) {
157+
// promise = client.validateIdTokenAndAccessTokenAsync(result.id_token, request_state.nonce, result.access_token);
158+
// }
159+
// else if (request_state.oidc) {
160+
// promise = client.validateIdTokenAsync(result.id_token, request_state.nonce);
161+
// }
162+
163+
// return promise.then(function (profile) {
164+
// if (profile && settings.filter_protocol_claims) {
165+
// var remove = ["nonce", "at_hash", "iat", "nbf", "exp", "aud", "iss"];
166+
// remove.forEach(function (key) {
167+
// delete profile[key];
168+
// });
169+
// }
170+
171+
// return {
172+
// profile: profile,
173+
// id_token: result.id_token,
174+
// access_token: result.access_token,
175+
// expires_in: result.expires_in,
176+
// scope: result.scope,
177+
// session_state : result.session_state
178+
// };
179+
// });
180+
// }
7181
}

src/OidcClientSettings.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
export default class OidcClientSettings {
2+
constructor(settings) {
3+
if (!settings) {
4+
throw new Error("settings");
5+
}
6+
7+
if (settings.metadata){
8+
this._metadata = settings.metadata;
9+
}
10+
11+
if (settings.authority){
12+
this._authority = authority;
13+
}
14+
15+
// if (!this._settings.request_state_key) {
16+
// this._settings.request_state_key = "OidcClient.request_state";
17+
// }
18+
19+
// if (!this._settings.request_state_store) {
20+
// this._settings.request_state_store = window.localStorage;
21+
// }
22+
23+
// if (typeof this._settings.load_user_profile === 'undefined') {
24+
// this._settings.load_user_profile = true;
25+
// }
26+
27+
// if (typeof this._settings.filter_protocol_claims === 'undefined') {
28+
// this._settings.filter_protocol_claims = true;
29+
// }
30+
31+
// if (this._settings.authority && this._settings.authority.indexOf('.well-known/openid-configuration') < 0) {
32+
// if (this._settings.authority[this._settings.authority.length - 1] !== '/') {
33+
// this._settings.authority += '/';
34+
// }
35+
// this._settings.authority += '.well-known/openid-configuration';
36+
// }
37+
38+
// if (!this._settings.response_type) {
39+
// this._settings.response_type = "id_token token";
40+
// }
41+
}
42+
43+
// get isOidc() {
44+
// if (this._settings.response_type) {
45+
// var result = this._settings.response_type.split(/\s+/g).filter(function(item) {
46+
// return item === "id_token";
47+
// });
48+
// return !!(result[0]);
49+
// }
50+
// return false;
51+
// }
52+
53+
// get isOAuth() {
54+
// if (this._settings.response_type) {
55+
// var result = this._settings.response_type.split(/\s+/g).filter(function(item) {
56+
// return item === "token";
57+
// });
58+
// return !!(result[0]);
59+
// }
60+
// return false;
61+
// }
62+
63+
get metadata(){
64+
return this._metadata;
65+
}
66+
set metadata(val){
67+
this._metadata = val;
68+
}
69+
}

src/SigninRequest.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default class SigninRequest {
2+
constructor(settings){
3+
this._settings = settings;
4+
}
5+
}

src/SignoutRequest.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default class SignoutRequest {
2+
constructor(settings){
3+
this._settings = settings;
4+
}
5+
}

0 commit comments

Comments
 (0)