@igo2/auth 17.0.0-next.4 → 17.0.0-next.5
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/environment/environment.interface.d.ts +2 -2
- package/esm2022/environment/environment.interface.mjs +1 -1
- package/esm2022/form/auth-form.module.mjs +2 -24
- package/esm2022/form/public_api.mjs +1 -3
- package/esm2022/form/shared/index.mjs +1 -3
- package/esm2022/lib/auth.provider.mjs +22 -0
- package/esm2022/lib/shared/admin.guard.mjs +1 -1
- package/esm2022/lib/shared/auth-storage.interface.mjs +2 -0
- package/esm2022/lib/shared/auth-storage.service.mjs +100 -0
- package/esm2022/lib/shared/auth.guard.mjs +1 -1
- package/esm2022/lib/shared/auth.interceptor.mjs +1 -1
- package/esm2022/lib/shared/auth.interface.mjs +5 -2
- package/esm2022/lib/shared/auth.service.mjs +1 -1
- package/esm2022/lib/shared/index.mjs +12 -0
- package/esm2022/lib/shared/logged.guard.mjs +1 -1
- package/esm2022/lib/shared/profils.guard.mjs +1 -1
- package/esm2022/lib/shared/token.service.mjs +1 -1
- package/esm2022/microsoft/auth-microsoft.provider.mjs +43 -30
- package/esm2022/public_api.mjs +3 -10
- package/fesm2022/igo2-auth-form.mjs +9 -120
- package/fesm2022/igo2-auth-form.mjs.map +1 -1
- package/fesm2022/igo2-auth-microsoft.mjs +44 -31
- package/fesm2022/igo2-auth-microsoft.mjs.map +1 -1
- package/fesm2022/igo2-auth.mjs +225 -112
- package/fesm2022/igo2-auth.mjs.map +1 -1
- package/form/auth-form.module.d.ts +0 -2
- package/form/public_api.d.ts +0 -2
- package/form/shared/index.d.ts +0 -2
- package/lib/auth.provider.d.ts +3 -0
- package/{form → lib}/shared/auth-storage.service.d.ts +2 -1
- package/lib/shared/auth.interface.d.ts +8 -0
- package/lib/shared/index.d.ts +11 -0
- package/locale/en.auth.json +29 -29
- package/locale/fr.auth.json +33 -33
- package/microsoft/auth-microsoft.provider.d.ts +2 -23
- package/package.json +3 -3
- package/public_api.d.ts +2 -9
- package/esm2022/form/shared/auth-storage.interface.mjs +0 -2
- package/esm2022/form/shared/auth-storage.service.mjs +0 -98
- /package/{form → lib}/shared/auth-storage.interface.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-auth-microsoft.mjs","sources":["../../../packages/auth/microsoft/src/auth-microsoft/auth-microsoft.component.ts","../../../packages/auth/microsoft/src/auth-microsoft/auth-microsoft.component.html","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-msalServiceb2c.service.ts","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-msalBroadcastServiceb2c.service.ts","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-microsoftb2c.component.ts","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-microsoftb2c.component.html","../../../packages/auth/microsoft/src/auth-microsoft.provider.ts","../../../packages/auth/microsoft/src/igo2-auth-microsoft.ts"],"sourcesContent":["import {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { AuthService } from '@igo2/auth';\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n MSAL_GUARD_CONFIG,\n MsalBroadcastService,\n MsalService\n} from '@azure/msal-angular';\nimport {\n AuthenticationResult,\n InteractionRequiredAuthError,\n InteractionStatus,\n PopupRequest,\n PublicClientApplication,\n SilentRequest\n} from '@azure/msal-browser';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport {\n AuthMicrosoftOptions,\n MSPMsalGuardConfiguration\n} from '../shared/auth-microsoft.interface';\n\n@Component({\n selector: 'igo-auth-microsoft',\n templateUrl: './auth-microsoft.component.html',\n styleUrls: ['./auth-microsoft.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [MatButtonModule, MatIconModule, TranslateModule]\n})\nexport class AuthMicrosoftComponent {\n private options?: AuthMicrosoftOptions;\n private readonly _destroying$ = new Subject<void>();\n @Output() login: EventEmitter<boolean> = new EventEmitter<boolean>();\n private broadcastService: MsalBroadcastService;\n\n constructor(\n private authService: AuthService,\n private config: ConfigService,\n private appRef: ApplicationRef,\n private msalService: MsalService,\n @Inject(MSAL_GUARD_CONFIG)\n private msalGuardConfig: MSPMsalGuardConfiguration[]\n ) {\n this.options = this.config.getConfig('auth.microsoft');\n\n this.msalService.instance = new PublicClientApplication({\n auth: this.options,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n this.broadcastService = new MsalBroadcastService(\n this.msalService.instance,\n this.msalService\n );\n\n if (this.options?.clientId) {\n this.broadcastService.inProgress$\n .pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n takeUntil(this._destroying$)\n )\n .subscribe(() => {\n this.checkAccount();\n });\n } else {\n console.warn('Microsoft authentification needs \"clientId\" option');\n }\n }\n\n public loginMicrosoft() {\n this.msalService\n .loginPopup({ ...this.getConf().authRequest } as PopupRequest)\n .subscribe((response: AuthenticationResult) => {\n this.msalService.instance.setActiveAccount(response.account);\n this.checkAccount();\n });\n }\n\n private checkAccount() {\n this.msalService.instance\n .acquireTokenSilent(this.getConf().authRequest as SilentRequest)\n .then((response: AuthenticationResult) => {\n const tokenAccess = response.accessToken;\n const tokenId = response.idToken;\n this.authService\n .loginWithToken(tokenAccess, 'microsoft', { tokenId })\n .subscribe(() => {\n this.appRef.tick();\n this.login.emit(true);\n });\n })\n .catch(async (error) => {\n if (error instanceof InteractionRequiredAuthError) {\n // fallback to interaction when silent call fails\n return this.msalService.acquireTokenPopup(\n this.getConf().authRequest as SilentRequest\n );\n }\n console.log(error);\n })\n .catch((error) => {\n console.log('Silent token fails');\n });\n }\n\n private getConf(): MSPMsalGuardConfiguration {\n return this.msalGuardConfig.filter((conf) => conf.type === 'add')[0];\n }\n}\n","<button\n class=\"microsoft-login-button\"\n mat-raised-button\n (click)=\"loginMicrosoft()\"\n>\n <mat-icon svgIcon=\"microsoft\"></mat-icon>\n {{ 'igo.auth.microsoft.login' | translate }}\n</button>\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { Location } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { MSAL_INSTANCE } from '@azure/msal-angular';\nimport { IMsalService } from '@azure/msal-angular';\nimport {\n AuthenticationResult,\n EndSessionPopupRequest,\n EndSessionRequest,\n IPublicClientApplication,\n Logger,\n PopupRequest,\n RedirectRequest,\n SilentRequest,\n SsoSilentRequest,\n WrapperSKU\n} from '@azure/msal-browser';\nimport { Observable, from } from 'rxjs';\n\n@Injectable()\nexport class MsalServiceb2c implements IMsalService {\n private redirectHash: string;\n private logger: Logger;\n private name = '@azure/msal-angular';\n private version = '2.0.0-beta.2';\n constructor(\n @Inject(MSAL_INSTANCE) public instance: IPublicClientApplication,\n private location: Location\n ) {\n const hash = this.location.path(true).split('#').pop();\n if (hash) {\n this.redirectHash = `#${hash}`;\n }\n this.instance.initializeWrapperLibrary(WrapperSKU.Angular, this.version);\n }\n\n initialize(): Observable<void> {\n return from(this.instance.initialize());\n }\n\n acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenPopup(request));\n }\n acquireTokenRedirect(request: RedirectRequest): Observable<void> {\n return from(this.instance.acquireTokenRedirect(request));\n }\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenSilent(silentRequest));\n }\n handleRedirectObservable(hash?: string): Observable<AuthenticationResult> {\n return from(this.instance.handleRedirectPromise(hash || this.redirectHash));\n }\n loginPopup(request?: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.loginPopup(request));\n }\n loginRedirect(request?: RedirectRequest): Observable<void> {\n return from(this.instance.loginRedirect(request));\n }\n logout(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logout(logoutRequest));\n }\n logoutRedirect(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logoutRedirect(logoutRequest));\n }\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Observable<void> {\n return from(this.instance.logoutPopup(logoutRequest));\n }\n ssoSilent(request: SsoSilentRequest): Observable<AuthenticationResult> {\n return from(this.instance.ssoSilent(request));\n }\n /**\n * Gets logger for msal-angular.\n * If no logger set, returns logger instance created with same options as msal-browser\n */\n getLogger(): Logger {\n if (!this.logger) {\n this.logger = this.instance.getLogger().clone(this.name, this.version);\n }\n return this.logger;\n }\n // Create a logger instance for msal-angular with the same options as msal-browser\n setLogger(logger: Logger): void {\n this.logger = logger.clone(this.name, this.version);\n this.instance.setLogger(logger);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { Inject, Injectable } from '@angular/core';\n\nimport { MSAL_INSTANCE } from '@azure/msal-angular';\nimport {\n EventMessage,\n EventMessageUtils,\n IPublicClientApplication,\n InteractionStatus\n} from '@azure/msal-browser';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { MsalServiceb2c } from './auth-msalServiceb2c.service';\n\n@Injectable()\nexport class MsalBroadcastServiceb2c {\n private _msalSubject: Subject<EventMessage>;\n public msalSubject$: Observable<EventMessage>;\n private _inProgress: BehaviorSubject<InteractionStatus>;\n public inProgress$: Observable<InteractionStatus>;\n\n constructor(\n @Inject(MSAL_INSTANCE) private msalInstance: IPublicClientApplication,\n private authService: MsalServiceb2c\n ) {\n this._msalSubject = new Subject<EventMessage>();\n this.msalSubject$ = this._msalSubject.asObservable();\n\n // InProgress as BehaviorSubject so most recent inProgress state will be available upon subscription\n this._inProgress = new BehaviorSubject<InteractionStatus>(\n InteractionStatus.Startup\n );\n this.inProgress$ = this._inProgress.asObservable();\n\n this.msalInstance.addEventCallback((message: EventMessage) => {\n this._msalSubject.next(message);\n const status = EventMessageUtils.getInteractionStatusFromEvent(message);\n if (status !== null) {\n this.authService\n .getLogger()\n .verbose(\n `BroadcastService - ${message.eventType} results in setting inProgress to ${status}`\n );\n this._inProgress.next(status);\n }\n });\n }\n}\n","import {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { AuthService } from '@igo2/auth';\nimport { ConfigService } from '@igo2/core/config';\n\nimport { MSAL_GUARD_CONFIG } from '@azure/msal-angular';\nimport {\n AuthenticationResult,\n InteractionRequiredAuthError,\n InteractionStatus,\n PopupRequest,\n PublicClientApplication,\n SilentRequest\n} from '@azure/msal-browser';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport {\n AuthMicrosoftb2cOptions,\n MSPMsalGuardConfiguration\n} from '../shared/auth-microsoft.interface';\nimport { MsalBroadcastServiceb2c } from './auth-msalBroadcastServiceb2c.service';\nimport { MsalServiceb2c } from './auth-msalServiceb2c.service';\n\n@Component({\n selector: 'igo-auth-microsoftb2c',\n templateUrl: './auth-microsoftb2c.component.html',\n styleUrls: ['./auth-microsoftb2c.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [MatButtonModule, MatIconModule, TranslateModule],\n providers: [MsalServiceb2c]\n})\nexport class AuthMicrosoftb2cComponent {\n private options: AuthMicrosoftb2cOptions;\n private readonly _destroying$ = new Subject<void>();\n @Output() login: EventEmitter<boolean> = new EventEmitter<boolean>();\n private broadcastService: MsalBroadcastServiceb2c;\n\n constructor(\n private authService: AuthService,\n private config: ConfigService,\n private appRef: ApplicationRef,\n private msalService: MsalServiceb2c,\n @Inject(MSAL_GUARD_CONFIG)\n private msalGuardConfig: MSPMsalGuardConfiguration[]\n ) {\n this.options = this.config.getConfig('auth.microsoftb2c') || {};\n\n this.msalService.instance = new PublicClientApplication({\n auth: this.options.browserAuthOptions,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n this.broadcastService = new MsalBroadcastServiceb2c(\n this.msalService.instance,\n this.msalService\n );\n\n if (this.options.browserAuthOptions.clientId) {\n this.broadcastService.inProgress$\n .pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n takeUntil(this._destroying$)\n )\n .subscribe(() => {\n this.checkAccount();\n });\n } else {\n console.warn('Microsoft authentification needs \"clientId\" option');\n }\n }\n\n public loginMicrosoftb2c() {\n this.msalService\n .loginPopup({ ...this.getConf().authRequest } as PopupRequest)\n .subscribe((response: AuthenticationResult) => {\n this.msalService.instance.setActiveAccount(response.account);\n this.checkAccount();\n });\n }\n\n private checkAccount() {\n this.msalService.instance\n .acquireTokenSilent(this.getConf().authRequest as SilentRequest)\n .then((response: AuthenticationResult) => {\n const token = response.idToken;\n this.authService.loginWithToken(token, 'microsoftb2c').subscribe(() => {\n this.appRef.tick();\n this.login.emit(true);\n });\n })\n .catch(async (error) => {\n if (error instanceof InteractionRequiredAuthError) {\n // fallback to interaction when silent call fails\n return this.msalService.acquireTokenPopup(\n this.getConf().authRequest as SilentRequest\n );\n }\n })\n .catch((error) => {\n console.log('Silent token fails');\n });\n }\n\n private getConf(): MSPMsalGuardConfiguration {\n return this.msalGuardConfig.filter((conf) => conf.type === 'b2c')[0];\n }\n}\n","<button\n class=\"microsoft-login-button\"\n mat-raised-button\n (click)=\"loginMicrosoftb2c()\"\n>\n <mat-icon svgIcon=\"microsoft\"></mat-icon>\n {{ 'igo.auth.microsoftb2c.login' | translate }}\n</button>\n","import { ConfigService } from '@igo2/core/config';\n\nimport {\n MSAL_GUARD_CONFIG,\n MSAL_INSTANCE,\n MsalService\n} from '@azure/msal-angular';\nimport { InteractionType, PublicClientApplication } from '@azure/msal-browser';\nimport { BrowserAuthOptions } from '@azure/msal-browser';\n\nimport { AuthMicrosoftComponent } from './auth-microsoft/auth-microsoft.component';\nimport { AuthMicrosoftb2cComponent } from './auth-microsoftb2c/auth-microsoftb2c.component';\nimport { MsalServiceb2c } from './auth-microsoftb2c/auth-msalServiceb2c.service';\nimport {\n AuthMicrosoftOptions,\n MSPMsalGuardConfiguration\n} from './shared/auth-microsoft.interface';\n\nexport const AUTH_MICROSOFT_DIRECTIVES = [\n AuthMicrosoftComponent,\n AuthMicrosoftb2cComponent\n] as const;\n\nexport function MSALConfigFactory(\n config: ConfigService\n): PublicClientApplication {\n const msConf = config.getConfig('auth.microsoft') as AuthMicrosoftOptions;\n\n msConf.redirectUri = msConf?.redirectUri || window.location.href;\n msConf.authority =\n msConf?.authority || 'https://login.microsoftonline.com/organizations';\n\n const myMsalObj = new PublicClientApplication({\n auth: msConf,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n return myMsalObj;\n}\n\nexport function MSALConfigFactoryb2c(\n config: ConfigService\n): PublicClientApplication {\n const msConf = config.getConfig(\n 'auth.microsoftb2c.browserAuthOptions'\n ) as BrowserAuthOptions;\n msConf.redirectUri = msConf?.redirectUri || window.location.href;\n msConf.authority =\n msConf?.authority || 'https://login.microsoftonline.com/organizations';\n\n const myMsalObj = new PublicClientApplication({\n auth: msConf,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n return myMsalObj;\n}\n\nexport function MSALAngularConfigFactory(\n config: ConfigService\n): MSPMsalGuardConfiguration {\n const msConf = config.getConfig('auth.microsoft') as AuthMicrosoftOptions;\n\n return {\n interactionType: InteractionType.Popup,\n authRequest: {\n scopes: ['user.read'],\n loginHint: 'todo'\n },\n type: 'add'\n };\n}\n\nexport function MSALAngularConfigFactoryb2c(\n config: ConfigService\n): MSPMsalGuardConfiguration {\n const msConf = config.getConfig(\n 'auth.microsoftb2c.browserAuthOptions'\n ) as BrowserAuthOptions;\n\n return {\n interactionType: InteractionType.Popup,\n authRequest: {\n scopes: [msConf?.clientId]\n },\n type: 'b2c'\n };\n}\n\nexport function provideAuthMicrosoft(type?: string) {\n if (type === 'b2c') {\n return [\n {\n provide: MSAL_INSTANCE,\n useFactory: MSALConfigFactoryb2c,\n deps: [ConfigService]\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useFactory: MSALAngularConfigFactoryb2c,\n deps: [ConfigService],\n multi: true\n },\n MsalServiceb2c\n ];\n } else {\n return [\n {\n provide: MSAL_INSTANCE,\n useFactory: MSALConfigFactory,\n deps: [ConfigService]\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useFactory: MSALAngularConfigFactory,\n deps: [ConfigService],\n multi: true\n },\n MsalService\n ];\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i1.MsalServiceb2c"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"igo2-auth-microsoft.mjs","sources":["../../../packages/auth/microsoft/src/auth-microsoft/auth-microsoft.component.ts","../../../packages/auth/microsoft/src/auth-microsoft/auth-microsoft.component.html","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-msalServiceb2c.service.ts","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-msalBroadcastServiceb2c.service.ts","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-microsoftb2c.component.ts","../../../packages/auth/microsoft/src/auth-microsoftb2c/auth-microsoftb2c.component.html","../../../packages/auth/microsoft/src/auth-microsoft.provider.ts","../../../packages/auth/microsoft/src/igo2-auth-microsoft.ts"],"sourcesContent":["import {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { AuthService } from '@igo2/auth';\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n MSAL_GUARD_CONFIG,\n MsalBroadcastService,\n MsalService\n} from '@azure/msal-angular';\nimport {\n AuthenticationResult,\n InteractionRequiredAuthError,\n InteractionStatus,\n PopupRequest,\n PublicClientApplication,\n SilentRequest\n} from '@azure/msal-browser';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport {\n AuthMicrosoftOptions,\n MSPMsalGuardConfiguration\n} from '../shared/auth-microsoft.interface';\n\n@Component({\n selector: 'igo-auth-microsoft',\n templateUrl: './auth-microsoft.component.html',\n styleUrls: ['./auth-microsoft.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [MatButtonModule, MatIconModule, TranslateModule]\n})\nexport class AuthMicrosoftComponent {\n private options?: AuthMicrosoftOptions;\n private readonly _destroying$ = new Subject<void>();\n @Output() login: EventEmitter<boolean> = new EventEmitter<boolean>();\n private broadcastService: MsalBroadcastService;\n\n constructor(\n private authService: AuthService,\n private config: ConfigService,\n private appRef: ApplicationRef,\n private msalService: MsalService,\n @Inject(MSAL_GUARD_CONFIG)\n private msalGuardConfig: MSPMsalGuardConfiguration[]\n ) {\n this.options = this.config.getConfig('auth.microsoft');\n\n this.msalService.instance = new PublicClientApplication({\n auth: this.options,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n this.broadcastService = new MsalBroadcastService(\n this.msalService.instance,\n this.msalService\n );\n\n if (this.options?.clientId) {\n this.broadcastService.inProgress$\n .pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n takeUntil(this._destroying$)\n )\n .subscribe(() => {\n this.checkAccount();\n });\n } else {\n console.warn('Microsoft authentification needs \"clientId\" option');\n }\n }\n\n public loginMicrosoft() {\n this.msalService\n .loginPopup({ ...this.getConf().authRequest } as PopupRequest)\n .subscribe((response: AuthenticationResult) => {\n this.msalService.instance.setActiveAccount(response.account);\n this.checkAccount();\n });\n }\n\n private checkAccount() {\n this.msalService.instance\n .acquireTokenSilent(this.getConf().authRequest as SilentRequest)\n .then((response: AuthenticationResult) => {\n const tokenAccess = response.accessToken;\n const tokenId = response.idToken;\n this.authService\n .loginWithToken(tokenAccess, 'microsoft', { tokenId })\n .subscribe(() => {\n this.appRef.tick();\n this.login.emit(true);\n });\n })\n .catch(async (error) => {\n if (error instanceof InteractionRequiredAuthError) {\n // fallback to interaction when silent call fails\n return this.msalService.acquireTokenPopup(\n this.getConf().authRequest as SilentRequest\n );\n }\n console.log(error);\n })\n .catch((error) => {\n console.log('Silent token fails');\n });\n }\n\n private getConf(): MSPMsalGuardConfiguration {\n return this.msalGuardConfig.filter((conf) => conf.type === 'add')[0];\n }\n}\n","<button\n class=\"microsoft-login-button\"\n mat-raised-button\n (click)=\"loginMicrosoft()\"\n>\n <mat-icon svgIcon=\"microsoft\"></mat-icon>\n {{ 'igo.auth.microsoft.login' | translate }}\n</button>\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { Location } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { MSAL_INSTANCE } from '@azure/msal-angular';\nimport { IMsalService } from '@azure/msal-angular';\nimport {\n AuthenticationResult,\n EndSessionPopupRequest,\n EndSessionRequest,\n IPublicClientApplication,\n Logger,\n PopupRequest,\n RedirectRequest,\n SilentRequest,\n SsoSilentRequest,\n WrapperSKU\n} from '@azure/msal-browser';\nimport { Observable, from } from 'rxjs';\n\n@Injectable()\nexport class MsalServiceb2c implements IMsalService {\n private redirectHash: string;\n private logger: Logger;\n private name = '@azure/msal-angular';\n private version = '2.0.0-beta.2';\n constructor(\n @Inject(MSAL_INSTANCE) public instance: IPublicClientApplication,\n private location: Location\n ) {\n const hash = this.location.path(true).split('#').pop();\n if (hash) {\n this.redirectHash = `#${hash}`;\n }\n this.instance.initializeWrapperLibrary(WrapperSKU.Angular, this.version);\n }\n\n initialize(): Observable<void> {\n return from(this.instance.initialize());\n }\n\n acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenPopup(request));\n }\n acquireTokenRedirect(request: RedirectRequest): Observable<void> {\n return from(this.instance.acquireTokenRedirect(request));\n }\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Observable<AuthenticationResult> {\n return from(this.instance.acquireTokenSilent(silentRequest));\n }\n handleRedirectObservable(hash?: string): Observable<AuthenticationResult> {\n return from(this.instance.handleRedirectPromise(hash || this.redirectHash));\n }\n loginPopup(request?: PopupRequest): Observable<AuthenticationResult> {\n return from(this.instance.loginPopup(request));\n }\n loginRedirect(request?: RedirectRequest): Observable<void> {\n return from(this.instance.loginRedirect(request));\n }\n logout(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logout(logoutRequest));\n }\n logoutRedirect(logoutRequest?: EndSessionRequest): Observable<void> {\n return from(this.instance.logoutRedirect(logoutRequest));\n }\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Observable<void> {\n return from(this.instance.logoutPopup(logoutRequest));\n }\n ssoSilent(request: SsoSilentRequest): Observable<AuthenticationResult> {\n return from(this.instance.ssoSilent(request));\n }\n /**\n * Gets logger for msal-angular.\n * If no logger set, returns logger instance created with same options as msal-browser\n */\n getLogger(): Logger {\n if (!this.logger) {\n this.logger = this.instance.getLogger().clone(this.name, this.version);\n }\n return this.logger;\n }\n // Create a logger instance for msal-angular with the same options as msal-browser\n setLogger(logger: Logger): void {\n this.logger = logger.clone(this.name, this.version);\n this.instance.setLogger(logger);\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { Inject, Injectable } from '@angular/core';\n\nimport { MSAL_INSTANCE } from '@azure/msal-angular';\nimport {\n EventMessage,\n EventMessageUtils,\n IPublicClientApplication,\n InteractionStatus\n} from '@azure/msal-browser';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { MsalServiceb2c } from './auth-msalServiceb2c.service';\n\n@Injectable()\nexport class MsalBroadcastServiceb2c {\n private _msalSubject: Subject<EventMessage>;\n public msalSubject$: Observable<EventMessage>;\n private _inProgress: BehaviorSubject<InteractionStatus>;\n public inProgress$: Observable<InteractionStatus>;\n\n constructor(\n @Inject(MSAL_INSTANCE) private msalInstance: IPublicClientApplication,\n private authService: MsalServiceb2c\n ) {\n this._msalSubject = new Subject<EventMessage>();\n this.msalSubject$ = this._msalSubject.asObservable();\n\n // InProgress as BehaviorSubject so most recent inProgress state will be available upon subscription\n this._inProgress = new BehaviorSubject<InteractionStatus>(\n InteractionStatus.Startup\n );\n this.inProgress$ = this._inProgress.asObservable();\n\n this.msalInstance.addEventCallback((message: EventMessage) => {\n this._msalSubject.next(message);\n const status = EventMessageUtils.getInteractionStatusFromEvent(message);\n if (status !== null) {\n this.authService\n .getLogger()\n .verbose(\n `BroadcastService - ${message.eventType} results in setting inProgress to ${status}`\n );\n this._inProgress.next(status);\n }\n });\n }\n}\n","import {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Output\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { AuthService } from '@igo2/auth';\nimport { ConfigService } from '@igo2/core/config';\n\nimport { MSAL_GUARD_CONFIG } from '@azure/msal-angular';\nimport {\n AuthenticationResult,\n InteractionRequiredAuthError,\n InteractionStatus,\n PopupRequest,\n PublicClientApplication,\n SilentRequest\n} from '@azure/msal-browser';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport {\n AuthMicrosoftb2cOptions,\n MSPMsalGuardConfiguration\n} from '../shared/auth-microsoft.interface';\nimport { MsalBroadcastServiceb2c } from './auth-msalBroadcastServiceb2c.service';\nimport { MsalServiceb2c } from './auth-msalServiceb2c.service';\n\n@Component({\n selector: 'igo-auth-microsoftb2c',\n templateUrl: './auth-microsoftb2c.component.html',\n styleUrls: ['./auth-microsoftb2c.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [MatButtonModule, MatIconModule, TranslateModule],\n providers: [MsalServiceb2c]\n})\nexport class AuthMicrosoftb2cComponent {\n private options: AuthMicrosoftb2cOptions;\n private readonly _destroying$ = new Subject<void>();\n @Output() login: EventEmitter<boolean> = new EventEmitter<boolean>();\n private broadcastService: MsalBroadcastServiceb2c;\n\n constructor(\n private authService: AuthService,\n private config: ConfigService,\n private appRef: ApplicationRef,\n private msalService: MsalServiceb2c,\n @Inject(MSAL_GUARD_CONFIG)\n private msalGuardConfig: MSPMsalGuardConfiguration[]\n ) {\n this.options = this.config.getConfig('auth.microsoftb2c') || {};\n\n this.msalService.instance = new PublicClientApplication({\n auth: this.options.browserAuthOptions,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n this.broadcastService = new MsalBroadcastServiceb2c(\n this.msalService.instance,\n this.msalService\n );\n\n if (this.options.browserAuthOptions.clientId) {\n this.broadcastService.inProgress$\n .pipe(\n filter(\n (status: InteractionStatus) => status === InteractionStatus.None\n ),\n takeUntil(this._destroying$)\n )\n .subscribe(() => {\n this.checkAccount();\n });\n } else {\n console.warn('Microsoft authentification needs \"clientId\" option');\n }\n }\n\n public loginMicrosoftb2c() {\n this.msalService\n .loginPopup({ ...this.getConf().authRequest } as PopupRequest)\n .subscribe((response: AuthenticationResult) => {\n this.msalService.instance.setActiveAccount(response.account);\n this.checkAccount();\n });\n }\n\n private checkAccount() {\n this.msalService.instance\n .acquireTokenSilent(this.getConf().authRequest as SilentRequest)\n .then((response: AuthenticationResult) => {\n const token = response.idToken;\n this.authService.loginWithToken(token, 'microsoftb2c').subscribe(() => {\n this.appRef.tick();\n this.login.emit(true);\n });\n })\n .catch(async (error) => {\n if (error instanceof InteractionRequiredAuthError) {\n // fallback to interaction when silent call fails\n return this.msalService.acquireTokenPopup(\n this.getConf().authRequest as SilentRequest\n );\n }\n })\n .catch((error) => {\n console.log('Silent token fails');\n });\n }\n\n private getConf(): MSPMsalGuardConfiguration {\n return this.msalGuardConfig.filter((conf) => conf.type === 'b2c')[0];\n }\n}\n","<button\n class=\"microsoft-login-button\"\n mat-raised-button\n (click)=\"loginMicrosoftb2c()\"\n>\n <mat-icon svgIcon=\"microsoft\"></mat-icon>\n {{ 'igo.auth.microsoftb2c.login' | translate }}\n</button>\n","import { AuthFeature, AuthFeatureKind } from '@igo2/auth';\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n MSAL_GUARD_CONFIG,\n MSAL_INSTANCE,\n MsalService\n} from '@azure/msal-angular';\nimport { InteractionType, PublicClientApplication } from '@azure/msal-browser';\nimport { BrowserAuthOptions } from '@azure/msal-browser';\n\nimport { AuthMicrosoftComponent } from './auth-microsoft/auth-microsoft.component';\nimport { AuthMicrosoftb2cComponent } from './auth-microsoftb2c/auth-microsoftb2c.component';\nimport { MsalServiceb2c } from './auth-microsoftb2c/auth-msalServiceb2c.service';\nimport {\n AuthMicrosoftOptions,\n MSPMsalGuardConfiguration\n} from './shared/auth-microsoft.interface';\n\nexport const AUTH_MICROSOFT_DIRECTIVES = [\n AuthMicrosoftComponent,\n AuthMicrosoftb2cComponent\n] as const;\n\nexport function MSALConfigFactory(\n config: ConfigService\n): PublicClientApplication {\n const msConf = config.getConfig('auth.microsoft') as AuthMicrosoftOptions;\n if (!msConf) {\n return;\n }\n\n msConf.redirectUri = msConf?.redirectUri || window.location.href;\n msConf.authority =\n msConf?.authority || 'https://login.microsoftonline.com/organizations';\n\n const myMsalObj = new PublicClientApplication({\n auth: msConf,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n return myMsalObj;\n}\n\nexport function MSALConfigFactoryb2c(\n config: ConfigService\n): PublicClientApplication {\n const msConf = config.getConfig(\n 'auth.microsoftb2c.browserAuthOptions'\n ) as BrowserAuthOptions;\n if (!msConf) {\n return;\n }\n msConf.redirectUri = msConf?.redirectUri || window.location.href;\n msConf.authority =\n msConf?.authority || 'https://login.microsoftonline.com/organizations';\n\n const myMsalObj = new PublicClientApplication({\n auth: msConf,\n cache: {\n cacheLocation: 'sessionStorage'\n }\n });\n\n return myMsalObj;\n}\n\nexport function MSALAngularConfigFactory(\n config: ConfigService\n): MSPMsalGuardConfiguration {\n const msConf = config.getConfig('auth.microsoft') as AuthMicrosoftOptions;\n\n return {\n interactionType: InteractionType.Popup,\n authRequest: {\n scopes: ['user.read'],\n loginHint: 'todo'\n },\n type: 'add'\n };\n}\n\nexport function MSALAngularConfigFactoryb2c(\n config: ConfigService\n): MSPMsalGuardConfiguration {\n const msConf = config.getConfig(\n 'auth.microsoftb2c.browserAuthOptions'\n ) as BrowserAuthOptions;\n\n return {\n interactionType: InteractionType.Popup,\n authRequest: {\n scopes: [msConf?.clientId]\n },\n type: 'b2c'\n };\n}\n\nexport function withMicrosoftSupport(\n type?: string\n): AuthFeature<AuthFeatureKind.Microsoft> {\n if (type === 'b2c') {\n return {\n kind: AuthFeatureKind.Microsoft,\n providers: [\n {\n provide: MSAL_INSTANCE,\n useFactory: MSALConfigFactoryb2c,\n deps: [ConfigService]\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useFactory: MSALAngularConfigFactoryb2c,\n deps: [ConfigService],\n multi: true\n },\n MsalServiceb2c\n ]\n };\n } else {\n return {\n kind: AuthFeatureKind.Microsoft,\n providers: [\n {\n provide: MSAL_INSTANCE,\n useFactory: MSALConfigFactory,\n deps: [ConfigService]\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useFactory: MSALAngularConfigFactory,\n deps: [ConfigService],\n multi: true\n },\n MsalService\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i1.MsalServiceb2c"],"mappings":"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"}
|
package/fesm2022/igo2-auth.mjs
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import * as i1 from '@angular/common/http';
|
|
2
|
-
import { HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { HttpHeaders, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Injectable, Optional } from '@angular/core';
|
|
5
|
-
import
|
|
4
|
+
import { Injectable, Optional, makeEnvironmentProviders } from '@angular/core';
|
|
5
|
+
import { BaseStorage, StorageScope, StorageService } from '@igo2/core/storage';
|
|
6
6
|
import * as i2 from '@igo2/core/config';
|
|
7
7
|
import { ConfigService } from '@igo2/core/config';
|
|
8
|
+
import { jwtDecode } from 'jwt-decode';
|
|
9
|
+
import * as i3 from '@angular/router';
|
|
8
10
|
import * as i4 from '@igo2/core/language';
|
|
9
11
|
import * as i5 from '@igo2/core/message';
|
|
10
12
|
import { Base64 } from '@igo2/utils';
|
|
11
13
|
import { BehaviorSubject, of } from 'rxjs';
|
|
12
14
|
import { tap, catchError, map } from 'rxjs/operators';
|
|
13
15
|
import { globalCacheBusterNotifier } from 'ts-cacheable';
|
|
14
|
-
import { jwtDecode } from 'jwt-decode';
|
|
15
16
|
import { Md5 } from 'ts-md5';
|
|
16
17
|
|
|
17
18
|
class TokenService {
|
|
@@ -215,129 +216,99 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
215
216
|
type: Optional
|
|
216
217
|
}] }] });
|
|
217
218
|
|
|
218
|
-
class
|
|
219
|
+
class AuthStorageService extends BaseStorage {
|
|
220
|
+
http;
|
|
219
221
|
authService;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
222
|
+
tokenService;
|
|
223
|
+
constructor(config, http, authService, tokenService) {
|
|
224
|
+
super(config);
|
|
225
|
+
this.http = http;
|
|
223
226
|
this.authService = authService;
|
|
224
|
-
this.
|
|
225
|
-
this.
|
|
227
|
+
this.tokenService = tokenService;
|
|
228
|
+
this.authService.authenticate$.subscribe((isAuthenticated) => {
|
|
229
|
+
if (isAuthenticated && this.options.url) {
|
|
230
|
+
this.http
|
|
231
|
+
.get(this.options.url)
|
|
232
|
+
.subscribe((userIgo) => {
|
|
233
|
+
if (userIgo && userIgo.preference) {
|
|
234
|
+
for (const key of Object.keys(userIgo.preference)) {
|
|
235
|
+
const value = userIgo.preference[key];
|
|
236
|
+
super.set(key, value);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
});
|
|
226
242
|
}
|
|
227
|
-
|
|
228
|
-
if (
|
|
229
|
-
|
|
243
|
+
set(key, value, scope = StorageScope.LOCAL) {
|
|
244
|
+
if (scope === StorageScope.LOCAL &&
|
|
245
|
+
this.authService.authenticated &&
|
|
246
|
+
this.options.url) {
|
|
247
|
+
const preference = {};
|
|
248
|
+
preference[key] = value;
|
|
249
|
+
this.http.patch(this.options.url, { preference }).subscribe();
|
|
230
250
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
251
|
+
super.set(key, value, scope);
|
|
252
|
+
}
|
|
253
|
+
remove(key, scope = StorageScope.LOCAL) {
|
|
254
|
+
if (scope === StorageScope.LOCAL &&
|
|
255
|
+
this.authService.authenticated &&
|
|
256
|
+
this.options.url) {
|
|
257
|
+
const preference = {};
|
|
258
|
+
preference[key] = undefined;
|
|
259
|
+
this.http.patch(this.options.url, { preference }).subscribe();
|
|
235
260
|
}
|
|
236
|
-
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
authService;
|
|
250
|
-
config;
|
|
251
|
-
router;
|
|
252
|
-
constructor(authService, config, router) {
|
|
253
|
-
this.authService = authService;
|
|
254
|
-
this.config = config;
|
|
255
|
-
this.router = router;
|
|
256
|
-
}
|
|
257
|
-
canActivate(route, state) {
|
|
258
|
-
if (this.authService.authenticated) {
|
|
259
|
-
return true;
|
|
261
|
+
super.remove(key, scope);
|
|
262
|
+
}
|
|
263
|
+
clear(scope = StorageScope.LOCAL) {
|
|
264
|
+
if (scope === StorageScope.LOCAL &&
|
|
265
|
+
this.authService.authenticated &&
|
|
266
|
+
this.options.url) {
|
|
267
|
+
this.http
|
|
268
|
+
.patch(this.options.url, { preference: {} }, {
|
|
269
|
+
params: {
|
|
270
|
+
mergePreference: 'false'
|
|
271
|
+
}
|
|
272
|
+
})
|
|
273
|
+
.subscribe();
|
|
260
274
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
this.router.navigateByUrl(authConfig.loginRoute);
|
|
275
|
+
let token;
|
|
276
|
+
if (scope === StorageScope.LOCAL) {
|
|
277
|
+
token = this.tokenService.get();
|
|
265
278
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
270
|
-
}
|
|
271
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthGuard, decorators: [{
|
|
272
|
-
type: Injectable,
|
|
273
|
-
args: [{
|
|
274
|
-
providedIn: 'root'
|
|
275
|
-
}]
|
|
276
|
-
}], ctorParameters: () => [{ type: AuthService }, { type: i2.ConfigService }, { type: i3.Router }] });
|
|
277
|
-
|
|
278
|
-
class AdminGuard {
|
|
279
|
-
authService;
|
|
280
|
-
config;
|
|
281
|
-
router;
|
|
282
|
-
constructor(authService, config, router) {
|
|
283
|
-
this.authService = authService;
|
|
284
|
-
this.config = config;
|
|
285
|
-
this.router = router;
|
|
286
|
-
}
|
|
287
|
-
canActivate(route, state) {
|
|
288
|
-
if (this.authService.isAdmin) {
|
|
289
|
-
return true;
|
|
279
|
+
super.clear(scope);
|
|
280
|
+
if (token) {
|
|
281
|
+
this.tokenService.set(token);
|
|
290
282
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
this.
|
|
283
|
+
if (scope === StorageScope.LOCAL &&
|
|
284
|
+
this.authService.authenticated &&
|
|
285
|
+
this.options.url) {
|
|
286
|
+
this.http
|
|
287
|
+
.get(this.options.url)
|
|
288
|
+
.subscribe((userIgo) => {
|
|
289
|
+
if (userIgo && userIgo.preference) {
|
|
290
|
+
for (const key of Object.keys(userIgo.preference)) {
|
|
291
|
+
const value = userIgo.preference[key];
|
|
292
|
+
super.set(key, value);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
});
|
|
295
296
|
}
|
|
296
|
-
return false;
|
|
297
297
|
}
|
|
298
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type:
|
|
299
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type:
|
|
298
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthStorageService, deps: [{ token: i2.ConfigService }, { token: i1.HttpClient }, { token: AuthService }, { token: TokenService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
299
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthStorageService, providedIn: 'root' });
|
|
300
300
|
}
|
|
301
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type:
|
|
301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthStorageService, decorators: [{
|
|
302
302
|
type: Injectable,
|
|
303
303
|
args: [{
|
|
304
304
|
providedIn: 'root'
|
|
305
305
|
}]
|
|
306
|
-
}], ctorParameters: () => [{ type:
|
|
306
|
+
}], ctorParameters: () => [{ type: i2.ConfigService }, { type: i1.HttpClient }, { type: AuthService }, { type: TokenService }] });
|
|
307
307
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
constructor(authService, config, router) {
|
|
313
|
-
this.authService = authService;
|
|
314
|
-
this.config = config;
|
|
315
|
-
this.router = router;
|
|
316
|
-
}
|
|
317
|
-
canActivate(_route, state) {
|
|
318
|
-
return this.authService.getProfils().pipe(map((profils) => {
|
|
319
|
-
const authConfig = this.config.getConfig('auth');
|
|
320
|
-
if (profils &&
|
|
321
|
-
profils.profils &&
|
|
322
|
-
profils.profils.some((v) => authConfig.profilsGuard.indexOf(v) !== -1)) {
|
|
323
|
-
return true;
|
|
324
|
-
}
|
|
325
|
-
this.authService.redirectUrl = state.url;
|
|
326
|
-
if (authConfig?.loginRoute) {
|
|
327
|
-
this.router.navigateByUrl(authConfig.loginRoute);
|
|
328
|
-
}
|
|
329
|
-
return false;
|
|
330
|
-
}));
|
|
331
|
-
}
|
|
332
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProfilsGuard, deps: [{ token: AuthService }, { token: i2.ConfigService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
333
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProfilsGuard, providedIn: 'root' });
|
|
334
|
-
}
|
|
335
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProfilsGuard, decorators: [{
|
|
336
|
-
type: Injectable,
|
|
337
|
-
args: [{
|
|
338
|
-
providedIn: 'root'
|
|
339
|
-
}]
|
|
340
|
-
}], ctorParameters: () => [{ type: AuthService }, { type: i2.ConfigService }, { type: i3.Router }] });
|
|
308
|
+
var AuthFeatureKind;
|
|
309
|
+
(function (AuthFeatureKind) {
|
|
310
|
+
AuthFeatureKind[AuthFeatureKind["Microsoft"] = 0] = "Microsoft";
|
|
311
|
+
})(AuthFeatureKind || (AuthFeatureKind = {}));
|
|
341
312
|
|
|
342
313
|
class AuthInterceptor {
|
|
343
314
|
config;
|
|
@@ -492,6 +463,148 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
492
463
|
}]
|
|
493
464
|
}], ctorParameters: () => [{ type: i2.ConfigService }, { type: TokenService }, { type: i1.HttpClient }] });
|
|
494
465
|
|
|
466
|
+
class LoggedGuard {
|
|
467
|
+
authService;
|
|
468
|
+
config;
|
|
469
|
+
router;
|
|
470
|
+
constructor(authService, config, router) {
|
|
471
|
+
this.authService = authService;
|
|
472
|
+
this.config = config;
|
|
473
|
+
this.router = router;
|
|
474
|
+
}
|
|
475
|
+
canActivate(route, state) {
|
|
476
|
+
if (this.authService.logged) {
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
this.authService.redirectUrl = state.url;
|
|
480
|
+
const authConfig = this.config.getConfig('auth');
|
|
481
|
+
if (authConfig?.loginRoute) {
|
|
482
|
+
this.router.navigateByUrl(authConfig.loginRoute);
|
|
483
|
+
}
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LoggedGuard, deps: [{ token: AuthService }, { token: i2.ConfigService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
487
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LoggedGuard, providedIn: 'root' });
|
|
488
|
+
}
|
|
489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LoggedGuard, decorators: [{
|
|
490
|
+
type: Injectable,
|
|
491
|
+
args: [{
|
|
492
|
+
providedIn: 'root'
|
|
493
|
+
}]
|
|
494
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: i2.ConfigService }, { type: i3.Router }] });
|
|
495
|
+
|
|
496
|
+
class AuthGuard {
|
|
497
|
+
authService;
|
|
498
|
+
config;
|
|
499
|
+
router;
|
|
500
|
+
constructor(authService, config, router) {
|
|
501
|
+
this.authService = authService;
|
|
502
|
+
this.config = config;
|
|
503
|
+
this.router = router;
|
|
504
|
+
}
|
|
505
|
+
canActivate(route, state) {
|
|
506
|
+
if (this.authService.authenticated) {
|
|
507
|
+
return true;
|
|
508
|
+
}
|
|
509
|
+
this.authService.redirectUrl = state.url;
|
|
510
|
+
const authConfig = this.config.getConfig('auth');
|
|
511
|
+
if (authConfig?.loginRoute) {
|
|
512
|
+
this.router.navigateByUrl(authConfig.loginRoute);
|
|
513
|
+
}
|
|
514
|
+
return false;
|
|
515
|
+
}
|
|
516
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthGuard, deps: [{ token: AuthService }, { token: i2.ConfigService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
517
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
518
|
+
}
|
|
519
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AuthGuard, decorators: [{
|
|
520
|
+
type: Injectable,
|
|
521
|
+
args: [{
|
|
522
|
+
providedIn: 'root'
|
|
523
|
+
}]
|
|
524
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: i2.ConfigService }, { type: i3.Router }] });
|
|
525
|
+
|
|
526
|
+
class AdminGuard {
|
|
527
|
+
authService;
|
|
528
|
+
config;
|
|
529
|
+
router;
|
|
530
|
+
constructor(authService, config, router) {
|
|
531
|
+
this.authService = authService;
|
|
532
|
+
this.config = config;
|
|
533
|
+
this.router = router;
|
|
534
|
+
}
|
|
535
|
+
canActivate(route, state) {
|
|
536
|
+
if (this.authService.isAdmin) {
|
|
537
|
+
return true;
|
|
538
|
+
}
|
|
539
|
+
this.authService.redirectUrl = state.url;
|
|
540
|
+
const authConfig = this.config.getConfig('auth');
|
|
541
|
+
if (authConfig?.loginRoute) {
|
|
542
|
+
this.router.navigateByUrl(authConfig.loginRoute);
|
|
543
|
+
}
|
|
544
|
+
return false;
|
|
545
|
+
}
|
|
546
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AdminGuard, deps: [{ token: AuthService }, { token: i2.ConfigService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
547
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AdminGuard, providedIn: 'root' });
|
|
548
|
+
}
|
|
549
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: AdminGuard, decorators: [{
|
|
550
|
+
type: Injectable,
|
|
551
|
+
args: [{
|
|
552
|
+
providedIn: 'root'
|
|
553
|
+
}]
|
|
554
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: i2.ConfigService }, { type: i3.Router }] });
|
|
555
|
+
|
|
556
|
+
class ProfilsGuard {
|
|
557
|
+
authService;
|
|
558
|
+
config;
|
|
559
|
+
router;
|
|
560
|
+
constructor(authService, config, router) {
|
|
561
|
+
this.authService = authService;
|
|
562
|
+
this.config = config;
|
|
563
|
+
this.router = router;
|
|
564
|
+
}
|
|
565
|
+
canActivate(_route, state) {
|
|
566
|
+
return this.authService.getProfils().pipe(map((profils) => {
|
|
567
|
+
const authConfig = this.config.getConfig('auth');
|
|
568
|
+
if (profils &&
|
|
569
|
+
profils.profils &&
|
|
570
|
+
profils.profils.some((v) => authConfig.profilsGuard.indexOf(v) !== -1)) {
|
|
571
|
+
return true;
|
|
572
|
+
}
|
|
573
|
+
this.authService.redirectUrl = state.url;
|
|
574
|
+
if (authConfig?.loginRoute) {
|
|
575
|
+
this.router.navigateByUrl(authConfig.loginRoute);
|
|
576
|
+
}
|
|
577
|
+
return false;
|
|
578
|
+
}));
|
|
579
|
+
}
|
|
580
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProfilsGuard, deps: [{ token: AuthService }, { token: i2.ConfigService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
581
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProfilsGuard, providedIn: 'root' });
|
|
582
|
+
}
|
|
583
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProfilsGuard, decorators: [{
|
|
584
|
+
type: Injectable,
|
|
585
|
+
args: [{
|
|
586
|
+
providedIn: 'root'
|
|
587
|
+
}]
|
|
588
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: i2.ConfigService }, { type: i3.Router }] });
|
|
589
|
+
|
|
590
|
+
function provideAuthentification(...features) {
|
|
591
|
+
const providers = [
|
|
592
|
+
{
|
|
593
|
+
provide: HTTP_INTERCEPTORS,
|
|
594
|
+
useClass: AuthInterceptor,
|
|
595
|
+
multi: true
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
provide: StorageService,
|
|
599
|
+
useClass: AuthStorageService
|
|
600
|
+
}
|
|
601
|
+
];
|
|
602
|
+
for (const feature of features) {
|
|
603
|
+
providers.push(...feature.providers);
|
|
604
|
+
}
|
|
605
|
+
return makeEnvironmentProviders(providers);
|
|
606
|
+
}
|
|
607
|
+
|
|
495
608
|
/*
|
|
496
609
|
* Public API Surface of auth
|
|
497
610
|
*/
|
|
@@ -500,5 +613,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
500
613
|
* Generated bundle index. Do not edit.
|
|
501
614
|
*/
|
|
502
615
|
|
|
503
|
-
export { AdminGuard, AuthGuard, AuthInterceptor, AuthService, LoggedGuard, ProfilsGuard, TokenService };
|
|
616
|
+
export { AdminGuard, AuthFeatureKind, AuthGuard, AuthInterceptor, AuthService, AuthStorageService, LoggedGuard, ProfilsGuard, TokenService, provideAuthentification };
|
|
504
617
|
//# sourceMappingURL=igo2-auth.mjs.map
|