angular-auth-oidc-client
Version:
An OpenID Connect Code Flow with PKCE,Implicit Flow client for Angular
283 lines • 18.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { OidcSecurityStorage } from './oidc.security.storage';
export class OidcSecurityCommon {
/**
* @param {?} oidcSecurityStorage
*/
constructor(oidcSecurityStorage) {
this.oidcSecurityStorage = oidcSecurityStorage;
this.storage_auth_result = 'authorizationResult';
this.storage_access_token = 'authorizationData';
this.storage_id_token = 'authorizationDataIdToken';
this.storage_is_authorized = '_isAuthorized';
this.storage_user_data = 'userData';
this.storage_auth_nonce = 'authNonce';
this.storage_code_verifier = 'code_verifier';
this.storage_auth_state_control = 'authStateControl';
this.storage_session_state = 'session_state';
this.storage_silent_renew_running = 'storage_silent_renew_running';
this.storage_custom_request_params = 'storage_custom_request_params';
}
/**
* @return {?}
*/
get authResult() {
return this.retrieve(this.storage_auth_result);
}
/**
* @param {?} value
* @return {?}
*/
set authResult(value) {
this.store(this.storage_auth_result, value);
}
/**
* @return {?}
*/
get accessToken() {
return this.retrieve(this.storage_access_token) || '';
}
/**
* @param {?} value
* @return {?}
*/
set accessToken(value) {
this.store(this.storage_access_token, value);
}
/**
* @return {?}
*/
get idToken() {
return this.retrieve(this.storage_id_token) || '';
}
/**
* @param {?} value
* @return {?}
*/
set idToken(value) {
this.store(this.storage_id_token, value);
}
/**
* @return {?}
*/
get isAuthorized() {
return this.retrieve(this.storage_is_authorized);
}
/**
* @param {?} value
* @return {?}
*/
set isAuthorized(value) {
this.store(this.storage_is_authorized, value);
}
/**
* @return {?}
*/
get userData() {
return this.retrieve(this.storage_user_data);
}
/**
* @param {?} value
* @return {?}
*/
set userData(value) {
this.store(this.storage_user_data, value);
}
/**
* @return {?}
*/
get authNonce() {
return this.retrieve(this.storage_auth_nonce) || '';
}
/**
* @param {?} value
* @return {?}
*/
set authNonce(value) {
this.store(this.storage_auth_nonce, value);
}
/**
* @return {?}
*/
get code_verifier() {
return this.retrieve(this.storage_code_verifier) || '';
}
/**
* @param {?} value
* @return {?}
*/
set code_verifier(value) {
this.store(this.storage_code_verifier, value);
}
/**
* @return {?}
*/
get authStateControl() {
return this.retrieve(this.storage_auth_state_control) || '';
}
/**
* @param {?} value
* @return {?}
*/
set authStateControl(value) {
this.store(this.storage_auth_state_control, value);
}
/**
* @return {?}
*/
get sessionState() {
return this.retrieve(this.storage_session_state);
}
/**
* @param {?} value
* @return {?}
*/
set sessionState(value) {
this.store(this.storage_session_state, value);
}
/**
* @return {?}
*/
get silentRenewRunning() {
return this.retrieve(this.storage_silent_renew_running) || '';
}
/**
* @param {?} value
* @return {?}
*/
set silentRenewRunning(value) {
this.store(this.storage_silent_renew_running, value);
}
/**
* @return {?}
*/
get customRequestParams() {
return this.retrieve(this.storage_custom_request_params);
}
/**
* @param {?} value
* @return {?}
*/
set customRequestParams(value) {
this.store(this.storage_custom_request_params, value);
}
/**
* @private
* @param {?} key
* @return {?}
*/
retrieve(key) {
return this.oidcSecurityStorage.read(key);
}
/**
* @private
* @param {?} key
* @param {?} value
* @return {?}
*/
store(key, value) {
this.oidcSecurityStorage.write(key, value);
}
/**
* @param {?} isRenewProcess
* @return {?}
*/
resetStorageData(isRenewProcess) {
if (!isRenewProcess) {
this.store(this.storage_auth_result, '');
this.store(this.storage_session_state, '');
this.store(this.storage_silent_renew_running, '');
this.store(this.storage_is_authorized, false);
this.store(this.storage_access_token, '');
this.store(this.storage_id_token, '');
this.store(this.storage_user_data, '');
this.store(this.storage_code_verifier, '');
}
}
/**
* @return {?}
*/
getAccessToken() {
return this.retrieve(this.storage_access_token);
}
/**
* @return {?}
*/
getIdToken() {
return this.retrieve(this.storage_id_token);
}
}
OidcSecurityCommon.decorators = [
{ type: Injectable }
];
/** @nocollapse */
OidcSecurityCommon.ctorParameters = () => [
{ type: OidcSecurityStorage }
];
if (false) {
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_auth_result;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_access_token;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_id_token;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_is_authorized;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_user_data;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_auth_nonce;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_code_verifier;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_auth_state_control;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_session_state;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_silent_renew_running;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.storage_custom_request_params;
/**
* @type {?}
* @private
*/
OidcSecurityCommon.prototype.oidcSecurityStorage;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy5zZWN1cml0eS5jb21tb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLWF1dGgtb2lkYy1jbGllbnQvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvb2lkYy5zZWN1cml0eS5jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLOUQsTUFBTSxPQUFPLGtCQUFrQjs7OztJQWlIM0IsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFoSHBELHdCQUFtQixHQUFHLHFCQUFxQixDQUFDO1FBVTVDLHlCQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBVTNDLHFCQUFnQixHQUFHLDBCQUEwQixDQUFDO1FBVTlDLDBCQUFxQixHQUFHLGVBQWUsQ0FBQztRQVV4QyxzQkFBaUIsR0FBRyxVQUFVLENBQUM7UUFVL0IsdUJBQWtCLEdBQUcsV0FBVyxDQUFDO1FBVWpDLDBCQUFxQixHQUFHLGVBQWUsQ0FBQztRQVV4QywrQkFBMEIsR0FBRyxrQkFBa0IsQ0FBQztRQVVoRCwwQkFBcUIsR0FBRyxlQUFlLENBQUM7UUFVeEMsaUNBQTRCLEdBQUcsOEJBQThCLENBQUM7UUFVOUQsa0NBQTZCLEdBQUcsK0JBQStCLENBQUM7SUFZVCxDQUFDOzs7O0lBOUdoRSxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Ozs7O0lBRUQsSUFBVyxVQUFVLENBQUMsS0FBVTtRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDOzs7O0lBSUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEs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LENBQUM7Ozs7SUFFRCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Ozs7SUFFRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7OztZQS9JSixVQUFVOzs7O1lBSkYsbUJBQW1COzs7Ozs7O0lBTXhCLGlEQUFvRDs7Ozs7SUFVcEQsa0RBQW1EOzs7OztJQVVuRCw4Q0FBc0Q7Ozs7O0lBVXRELG1EQUFnRDs7Ozs7SUFVaEQsK0NBQXVDOzs7OztJQVV2QyxnREFBeUM7Ozs7O0lBVXpDLG1EQUFnRDs7Ozs7SUFVaEQsd0RBQXdEOzs7OztJQVV4RCxtREFBZ0Q7Ozs7O0lBVWhELDBEQUFzRTs7Ozs7SUFVdEUsMkRBQXdFOzs7OztJQVk1RCxpREFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPaWRjU2VjdXJpdHlTdG9yYWdlIH0gZnJvbSAnLi9vaWRjLnNlY3VyaXR5LnN0b3JhZ2UnO1xuXG5leHBvcnQgdHlwZSBTaWxlbnRSZW5ld1N0YXRlID0gJ3J1bm5pbmcnIHwgJyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPaWRjU2VjdXJpdHlDb21tb24ge1xuICAgIHByaXZhdGUgc3RvcmFnZV9hdXRoX3Jlc3VsdCA9ICdhdXRob3JpemF0aW9uUmVzdWx0JztcblxuICAgIHB1YmxpYyBnZXQgYXV0aFJlc3VsdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSh0aGlzLnN0b3JhZ2VfYXV0aF9yZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXV0aFJlc3VsdCh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX2F1dGhfcmVzdWx0LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdG9yYWdlX2FjY2Vzc190b2tlbiA9ICdhdXRob3JpemF0aW9uRGF0YSc7XG5cbiAgICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHJpZXZlKHRoaXMuc3RvcmFnZV9hY2Nlc3NfdG9rZW4pIHx8ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYWNjZXNzVG9rZW4odmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0b3JlKHRoaXMuc3RvcmFnZV9hY2Nlc3NfdG9rZW4sIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3JhZ2VfaWRfdG9rZW4gPSAnYXV0aG9yaXphdGlvbkRhdGFJZFRva2VuJztcblxuICAgIHB1YmxpYyBnZXQgaWRUb2tlbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSh0aGlzLnN0b3JhZ2VfaWRfdG9rZW4pIHx8ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgaWRUb2tlbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX2lkX3Rva2VuLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdG9yYWdlX2lzX2F1dGhvcml6ZWQgPSAnX2lzQXV0aG9yaXplZCc7XG5cbiAgICBwdWJsaWMgZ2V0IGlzQXV0aG9yaXplZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmUodGhpcy5zdG9yYWdlX2lzX2F1dGhvcml6ZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgaXNBdXRob3JpemVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX2lzX2F1dGhvcml6ZWQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3JhZ2VfdXNlcl9kYXRhID0gJ3VzZXJEYXRhJztcblxuICAgIHB1YmxpYyBnZXQgdXNlckRhdGEoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmUodGhpcy5zdG9yYWdlX3VzZXJfZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB1c2VyRGF0YSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX3VzZXJfZGF0YSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcmFnZV9hdXRoX25vbmNlID0gJ2F1dGhOb25jZSc7XG5cbiAgICBwdWJsaWMgZ2V0IGF1dGhOb25jZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSh0aGlzLnN0b3JhZ2VfYXV0aF9ub25jZSkgfHwgJyc7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhdXRoTm9uY2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0b3JlKHRoaXMuc3RvcmFnZV9hdXRoX25vbmNlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdG9yYWdlX2NvZGVfdmVyaWZpZXIgPSAnY29kZV92ZXJpZmllcic7XG5cbiAgICBwdWJsaWMgZ2V0IGNvZGVfdmVyaWZpZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmUodGhpcy5zdG9yYWdlX2NvZGVfdmVyaWZpZXIpIHx8ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29kZV92ZXJpZmllcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX2NvZGVfdmVyaWZpZXIsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3JhZ2VfYXV0aF9zdGF0ZV9jb250cm9sID0gJ2F1dGhTdGF0ZUNvbnRyb2wnO1xuXG4gICAgcHVibGljIGdldCBhdXRoU3RhdGVDb250cm9sKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHJpZXZlKHRoaXMuc3RvcmFnZV9hdXRoX3N0YXRlX2NvbnRyb2wpIHx8ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXV0aFN0YXRlQ29udHJvbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX2F1dGhfc3RhdGVfY29udHJvbCwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcmFnZV9zZXNzaW9uX3N0YXRlID0gJ3Nlc3Npb25fc3RhdGUnO1xuXG4gICAgcHVibGljIGdldCBzZXNzaW9uU3RhdGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmUodGhpcy5zdG9yYWdlX3Nlc3Npb25fc3RhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2Vzc2lvblN0YXRlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zdG9yZSh0aGlzLnN0b3JhZ2Vfc2Vzc2lvbl9zdGF0ZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcmFnZV9zaWxlbnRfcmVuZXdfcnVubmluZyA9ICdzdG9yYWdlX3NpbGVudF9yZW5ld19ydW5uaW5nJztcblxuICAgIHB1YmxpYyBnZXQgc2lsZW50UmVuZXdSdW5uaW5nKCk6IFNpbGVudFJlbmV3U3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSh0aGlzLnN0b3JhZ2Vfc2lsZW50X3JlbmV3X3J1bm5pbmcpIHx8ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2lsZW50UmVuZXdSdW5uaW5nKHZhbHVlOiBTaWxlbnRSZW5ld1N0YXRlKSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX3NpbGVudF9yZW5ld19ydW5uaW5nLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdG9yYWdlX2N1c3RvbV9yZXF1ZXN0X3BhcmFtcyA9ICdzdG9yYWdlX2N1c3RvbV9yZXF1ZXN0X3BhcmFtcyc7XG5cbiAgICBwdWJsaWMgZ2V0IGN1c3RvbVJlcXVlc3RQYXJhbXMoKToge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSh0aGlzLnN0b3JhZ2VfY3VzdG9tX3JlcXVlc3RfcGFyYW1zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGN1c3RvbVJlcXVlc3RQYXJhbXModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB9KSB7XG4gICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX2N1c3RvbV9yZXF1ZXN0X3BhcmFtcywgdmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb2lkY1NlY3VyaXR5U3RvcmFnZTogT2lkY1NlY3VyaXR5U3RvcmFnZSkge31cblxuICAgIHByaXZhdGUgcmV0cmlldmUoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5vaWRjU2VjdXJpdHlTdG9yYWdlLnJlYWQoa2V5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3JlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMub2lkY1NlY3VyaXR5U3RvcmFnZS53cml0ZShrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXNldFN0b3JhZ2VEYXRhKGlzUmVuZXdQcm9jZXNzOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghaXNSZW5ld1Byb2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUodGhpcy5zdG9yYWdlX2F1dGhfcmVzdWx0LCAnJyk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlKHRoaXMuc3RvcmFnZV9zZXNzaW9uX3N0YXRlLCAnJyk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlKHRoaXMuc3RvcmFnZV9zaWxlbnRfcmVuZXdfcnVubmluZywgJycpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZSh0aGlzLnN0b3JhZ2VfaXNfYXV0aG9yaXplZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZSh0aGlzLnN0b3JhZ2VfYWNjZXNzX3Rva2VuLCAnJyk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlKHRoaXMuc3RvcmFnZV9pZF90b2tlbiwgJycpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZSh0aGlzLnN0b3JhZ2VfdXNlcl9kYXRhLCAnJyk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlKHRoaXMuc3RvcmFnZV9jb2RlX3ZlcmlmaWVyLCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBY2Nlc3NUb2tlbigpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZSh0aGlzLnN0b3JhZ2VfYWNjZXNzX3Rva2VuKTtcbiAgICB9XG5cbiAgICBnZXRJZFRva2VuKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHJpZXZlKHRoaXMuc3RvcmFnZV9pZF90b2tlbik7XG4gICAgfVxufVxuIl19