angular-simple-oidc
Version:
Angular Library implementing Open Id Connect specification. Code Flow, Refresh Tokens, Session Management, Discovery Document.
50 lines • 5.96 kB
JavaScript
import { Injectable } from '@angular/core';
import { RequiredConfigurationMissingError, NullConfigurationProvidedError } from './errors';
import { ReplaySubject } from 'rxjs';
import { EventsService, SimpleOidcInfoEvent } from 'angular-simple-oidc/events';
export class ConfigService {
constructor(events) {
this.events = events;
this.configSubject = new ReplaySubject(1);
}
get current$() {
return this.configSubject.asObservable();
}
configure(config, options = {}) {
try {
if (!config) {
throw new NullConfigurationProvidedError({ config });
}
const current = Object.assign({}, options.defaultConfig, config);
if (options.requiredFields) {
this.validateConfiguration(current, options.requiredFields);
}
this.configSubject.next(current);
this.events.dispatch(new SimpleOidcInfoEvent('Configuration obtained', current));
}
catch (e) {
// Make sure we error on the subject too
// so that subscribers can react accordingly
this.configSubject.error(e);
throw e;
}
}
validateConfiguration(config, requiredFields) {
// Fields that are not in the config aka == undefined
const invalidFields = requiredFields
.filter(field => !(field in config));
if (invalidFields.length) {
throw new RequiredConfigurationMissingError({
config,
requiredFields
});
}
}
}
ConfigService.decorators = [
{ type: Injectable }
];
ConfigService.ctorParameters = () => [
{ type: EventsService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXNpbXBsZS1vaWRjL2NvbmZpZy9saWIvY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFRaEYsTUFBTSxPQUFPLGFBQWE7SUFReEIsWUFBK0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUYxQyxrQkFBYSxHQUFHLElBQUksYUFBYSxDQUFJLENBQUMsQ0FBQyxDQUFDO0lBRU0sQ0FBQztJQU56RCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFNTSxTQUFTLENBQUMsTUFBUyxFQUFFLFVBQW1DLEVBQUU7UUFDL0QsSUFBSTtZQUNGLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsTUFBTSxJQUFJLDhCQUE4QixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUN0RDtZQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFakUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFO2dCQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUM3RDtZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksbUJBQW1CLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNsRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1Ysd0NBQXdDO1lBQ3hDLDRDQUE0QztZQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUVTLHFCQUFxQixDQUFDLE1BQVMsRUFBRSxjQUEyQjtRQUNwRSxxREFBcUQ7UUFDckQsTUFBTSxhQUFhLEdBQUcsY0FBYzthQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFdkMsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxpQ0FBaUMsQ0FBQztnQkFDMUMsTUFBTTtnQkFDTixjQUFjO2FBQ2YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7WUE1Q0YsVUFBVTs7O1lBUEYsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcXVpcmVkQ29uZmlndXJhdGlvbk1pc3NpbmdFcnJvciwgTnVsbENvbmZpZ3VyYXRpb25Qcm92aWRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXZlbnRzU2VydmljZSwgU2ltcGxlT2lkY0luZm9FdmVudCB9IGZyb20gJ2FuZ3VsYXItc2ltcGxlLW9pZGMvZXZlbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maWdTZXJ2aWNlT3B0aW9uczxUPiB7XG4gIGRlZmF1bHRDb25maWc/OiBQYXJ0aWFsPFQ+O1xuICByZXF1aXJlZEZpZWxkcz86IChrZXlvZiBUKVtdO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZmlnU2VydmljZTxUPiB7XG5cbiAgcHVibGljIGdldCBjdXJyZW50JCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxUPigxKTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgZXZlbnRzOiBFdmVudHNTZXJ2aWNlKSB7IH1cblxuICBwdWJsaWMgY29uZmlndXJlKGNvbmZpZzogVCwgb3B0aW9uczogQ29uZmlnU2VydmljZU9wdGlvbnM8VD4gPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICB0aHJvdyBuZXcgTnVsbENvbmZpZ3VyYXRpb25Qcm92aWRlZEVycm9yKHsgY29uZmlnIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5kZWZhdWx0Q29uZmlnLCBjb25maWcpO1xuXG4gICAgICBpZiAob3B0aW9ucy5yZXF1aXJlZEZpZWxkcykge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbihjdXJyZW50LCBvcHRpb25zLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnU3ViamVjdC5uZXh0KGN1cnJlbnQpO1xuXG4gICAgICB0aGlzLmV2ZW50cy5kaXNwYXRjaChuZXcgU2ltcGxlT2lkY0luZm9FdmVudCgnQ29uZmlndXJhdGlvbiBvYnRhaW5lZCcsIGN1cnJlbnQpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgd2UgZXJyb3Igb24gdGhlIHN1YmplY3QgdG9vXG4gICAgICAvLyBzbyB0aGF0IHN1YnNjcmliZXJzIGNhbiByZWFjdCBhY2NvcmRpbmdseVxuICAgICAgdGhpcy5jb25maWdTdWJqZWN0LmVycm9yKGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVDb25maWd1cmF0aW9uKGNvbmZpZzogVCwgcmVxdWlyZWRGaWVsZHM6IChrZXlvZiBUKVtdKSB7XG4gICAgLy8gRmllbGRzIHRoYXQgYXJlIG5vdCBpbiB0aGUgY29uZmlnIGFrYSA9PSB1bmRlZmluZWRcbiAgICBjb25zdCBpbnZhbGlkRmllbGRzID0gcmVxdWlyZWRGaWVsZHNcbiAgICAgIC5maWx0ZXIoZmllbGQgPT4gIShmaWVsZCBpbiBjb25maWcpKTtcblxuICAgIGlmIChpbnZhbGlkRmllbGRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVpcmVkQ29uZmlndXJhdGlvbk1pc3NpbmdFcnJvcih7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWlyZWRGaWVsZHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19