@thecla/b2c-angular 4.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/actions/auth.actions.mjs +11 -0
- package/{esm2015/lib/auth-config.js → esm2020/lib/auth-config.mjs} +0 -0
- package/esm2020/lib/auth.guard.mjs +29 -0
- package/esm2020/lib/auth.module.mjs +42 -0
- package/esm2020/lib/auth.service.mjs +68 -0
- package/esm2020/lib/effects/auth.effects.mjs +62 -0
- package/esm2020/lib/jwt.interceptor.mjs +32 -0
- package/esm2020/lib/reducers/auth.reducer.mjs +20 -0
- package/{esm2015/lib/state/auth.state.js → esm2020/lib/state/auth.state.mjs} +0 -0
- package/esm2020/lib/store/index.mjs +8 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/esm2020/thecla-b2c-angular.mjs +5 -0
- package/fesm2015/{thecla-b2c-angular.js → thecla-b2c-angular.mjs} +69 -73
- package/fesm2015/thecla-b2c-angular.mjs.map +1 -0
- package/fesm2020/thecla-b2c-angular.mjs +244 -0
- package/fesm2020/thecla-b2c-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/actions/auth.actions.d.ts +17 -12
- package/lib/auth.guard.d.ts +4 -1
- package/lib/auth.module.d.ts +6 -0
- package/lib/auth.service.d.ts +3 -0
- package/lib/effects/auth.effects.d.ts +22 -16
- package/lib/jwt.interceptor.d.ts +3 -0
- package/package.json +25 -14
- package/bundles/thecla-b2c-angular.umd.js +0 -603
- package/bundles/thecla-b2c-angular.umd.js.map +0 -1
- package/esm2015/lib/actions/auth.actions.js +0 -10
- package/esm2015/lib/auth.guard.js +0 -30
- package/esm2015/lib/auth.module.js +0 -35
- package/esm2015/lib/auth.service.js +0 -70
- package/esm2015/lib/effects/auth.effects.js +0 -58
- package/esm2015/lib/jwt.interceptor.js +0 -31
- package/esm2015/lib/reducers/auth.reducer.js +0 -21
- package/esm2015/lib/store/index.js +0 -11
- package/esm2015/thecla-b2c-angular.js +0 -12
- package/fesm2015/thecla-b2c-angular.js.map +0 -1
- package/thecla-b2c-angular.d.ts +0 -11
- package/thecla-b2c-angular.metadata.json +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createAction, props } from '@ngrx/store';
|
|
2
|
+
export const init = createAction('[@thecla/b2c-angular] init');
|
|
3
|
+
export const signIn = createAction('[@thecla/b2c-angular] sign-in', props());
|
|
4
|
+
export const signInRedirected = createAction('[@thecla/b2c-angular] sign in redirected');
|
|
5
|
+
export const signInCompleted = createAction('[@thecla/b2c-angular] sign in completed', props());
|
|
6
|
+
export const signedIn = createAction('[@thecla/b2c-angular] signed in', props());
|
|
7
|
+
export const signInFailed = createAction('[@thecla/b2c-angular] sign in failed', props());
|
|
8
|
+
export const signOut = createAction('[@thecla/b2c-angular] sign out');
|
|
9
|
+
export const signedOut = createAction('[@thecla/b2c-angular] signed out');
|
|
10
|
+
export const resetPassword = createAction('[@thecla/b2c-angular] reset password', props());
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9hY3Rpb25zL2F1dGguYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQywrQkFBK0IsRUFBRSxLQUFLLEVBQXlCLENBQUMsQ0FBQztBQUVwRyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsMENBQTBDLENBQUMsQ0FBQztBQUV6RixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUN6Qyx5Q0FBeUMsRUFDekMsS0FBSyxFQUF3RSxDQUM5RSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLEVBQXFCLENBQUMsQ0FBQztBQUVwRyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLHNDQUFzQyxFQUFFLEtBQUssRUFBb0IsQ0FBQyxDQUFDO0FBRTVHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFFMUUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLEVBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgcHJvcHMgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBQcm9maWxlIH0gZnJvbSAnLi4vc3RhdGUvYXV0aC5zdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBpbml0ID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9iMmMtYW5ndWxhcl0gaW5pdCcpO1xuXG5leHBvcnQgY29uc3Qgc2lnbkluID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9iMmMtYW5ndWxhcl0gc2lnbi1pbicsIHByb3BzPHsgcmV0dXJuVXJsOiBzdHJpbmcgfT4oKSk7XG5cbmV4cG9ydCBjb25zdCBzaWduSW5SZWRpcmVjdGVkID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9iMmMtYW5ndWxhcl0gc2lnbiBpbiByZWRpcmVjdGVkJyk7XG5cbmV4cG9ydCBjb25zdCBzaWduSW5Db21wbGV0ZWQgPSBjcmVhdGVBY3Rpb24oXG4gICdbQHRoZWNsYS9iMmMtYW5ndWxhcl0gc2lnbiBpbiBjb21wbGV0ZWQnLFxuICBwcm9wczx7IHN0YXRlOiB7IHRhcmdldDogc3RyaW5nOyBwYXNzd29yZFJlc2V0OiBib29sZWFuIH07IHVzZXI6IFByb2ZpbGUgfT4oKVxuKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25lZEluID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9iMmMtYW5ndWxhcl0gc2lnbmVkIGluJywgcHJvcHM8eyB1c2VyOiBQcm9maWxlIH0+KCkpO1xuXG5leHBvcnQgY29uc3Qgc2lnbkluRmFpbGVkID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9iMmMtYW5ndWxhcl0gc2lnbiBpbiBmYWlsZWQnLCBwcm9wczx7IGVycm9yOiBFcnJvciB9PigpKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25PdXQgPSBjcmVhdGVBY3Rpb24oJ1tAdGhlY2xhL2IyYy1hbmd1bGFyXSBzaWduIG91dCcpO1xuXG5leHBvcnQgY29uc3Qgc2lnbmVkT3V0ID0gY3JlYXRlQWN0aW9uKCdbQHRoZWNsYS9iMmMtYW5ndWxhcl0gc2lnbmVkIG91dCcpO1xuXG5leHBvcnQgY29uc3QgcmVzZXRQYXNzd29yZCA9IGNyZWF0ZUFjdGlvbignW0B0aGVjbGEvYjJjLWFuZ3VsYXJdIHJlc2V0IHBhc3N3b3JkJywgcHJvcHM8eyByZXR1cm5Vcmw6IHN0cmluZyB9PigpKTtcbiJdfQ==
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Store } from '@ngrx/store';
|
|
3
|
+
import { first, tap } from 'rxjs/operators';
|
|
4
|
+
import { signIn } from './actions/auth.actions';
|
|
5
|
+
import { isAuthenticated } from './store';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngrx/store";
|
|
8
|
+
export class AuthGuard {
|
|
9
|
+
constructor(store) {
|
|
10
|
+
this.store = store;
|
|
11
|
+
this.authenticated$ = this.store.pipe(isAuthenticated);
|
|
12
|
+
}
|
|
13
|
+
canActivate(next, state) {
|
|
14
|
+
return this.authenticated$.pipe(tap(auth => {
|
|
15
|
+
if (!auth) {
|
|
16
|
+
this.store.dispatch(signIn({ returnUrl: state.url }));
|
|
17
|
+
}
|
|
18
|
+
}), first());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
22
|
+
AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthGuard, decorators: [{
|
|
24
|
+
type: Injectable,
|
|
25
|
+
args: [{
|
|
26
|
+
providedIn: 'root',
|
|
27
|
+
}]
|
|
28
|
+
}], ctorParameters: function () { return [{ type: i1.Store }]; } });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2IyYy1hbmd1bGFyL3NyYy9saWIvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7O0FBSzFDLE1BQU0sT0FBTyxTQUFTO0lBR3BCLFlBQW9DLEtBQVk7UUFBWixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBRi9CLG1CQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFaEIsQ0FBQztJQUU3QyxXQUFXLENBQUMsSUFBNEIsRUFBRSxLQUEwQjtRQUN6RSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1IsQ0FBQztJQUNKLENBQUM7O3NHQWRVLFNBQVM7MEdBQVQsU0FBUyxjQUZSLE1BQU07MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZpcnN0LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBzaWduSW4gfSBmcm9tICcuL2FjdGlvbnMvYXV0aC5hY3Rpb25zJztcbmltcG9ydCB7IGlzQXV0aGVudGljYXRlZCB9IGZyb20gJy4vc3RvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0ZWQkID0gdGhpcy5zdG9yZS5waXBlKGlzQXV0aGVudGljYXRlZCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IFN0b3JlKSB7fVxuXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZShuZXh0OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0ZWQkLnBpcGUoXG4gICAgICB0YXAoYXV0aCA9PiB7XG4gICAgICAgIGlmICghYXV0aCkge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goc2lnbkluKHsgcmV0dXJuVXJsOiBzdGF0ZS51cmwgfSkpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { EffectsModule } from '@ngrx/effects';
|
|
4
|
+
import { StoreModule } from '@ngrx/store';
|
|
5
|
+
import { AuthConfig } from './auth-config';
|
|
6
|
+
import { AuthEffects } from './effects/auth.effects';
|
|
7
|
+
import { JwtInterceptor } from './jwt.interceptor';
|
|
8
|
+
import { reducer } from './reducers/auth.reducer';
|
|
9
|
+
import { featureKey } from './store';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@ngrx/store";
|
|
12
|
+
import * as i2 from "@ngrx/effects";
|
|
13
|
+
export class AuthModule {
|
|
14
|
+
static forRoot(config) {
|
|
15
|
+
return {
|
|
16
|
+
ngModule: AuthModule,
|
|
17
|
+
providers: [
|
|
18
|
+
{
|
|
19
|
+
provide: AuthConfig,
|
|
20
|
+
useValue: config,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
provide: HTTP_INTERCEPTORS,
|
|
24
|
+
useClass: JwtInterceptor,
|
|
25
|
+
multi: true,
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
32
|
+
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, imports: [i1.StoreFeatureModule, i2.EffectsFeatureModule] });
|
|
33
|
+
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] });
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, decorators: [{
|
|
35
|
+
type: NgModule,
|
|
36
|
+
args: [{
|
|
37
|
+
declarations: [],
|
|
38
|
+
imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],
|
|
39
|
+
exports: [],
|
|
40
|
+
}]
|
|
41
|
+
}] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iMmMtYW5ndWxhci9zcmMvbGliL2F1dGgubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7QUFPckMsTUFBTSxPQUFPLFVBQVU7SUFDZCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWtCO1FBQ3RDLE9BQU87WUFDTCxRQUFRLEVBQUUsVUFBVTtZQUNwQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLFVBQVU7b0JBQ25CLFFBQVEsRUFBRSxNQUFNO2lCQUNqQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOzt1R0FoQlUsVUFBVTt3R0FBVixVQUFVO3dHQUFWLFVBQVUsWUFIWCxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7MkZBR25GLFVBQVU7a0JBTHRCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUMvRixPQUFPLEVBQUUsRUFBRTtpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVmZmVjdHNNb2R1bGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IFN0b3JlTW9kdWxlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC1jb25maWcnO1xuaW1wb3J0IHsgQXV0aEVmZmVjdHMgfSBmcm9tICcuL2VmZmVjdHMvYXV0aC5lZmZlY3RzJztcbmltcG9ydCB7IEp3dEludGVyY2VwdG9yIH0gZnJvbSAnLi9qd3QuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgcmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvYXV0aC5yZWR1Y2VyJztcbmltcG9ydCB7IGZlYXR1cmVLZXkgfSBmcm9tICcuL3N0b3JlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgaW1wb3J0czogW1N0b3JlTW9kdWxlLmZvckZlYXR1cmUoZmVhdHVyZUtleSwgcmVkdWNlciksIEVmZmVjdHNNb2R1bGUuZm9yRmVhdHVyZShbQXV0aEVmZmVjdHNdKV0sXG4gIGV4cG9ydHM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoTW9kdWxlIHtcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KGNvbmZpZzogQXV0aENvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QXV0aE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQXV0aENvbmZpZyxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgdXNlQ2xhc3M6IEp3dEludGVyY2VwdG9yLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { InteractionRequiredAuthError, PublicClientApplication, } from '@azure/msal-browser';
|
|
3
|
+
import { from, of, throwError } from 'rxjs';
|
|
4
|
+
import { catchError, filter, map } from 'rxjs/operators';
|
|
5
|
+
import { AuthConfig } from './auth-config';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./auth-config";
|
|
8
|
+
export class AuthService {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
const msalConfig = {
|
|
12
|
+
auth: {
|
|
13
|
+
clientId: config.clientId,
|
|
14
|
+
authority: `${config.authority}/${config.signInPolicy}`,
|
|
15
|
+
knownAuthorities: config.knownAuthorities,
|
|
16
|
+
redirectUri: config.redirectUri ?? location.origin,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
this.clientApplication = new PublicClientApplication(msalConfig);
|
|
20
|
+
}
|
|
21
|
+
loginWithRedirect(state) {
|
|
22
|
+
return from(this.clientApplication.loginRedirect({
|
|
23
|
+
scopes: this.config.scopes,
|
|
24
|
+
state: JSON.stringify({ ...state, passwordReset: false }),
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
resetPasswordWithRedirect(state) {
|
|
28
|
+
return from(this.clientApplication.loginRedirect({
|
|
29
|
+
authority: `${this.config.authority}/${this.config.resetPasswordPolicy}`,
|
|
30
|
+
scopes: this.config.scopes,
|
|
31
|
+
state: JSON.stringify({ ...state, passwordReset: true }),
|
|
32
|
+
prompt: 'login',
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
handleRedirectCallback() {
|
|
36
|
+
return from(this.clientApplication.handleRedirectPromise()).pipe(filter((result) => result !== null), map(result => ({
|
|
37
|
+
state: result.state ? JSON.parse(result.state) : undefined,
|
|
38
|
+
user: { sub: result.uniqueId, ...result.idTokenClaims },
|
|
39
|
+
})));
|
|
40
|
+
}
|
|
41
|
+
getAccessToken() {
|
|
42
|
+
const account = this.clientApplication.getAllAccounts()[0];
|
|
43
|
+
const scopes = this.config.scopes;
|
|
44
|
+
return from(this.clientApplication.acquireTokenSilent({ account, scopes })).pipe(map(result => result.accessToken));
|
|
45
|
+
}
|
|
46
|
+
logout() {
|
|
47
|
+
return from(this.clientApplication.logoutRedirect({ postLogoutRedirectUri: location.origin }));
|
|
48
|
+
}
|
|
49
|
+
checkSession() {
|
|
50
|
+
const accounts = this.clientApplication.getAllAccounts();
|
|
51
|
+
const scopes = this.config.scopes;
|
|
52
|
+
if (accounts.length === 1) {
|
|
53
|
+
return from(this.clientApplication.acquireTokenSilent({ account: accounts[0], scopes })).pipe(map(result => ({ sub: result.uniqueId, ...result.idTokenClaims })), catchError(error => (error instanceof InteractionRequiredAuthError ? of(undefined) : throwError(error))));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return of(undefined);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthService, deps: [{ token: i1.AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
61
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthService, decorators: [{
|
|
63
|
+
type: Injectable,
|
|
64
|
+
args: [{
|
|
65
|
+
providedIn: 'root',
|
|
66
|
+
}]
|
|
67
|
+
}], ctorParameters: function () { return [{ type: i1.AuthConfig }]; } });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsNEJBQTRCLEVBQzVCLHVCQUF1QixHQUN4QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFLM0MsTUFBTSxPQUFPLFdBQVc7SUFHdEIsWUFBb0MsTUFBa0I7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNwRCxNQUFNLFVBQVUsR0FBa0I7WUFDaEMsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO2dCQUN2RCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2dCQUN6QyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTTthQUNuRDtTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBeUI7UUFDaEQsT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztZQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFN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SyxDQUFDLENBQUMsQ0FBQyxDQUN6RyxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQzs7d0dBckVVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBdXRoZW50aWNhdGlvblJlc3VsdCxcbiAgQ29uZmlndXJhdGlvbixcbiAgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvcixcbiAgUHVibGljQ2xpZW50QXBwbGljYXRpb24sXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgZnJvbSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudEFwcGxpY2F0aW9uOiBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb25maWc6IEF1dGhDb25maWcpIHtcbiAgICBjb25zdCBtc2FsQ29uZmlnOiBDb25maWd1cmF0aW9uID0ge1xuICAgICAgYXV0aDoge1xuICAgICAgICBjbGllbnRJZDogY29uZmlnLmNsaWVudElkLFxuICAgICAgICBhdXRob3JpdHk6IGAke2NvbmZpZy5hdXRob3JpdHl9LyR7Y29uZmlnLnNpZ25JblBvbGljeX1gLFxuICAgICAgICBrbm93bkF1dGhvcml0aWVzOiBjb25maWcua25vd25BdXRob3JpdGllcyxcbiAgICAgICAgcmVkaXJlY3RVcmk6IGNvbmZpZy5yZWRpcmVjdFVyaSA/PyBsb2NhdGlvbi5vcmlnaW4sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLmNsaWVudEFwcGxpY2F0aW9uID0gbmV3IFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uKG1zYWxDb25maWcpO1xuICB9XG5cbiAgcHVibGljIGxvZ2luV2l0aFJlZGlyZWN0KHN0YXRlOiB7IHRhcmdldDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gZnJvbShcbiAgICAgIHRoaXMuY2xpZW50QXBwbGljYXRpb24ubG9naW5SZWRpcmVjdCh7XG4gICAgICAgIHNjb3BlczogdGhpcy5jb25maWcuc2NvcGVzLFxuICAgICAgICBzdGF0ZTogSlNPTi5zdHJpbmdpZnkoeyAuLi5zdGF0ZSwgcGFzc3dvcmRSZXNldDogZmFsc2UgfSksXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXNzd29yZFdpdGhSZWRpcmVjdChzdGF0ZTogeyB0YXJnZXQ6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmxvZ2luUmVkaXJlY3Qoe1xuICAgICAgICBhdXRob3JpdHk6IGAke3RoaXMuY29uZmlnLmF1dGhvcml0eX0vJHt0aGlzLmNvbmZpZy5yZXNldFBhc3N3b3JkUG9saWN5fWAsXG4gICAgICAgIHNjb3BlczogdGhpcy5jb25maWcuc2NvcGVzLFxuICAgICAgICBzdGF0ZTogSlNPTi5zdHJpbmdpZnkoeyAuLi5zdGF0ZSwgcGFzc3dvcmRSZXNldDogdHJ1ZSB9KSxcbiAgICAgICAgcHJvbXB0OiAnbG9naW4nLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVJlZGlyZWN0Q2FsbGJhY2soKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5oYW5kbGVSZWRpcmVjdFByb21pc2UoKSkucGlwZShcbiAgICAgIGZpbHRlcigocmVzdWx0KTogcmVzdWx0IGlzIEF1dGhlbnRpY2F0aW9uUmVzdWx0ID0+IHJlc3VsdCAhPT0gbnVsbCksXG4gICAgICBtYXAocmVzdWx0ID0+ICh7XG4gICAgICAgIHN0YXRlOiByZXN1bHQuc3RhdGUgPyBKU09OLnBhcnNlKHJlc3VsdC5zdGF0ZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIHVzZXI6IHsgc3ViOiByZXN1bHQudW5pcXVlSWQsIC4uLnJlc3VsdC5pZFRva2VuQ2xhaW1zIH0sXG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmdldEFsbEFjY291bnRzKClbMF07XG4gICAgY29uc3Qgc2NvcGVzID0gdGhpcy5jb25maWcuc2NvcGVzO1xuXG4gICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5hY3F1aXJlVG9rZW5TaWxlbnQoeyBhY2NvdW50LCBzY29wZXMgfSkpLnBpcGUobWFwKHJlc3VsdCA9PiByZXN1bHQuYWNjZXNzVG9rZW4pKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dvdXQoKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5sb2dvdXRSZWRpcmVjdCh7IHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogbG9jYXRpb24ub3JpZ2luIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1Nlc3Npb24oKSB7XG4gICAgY29uc3QgYWNjb3VudHMgPSB0aGlzLmNsaWVudEFwcGxpY2F0aW9uLmdldEFsbEFjY291bnRzKCk7XG4gICAgY29uc3Qgc2NvcGVzID0gdGhpcy5jb25maWcuc2NvcGVzO1xuXG4gICAgaWYgKGFjY291bnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5jbGllbnRBcHBsaWNhdGlvbi5hY3F1aXJlVG9rZW5TaWxlbnQoeyBhY2NvdW50OiBhY2NvdW50c1swXSwgc2NvcGVzIH0pKS5waXBlKFxuICAgICAgICBtYXAocmVzdWx0ID0+ICh7IHN1YjogcmVzdWx0LnVuaXF1ZUlkLCAuLi5yZXN1bHQuaWRUb2tlbkNsYWltcyB9KSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gKGVycm9yIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciA/IG9mKHVuZGVmaW5lZCkgOiB0aHJvd0Vycm9yKGVycm9yKSkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';
|
|
4
|
+
import { Actions, createEffect, ofType } from '@ngrx/effects';
|
|
5
|
+
import { of } from 'rxjs';
|
|
6
|
+
import { catchError, filter, map, switchMap } from 'rxjs/operators';
|
|
7
|
+
import { init, resetPassword, signedIn, signedOut, signIn, signInCompleted, signInFailed, signInRedirected, signOut, } from '../actions/auth.actions';
|
|
8
|
+
import { AuthService } from '../auth.service';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@ngrx/effects";
|
|
11
|
+
import * as i2 from "../auth.service";
|
|
12
|
+
import * as i3 from "@angular/router";
|
|
13
|
+
export class AuthEffects {
|
|
14
|
+
constructor(actions$, auth, router) {
|
|
15
|
+
this.actions$ = actions$;
|
|
16
|
+
this.auth = auth;
|
|
17
|
+
this.router = router;
|
|
18
|
+
this.signIn$ = createEffect(() => this.actions$.pipe(ofType(signIn), switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
|
|
19
|
+
this.passwordReset$ = createEffect(() => this.actions$.pipe(ofType(resetPassword), switchMap(action => this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
|
|
20
|
+
this.signInCompleted$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))));
|
|
21
|
+
this.redirect$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))), { dispatch: false });
|
|
22
|
+
this.signOut$ = createEffect(() => this.actions$.pipe(ofType(signOut), switchMap(_ => this.auth.logout().pipe(map(() => signedOut()), catchError(() => of(signedOut()))))));
|
|
23
|
+
this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
|
|
24
|
+
const params = window.location.hash;
|
|
25
|
+
if ((params.includes('code=') && params.includes('state=')) ||
|
|
26
|
+
(params.includes('error=') && params.includes('error_description='))) {
|
|
27
|
+
return this.completeSignIn();
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return this.auth.checkSession().pipe(map(user => this.getAuthResult(user)), catchError(error => of(signInFailed({ error }))));
|
|
31
|
+
}
|
|
32
|
+
})));
|
|
33
|
+
this.resetPassword$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isForgotPasswordError), map(() => resetPassword({ returnUrl: '/' }))));
|
|
34
|
+
this.failed$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isInteractionInProgress), map(() => signOut())));
|
|
35
|
+
}
|
|
36
|
+
ngrxOnInitEffects() {
|
|
37
|
+
return init();
|
|
38
|
+
}
|
|
39
|
+
static isForgotPasswordError(error) {
|
|
40
|
+
return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;
|
|
41
|
+
}
|
|
42
|
+
static isInteractionInProgress(error) {
|
|
43
|
+
return error.errorCode === BrowserAuthErrorMessage.interactionInProgress.code;
|
|
44
|
+
}
|
|
45
|
+
getAuthResult(user) {
|
|
46
|
+
if (user) {
|
|
47
|
+
return signedIn({ user });
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return signedOut();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
completeSignIn() {
|
|
54
|
+
return this.auth.handleRedirectCallback().pipe(map(result => signInCompleted({ state: result.state, user: result.user })), catchError(error => of(signInFailed({ error }))));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthEffects, deps: [{ token: i1.Actions }, { token: i2.AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
58
|
+
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthEffects });
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthEffects, decorators: [{
|
|
60
|
+
type: Injectable
|
|
61
|
+
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.AuthService }, { type: i3.Router }]; } });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9lZmZlY3RzL2F1dGguZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsSUFBSSxFQUNKLGFBQWEsRUFDYixRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixlQUFlLEVBQ2YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixPQUFPLEdBQ1IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRzlDLE1BQU0sT0FBTyxXQUFXO0lBOEZ0QixZQUNtQixRQUFpQixFQUNqQixJQUFpQixFQUNqQixNQUFjO1FBRmQsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFoR2pCLFlBQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ2QsU0FBUyxDQUFDLE1BQU0s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Y3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXV0aEVycm9yLCBCcm93c2VyQXV0aEVycm9yTWVzc2FnZSB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUsIE9uSW5pdEVmZmVjdHMgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgaW5pdCxcbiAgcmVzZXRQYXNzd29yZCxcbiAgc2lnbmVkSW4sXG4gIHNpZ25lZE91dCxcbiAgc2lnbkluLFxuICBzaWduSW5Db21wbGV0ZWQsXG4gIHNpZ25JbkZhaWxlZCxcbiAgc2lnbkluUmVkaXJlY3RlZCxcbiAgc2lnbk91dCxcbn0gZnJvbSAnLi4vYWN0aW9ucy9hdXRoLmFjdGlvbnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aEVmZmVjdHMgaW1wbGVtZW50cyBPbkluaXRFZmZlY3RzIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpZ25JbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoc2lnbkluKSxcbiAgICAgIHN3aXRjaE1hcChhY3Rpb24gPT5cbiAgICAgICAgdGhpcy5hdXRoLmxvZ2luV2l0aFJlZGlyZWN0KHsgdGFyZ2V0OiBhY3Rpb24ucmV0dXJuVXJsIH0pLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHNpZ25JblJlZGlyZWN0ZWQoKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBhc3N3b3JkUmVzZXQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHJlc2V0UGFzc3dvcmQpLFxuICAgICAgc3dpdGNoTWFwKGFjdGlvbiA9PlxuICAgICAgICB0aGlzLmF1dGgucmVzZXRQYXNzd29yZFdpdGhSZWRpcmVjdCh7IHRhcmdldDogYWN0aW9uLnJldHVyblVybCB9KS5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiBzaWduSW5SZWRpcmVjdGVkKCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2Yoc2lnbkluRmFpbGVkKHsgZXJyb3IgfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaWduSW5Db21wbGV0ZWQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHNpZ25JbkNvbXBsZXRlZCksXG4gICAgICBtYXAoKHsgc3RhdGUsIHVzZXIgfSkgPT4gKHN0YXRlLnBhc3N3b3JkUmVzZXQgPyBzaWduT3V0KCkgOiBzaWduZWRJbih7IHVzZXIgfSkpKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVkaXJlY3QkID0gY3JlYXRlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShzaWduSW5Db21wbGV0ZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYWN0aW9uLnN0YXRlLnRhcmdldCwgeyByZXBsYWNlVXJsOiB0cnVlIH0pKVxuICAgICAgKSxcbiAgICB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNpZ25PdXQkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKHNpZ25PdXQpLFxuICAgICAgc3dpdGNoTWFwKF8gPT5cbiAgICAgICAgdGhpcy5hdXRoLmxvZ291dCgpLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHNpZ25lZE91dCgpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHNpZ25lZE91dCgpKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoaW5pdCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcmFtcy5pbmNsdWRlcygnY29kZT0nKSAmJiBwYXJhbXMuaW5jbHVkZXMoJ3N0YXRlPScpKSB8fFxuICAgICAgICAgIChwYXJhbXMuaW5jbHVkZXMoJ2Vycm9yPScpICYmIHBhcmFtcy5pbmNsdWRlcygnZXJyb3JfZGVzY3JpcHRpb249JykpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlU2lnbkluKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aC5jaGVja1Nlc3Npb24oKS5waXBlKFxuICAgICAgICAgICAgbWFwKHVzZXIgPT4gdGhpcy5nZXRBdXRoUmVzdWx0KHVzZXIpKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2Yoc2lnbkluRmFpbGVkKHsgZXJyb3IgfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNldFBhc3N3b3JkJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShzaWduSW5GYWlsZWQpLFxuICAgICAgZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZXJyb3IgaW5zdGFuY2VvZiBBdXRoRXJyb3IpLFxuICAgICAgbWFwKGFjdGlvbiA9PiBhY3Rpb24uZXJyb3IgYXMgQXV0aEVycm9yKSxcbiAgICAgIGZpbHRlcihBdXRoRWZmZWN0cy5pc0ZvcmdvdFBhc3N3b3JkRXJyb3IpLFxuICAgICAgbWFwKCgpID0+IHJlc2V0UGFzc3dvcmQoeyByZXR1cm5Vcmw6ICcvJyB9KSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZhaWxlZCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoc2lnbkluRmFpbGVkKSxcbiAgICAgIGZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLmVycm9yIGluc3RhbmNlb2YgQXV0aEVycm9yKSxcbiAgICAgIG1hcChhY3Rpb24gPT4gYWN0aW9uLmVycm9yIGFzIEF1dGhFcnJvciksXG4gICAgICBmaWx0ZXIoQXV0aEVmZmVjdHMuaXNJbnRlcmFjdGlvbkluUHJvZ3Jlc3MpLFxuICAgICAgbWFwKCgpID0+IHNpZ25PdXQoKSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBwdWJsaWMgbmdyeE9uSW5pdEVmZmVjdHMoKSB7XG4gICAgcmV0dXJuIGluaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzRm9yZ290UGFzc3dvcmRFcnJvcihlcnJvcjogQXV0aEVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLmVycm9yQ29kZSA9PT0gJ2FjY2Vzc19kZW5pZWQnICYmIGVycm9yLmVycm9yTWVzc2FnZS5pbmRleE9mKCdBQURCMkM5MDExOCcpICE9PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzSW50ZXJhY3Rpb25JblByb2dyZXNzKGVycm9yOiBBdXRoRXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IuZXJyb3JDb2RlID09PSBCcm93c2VyQXV0aEVycm9yTWVzc2FnZS5pbnRlcmFjdGlvbkluUHJvZ3Jlc3MuY29kZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0aFJlc3VsdCh1c2VyOiB7IHN1Yjogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodXNlcikge1xuICAgICAgcmV0dXJuIHNpZ25lZEluKHsgdXNlciB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNpZ25lZE91dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGxldGVTaWduSW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aC5oYW5kbGVSZWRpcmVjdENhbGxiYWNrKCkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4gc2lnbkluQ29tcGxldGVkKHsgc3RhdGU6IHJlc3VsdC5zdGF0ZSwgdXNlcjogcmVzdWx0LnVzZXIgfSkpLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihzaWduSW5GYWlsZWQoeyBlcnJvciB9KSkpXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { map, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { AuthService } from './auth.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./auth.service";
|
|
6
|
+
export class JwtInterceptor {
|
|
7
|
+
constructor(auth) {
|
|
8
|
+
this.auth = auth;
|
|
9
|
+
}
|
|
10
|
+
intercept(request, next) {
|
|
11
|
+
if (this.isSameDomain(request)) {
|
|
12
|
+
return this.authorize(request).pipe(mergeMap(authorizedRequest => next.handle(authorizedRequest)));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return next.handle(request);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
isSameDomain(request) {
|
|
19
|
+
const isAbsolute = /^https?:\/\//i.test(request.url);
|
|
20
|
+
return !isAbsolute;
|
|
21
|
+
}
|
|
22
|
+
authorize(request) {
|
|
23
|
+
const token$ = this.auth.getAccessToken();
|
|
24
|
+
return token$.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: JwtInterceptor, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
|
+
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: JwtInterceptor });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
30
|
+
type: Injectable
|
|
31
|
+
}], ctorParameters: function () { return [{ type: i1.AuthService }]; } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9qd3QuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRzdDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9DLElBQWlCO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7SUFBRyxDQUFDO0lBRWxELFNBQVMsQ0FBQyxPQUF5QixFQUFFLElBQWlCO1FBQzNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRzthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxPQUF5QjtRQUM1QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyRCxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxTQUFTLENBQUMsT0FBeUI7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUUxQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RyxDQUFDOzsyR0FyQlUsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEp3dEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXV0aDogQXV0aFNlcnZpY2UpIHt9XG5cbiAgcHVibGljIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIGlmICh0aGlzLmlzU2FtZURvbWFpbihyZXF1ZXN0KSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXV0aG9yaXplKHJlcXVlc3QpLnBpcGUobWVyZ2VNYXAoYXV0aG9yaXplZFJlcXVlc3QgPT4gbmV4dC5oYW5kbGUoYXV0aG9yaXplZFJlcXVlc3QpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZURvbWFpbihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3QgaXNBYnNvbHV0ZSA9IC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocmVxdWVzdC51cmwpO1xuXG4gICAgcmV0dXJuICFpc0Fic29sdXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRob3JpemUocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pikge1xuICAgIGNvbnN0IHRva2VuJCA9IHRoaXMuYXV0aC5nZXRBY2Nlc3NUb2tlbigpO1xuXG4gICAgcmV0dXJuIHRva2VuJC5waXBlKG1hcCh0b2tlbiA9PiByZXF1ZXN0LmNsb25lKHsgc2V0SGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9IH0pKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createReducer, on } from '@ngrx/store';
|
|
2
|
+
import { signedIn, signedOut, signInFailed } from '../actions/auth.actions';
|
|
3
|
+
export const noAuthentication = {
|
|
4
|
+
authenticating: false,
|
|
5
|
+
authenticated: false,
|
|
6
|
+
};
|
|
7
|
+
export const startAuthentication = {
|
|
8
|
+
authenticating: true,
|
|
9
|
+
authenticated: false,
|
|
10
|
+
};
|
|
11
|
+
const authReducer = createReducer(startAuthentication, on(signedIn, (state, { user }) => ({
|
|
12
|
+
...state,
|
|
13
|
+
authenticating: false,
|
|
14
|
+
authenticated: true,
|
|
15
|
+
user,
|
|
16
|
+
})), on(signedOut, _ => noAuthentication), on(signInFailed, _ => noAuthentication));
|
|
17
|
+
export function reducer(state, action) {
|
|
18
|
+
return authReducer(state, action);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5yZWR1Y2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL2xpYi9yZWR1Y2Vycy9hdXRoLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHNUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQVU7SUFDckMsY0FBYyxFQUFFLEtBQUs7SUFDckIsYUFBYSxFQUFFLEtBQUs7Q0FDckIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFVO0lBQ3hDLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLGFBQWEsRUFBRSxLQUFLO0NBQ3JCLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQy9CLG1CQUFtQixFQUNuQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakMsR0FBRyxLQUFLO0lBQ1IsY0FBYyxFQUFFLEtBQUs7SUFDckIsYUFBYSxFQUFFLElBQUk7SUFDbkIsSUFBSTtDQUNMLENBQUMsQ0FBQyxFQUNILEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNwQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FDeEMsQ0FBQztBQUVGLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBd0IsRUFBRSxNQUFjO0lBQzlELE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uLCBjcmVhdGVSZWR1Y2VyLCBvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IHNpZ25lZEluLCBzaWduZWRPdXQsIHNpZ25JbkZhaWxlZCB9IGZyb20gJy4uL2FjdGlvbnMvYXV0aC5hY3Rpb25zJztcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUvYXV0aC5zdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBub0F1dGhlbnRpY2F0aW9uOiBTdGF0ZSA9IHtcbiAgYXV0aGVudGljYXRpbmc6IGZhbHNlLFxuICBhdXRoZW50aWNhdGVkOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBjb25zdCBzdGFydEF1dGhlbnRpY2F0aW9uOiBTdGF0ZSA9IHtcbiAgYXV0aGVudGljYXRpbmc6IHRydWUsXG4gIGF1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxufTtcblxuY29uc3QgYXV0aFJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxuICBzdGFydEF1dGhlbnRpY2F0aW9uLFxuICBvbihzaWduZWRJbiwgKHN0YXRlLCB7IHVzZXIgfSkgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhdXRoZW50aWNhdGluZzogZmFsc2UsXG4gICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICB1c2VyLFxuICB9KSksXG4gIG9uKHNpZ25lZE91dCwgXyA9PiBub0F1dGhlbnRpY2F0aW9uKSxcbiAgb24oc2lnbkluRmFpbGVkLCBfID0+IG5vQXV0aGVudGljYXRpb24pXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZTogU3RhdGUgfCB1bmRlZmluZWQsIGFjdGlvbjogQWN0aW9uKSB7XG4gIHJldHVybiBhdXRoUmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbn1cbiJdfQ==
|
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createFeatureSelector, select } from '@ngrx/store';
|
|
2
|
+
import { pipe } from 'rxjs';
|
|
3
|
+
import { filter, map } from 'rxjs/operators';
|
|
4
|
+
export const featureKey = 'auth';
|
|
5
|
+
export const selectState = createFeatureSelector(featureKey);
|
|
6
|
+
export const isAuthenticated = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.authenticated));
|
|
7
|
+
export const getUser = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.user));
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iMmMtYW5ndWxhci9zcmMvbGliL3N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFRLFVBQVUsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQ2pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQ3RDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FDbEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQ3RDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUZlYXR1cmVTZWxlY3Rvciwgc2VsZWN0IH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4uL3N0YXRlL2F1dGguc3RhdGUnO1xuXG5leHBvcnQgY29uc3QgZmVhdHVyZUtleSA9ICdhdXRoJztcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFN0YXRlID0gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPFN0YXRlPihmZWF0dXJlS2V5KTtcblxuZXhwb3J0IGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IHBpcGUoXG4gIHNlbGVjdChzZWxlY3RTdGF0ZSksXG4gIGZpbHRlcihzdGF0ZSA9PiAhc3RhdGUuYXV0aGVudGljYXRpbmcpLFxuICBtYXAoc3RhdGUgPT4gc3RhdGUuYXV0aGVudGljYXRlZClcbik7XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyID0gcGlwZShcbiAgc2VsZWN0KHNlbGVjdFN0YXRlKSxcbiAgZmlsdGVyKHN0YXRlID0+ICFzdGF0ZS5hdXRoZW50aWNhdGluZyksXG4gIG1hcChzdGF0ZSA9PiBzdGF0ZS51c2VyKVxuKTtcbiJdfQ==
|
|
File without changes
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlY2xhLWIyYy1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYjJjLWFuZ3VsYXIvc3JjL3RoZWNsYS1iMmMtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { Injectable, NgModule } from '@angular/core';
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
4
|
+
import * as i1 from '@ngrx/effects';
|
|
5
|
+
import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
|
|
6
|
+
import * as i1$1 from '@ngrx/store';
|
|
7
|
+
import { createAction, props, createReducer, on, createFeatureSelector, select, StoreModule } from '@ngrx/store';
|
|
8
8
|
import { PublicClientApplication, InteractionRequiredAuthError, AuthError, BrowserAuthErrorMessage } from '@azure/msal-browser';
|
|
9
|
-
import { from, of, throwError,
|
|
10
|
-
import { filter, map, catchError, switchMap,
|
|
11
|
-
import
|
|
9
|
+
import { from, of, throwError, pipe } from 'rxjs';
|
|
10
|
+
import { filter, map, catchError, switchMap, mergeMap, tap, first } from 'rxjs/operators';
|
|
11
|
+
import * as i3 from '@angular/router';
|
|
12
12
|
|
|
13
13
|
class AuthConfig {
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
16
|
+
const init = createAction('[@thecla/b2c-angular] init');
|
|
17
|
+
const signIn = createAction('[@thecla/b2c-angular] sign-in', props());
|
|
18
|
+
const signInRedirected = createAction('[@thecla/b2c-angular] sign in redirected');
|
|
19
|
+
const signInCompleted = createAction('[@thecla/b2c-angular] sign in completed', props());
|
|
20
|
+
const signedIn = createAction('[@thecla/b2c-angular] signed in', props());
|
|
21
|
+
const signInFailed = createAction('[@thecla/b2c-angular] sign in failed', props());
|
|
22
|
+
const signOut = createAction('[@thecla/b2c-angular] sign out');
|
|
23
|
+
const signedOut = createAction('[@thecla/b2c-angular] signed out');
|
|
24
|
+
const resetPassword = createAction('[@thecla/b2c-angular] reset password', props());
|
|
24
25
|
|
|
25
26
|
class AuthService {
|
|
26
27
|
constructor(config) {
|
|
@@ -75,15 +76,14 @@ class AuthService {
|
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
|
-
AuthService.ɵ
|
|
79
|
-
AuthService
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
];
|
|
79
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthService, deps: [{ token: AuthConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
80
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthService, decorators: [{
|
|
82
|
+
type: Injectable,
|
|
83
|
+
args: [{
|
|
84
|
+
providedIn: 'root',
|
|
85
|
+
}]
|
|
86
|
+
}], ctorParameters: function () { return [{ type: AuthConfig }]; } });
|
|
87
87
|
|
|
88
88
|
class AuthEffects {
|
|
89
89
|
constructor(actions$, auth, router) {
|
|
@@ -92,22 +92,25 @@ class AuthEffects {
|
|
|
92
92
|
this.router = router;
|
|
93
93
|
this.signIn$ = createEffect(() => this.actions$.pipe(ofType(signIn), switchMap(action => this.auth.loginWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
|
|
94
94
|
this.passwordReset$ = createEffect(() => this.actions$.pipe(ofType(resetPassword), switchMap(action => this.auth.resetPasswordWithRedirect({ target: action.returnUrl }).pipe(map(() => signInRedirected()), catchError(error => of(signInFailed({ error })))))));
|
|
95
|
-
this.signInCompleted$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), map(
|
|
95
|
+
this.signInCompleted$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), map(({ state, user }) => (state.passwordReset ? signOut() : signedIn({ user })))));
|
|
96
96
|
this.redirect$ = createEffect(() => this.actions$.pipe(ofType(signInCompleted), switchMap(action => this.router.navigateByUrl(action.state.target, { replaceUrl: true }))), { dispatch: false });
|
|
97
97
|
this.signOut$ = createEffect(() => this.actions$.pipe(ofType(signOut), switchMap(_ => this.auth.logout().pipe(map(() => signedOut()), catchError(() => of(signedOut()))))));
|
|
98
|
-
this.init$ = createEffect(() => (
|
|
98
|
+
this.init$ = createEffect(() => this.actions$.pipe(ofType(init), switchMap(() => {
|
|
99
99
|
const params = window.location.hash;
|
|
100
100
|
if ((params.includes('code=') && params.includes('state=')) ||
|
|
101
101
|
(params.includes('error=') && params.includes('error_description='))) {
|
|
102
|
-
return this.completeSignIn(
|
|
102
|
+
return this.completeSignIn();
|
|
103
103
|
}
|
|
104
104
|
else {
|
|
105
|
-
return this.auth.checkSession().pipe(map(user => this.getAuthResult(user)), catchError(error => of(signInFailed({ error })))
|
|
105
|
+
return this.auth.checkSession().pipe(map(user => this.getAuthResult(user)), catchError(error => of(signInFailed({ error }))));
|
|
106
106
|
}
|
|
107
|
-
});
|
|
107
|
+
})));
|
|
108
108
|
this.resetPassword$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isForgotPasswordError), map(() => resetPassword({ returnUrl: '/' }))));
|
|
109
109
|
this.failed$ = createEffect(() => this.actions$.pipe(ofType(signInFailed), filter(action => action.error instanceof AuthError), map(action => action.error), filter(AuthEffects.isInteractionInProgress), map(() => signOut())));
|
|
110
110
|
}
|
|
111
|
+
ngrxOnInitEffects() {
|
|
112
|
+
return init();
|
|
113
|
+
}
|
|
111
114
|
static isForgotPasswordError(error) {
|
|
112
115
|
return error.errorCode === 'access_denied' && error.errorMessage.indexOf('AADB2C90118') !== -1;
|
|
113
116
|
}
|
|
@@ -116,24 +119,21 @@ class AuthEffects {
|
|
|
116
119
|
}
|
|
117
120
|
getAuthResult(user) {
|
|
118
121
|
if (user) {
|
|
119
|
-
return signedIn(user);
|
|
122
|
+
return signedIn({ user });
|
|
120
123
|
}
|
|
121
124
|
else {
|
|
122
125
|
return signedOut();
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
|
-
completeSignIn(
|
|
126
|
-
return this.auth.handleRedirectCallback().pipe(map(result => signInCompleted({ state: result.state, user: result.user })), catchError(error => of(signInFailed({ error })))
|
|
128
|
+
completeSignIn() {
|
|
129
|
+
return this.auth.handleRedirectCallback().pipe(map(result => signInCompleted({ state: result.state, user: result.user })), catchError(error => of(signInFailed({ error }))));
|
|
127
130
|
}
|
|
128
131
|
}
|
|
129
|
-
AuthEffects
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
{ type: AuthService },
|
|
135
|
-
{ type: Router }
|
|
136
|
-
];
|
|
132
|
+
AuthEffects.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthEffects, deps: [{ token: i1.Actions }, { token: AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
133
|
+
AuthEffects.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthEffects });
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthEffects, decorators: [{
|
|
135
|
+
type: Injectable
|
|
136
|
+
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: AuthService }, { type: i3.Router }]; } });
|
|
137
137
|
|
|
138
138
|
class JwtInterceptor {
|
|
139
139
|
constructor(auth) {
|
|
@@ -156,12 +156,11 @@ class JwtInterceptor {
|
|
|
156
156
|
return token$.pipe(map(token => request.clone({ setHeaders: { Authorization: `Bearer ${token}` } })));
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
|
-
JwtInterceptor
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
];
|
|
159
|
+
JwtInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: JwtInterceptor, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
160
|
+
JwtInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: JwtInterceptor });
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: JwtInterceptor, decorators: [{
|
|
162
|
+
type: Injectable
|
|
163
|
+
}], ctorParameters: function () { return [{ type: AuthService }]; } });
|
|
165
164
|
|
|
166
165
|
const noAuthentication = {
|
|
167
166
|
authenticating: false,
|
|
@@ -171,21 +170,15 @@ const startAuthentication = {
|
|
|
171
170
|
authenticating: true,
|
|
172
171
|
authenticated: false,
|
|
173
172
|
};
|
|
174
|
-
const
|
|
175
|
-
var { type } = _a, payload = __rest(_a, ["type"]);
|
|
176
|
-
return (Object.assign(Object.assign({}, state), { authenticating: false, authenticated: true, user: payload }));
|
|
177
|
-
}, ɵ1$1 = () => noAuthentication, ɵ2$1 = () => noAuthentication;
|
|
178
|
-
const authReducer = createReducer(startAuthentication, on(signedIn, ɵ0$1), on(signedOut, ɵ1$1), on(signInFailed, ɵ2$1));
|
|
173
|
+
const authReducer = createReducer(startAuthentication, on(signedIn, (state, { user }) => (Object.assign(Object.assign({}, state), { authenticating: false, authenticated: true, user }))), on(signedOut, _ => noAuthentication), on(signInFailed, _ => noAuthentication));
|
|
179
174
|
function reducer(state, action) {
|
|
180
175
|
return authReducer(state, action);
|
|
181
176
|
}
|
|
182
177
|
|
|
183
178
|
const featureKey = 'auth';
|
|
184
179
|
const selectState = createFeatureSelector(featureKey);
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
const ɵ2 = state => !state.authenticating, ɵ3 = state => state.user;
|
|
188
|
-
const getUser = pipe(select(selectState), filter(ɵ2), map(ɵ3));
|
|
180
|
+
const isAuthenticated = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.authenticated));
|
|
181
|
+
const getUser = pipe(select(selectState), filter(state => !state.authenticating), map(state => state.user));
|
|
189
182
|
|
|
190
183
|
class AuthModule {
|
|
191
184
|
static forRoot(config) {
|
|
@@ -205,13 +198,17 @@ class AuthModule {
|
|
|
205
198
|
};
|
|
206
199
|
}
|
|
207
200
|
}
|
|
208
|
-
AuthModule
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
]
|
|
201
|
+
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
202
|
+
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, imports: [i1$1.StoreFeatureModule, i1.EffectsFeatureModule] });
|
|
203
|
+
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])] });
|
|
204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthModule, decorators: [{
|
|
205
|
+
type: NgModule,
|
|
206
|
+
args: [{
|
|
207
|
+
declarations: [],
|
|
208
|
+
imports: [StoreModule.forFeature(featureKey, reducer), EffectsModule.forFeature([AuthEffects])],
|
|
209
|
+
exports: [],
|
|
210
|
+
}]
|
|
211
|
+
}] });
|
|
215
212
|
|
|
216
213
|
class AuthGuard {
|
|
217
214
|
constructor(store) {
|
|
@@ -226,19 +223,18 @@ class AuthGuard {
|
|
|
226
223
|
}), first());
|
|
227
224
|
}
|
|
228
225
|
}
|
|
229
|
-
AuthGuard.ɵ
|
|
230
|
-
AuthGuard
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
];
|
|
226
|
+
AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthGuard, deps: [{ token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
227
|
+
AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: AuthGuard, decorators: [{
|
|
229
|
+
type: Injectable,
|
|
230
|
+
args: [{
|
|
231
|
+
providedIn: 'root',
|
|
232
|
+
}]
|
|
233
|
+
}], ctorParameters: function () { return [{ type: i1$1.Store }]; } });
|
|
238
234
|
|
|
239
235
|
/**
|
|
240
236
|
* Generated bundle index. Do not edit.
|
|
241
237
|
*/
|
|
242
238
|
|
|
243
|
-
export { AuthGuard, AuthModule, getUser, isAuthenticated, signIn, signOut, signedIn, signedOut
|
|
244
|
-
//# sourceMappingURL=thecla-b2c-angular.
|
|
239
|
+
export { AuthGuard, AuthModule, getUser, isAuthenticated, signIn, signOut, signedIn, signedOut };
|
|
240
|
+
//# sourceMappingURL=thecla-b2c-angular.mjs.map
|