@azure/msal-angular 2.5.7 → 3.0.0-alpha.1
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/IMsalService.d.ts +2 -3
- package/README.md +14 -9
- package/constants.d.ts +1 -2
- package/esm2020/IMsalService.mjs +6 -0
- package/esm2020/constants.mjs +10 -0
- package/{esm2015/msal.broadcast.config.js → esm2020/msal.broadcast.config.mjs} +1 -1
- package/esm2020/msal.broadcast.service.mjs +57 -0
- package/esm2020/msal.guard.config.mjs +6 -0
- package/esm2020/msal.guard.mjs +218 -0
- package/esm2020/msal.interceptor.config.mjs +6 -0
- package/esm2020/msal.interceptor.mjs +270 -0
- package/esm2020/msal.module.mjs +46 -0
- package/esm2020/msal.navigation.client.mjs +51 -0
- package/esm2020/msal.redirect.component.mjs +31 -0
- package/esm2020/msal.service.mjs +81 -0
- package/{esm2015/packageMetadata.js → esm2020/packageMetadata.mjs} +2 -2
- package/esm2020/public-api.mjs +18 -0
- package/fesm2015/{azure-msal-angular.js → azure-msal-angular.mjs} +259 -180
- package/fesm2015/azure-msal-angular.mjs.map +1 -0
- package/fesm2020/azure-msal-angular.mjs +732 -0
- package/fesm2020/azure-msal-angular.mjs.map +1 -0
- package/{azure-msal-angular.d.ts → index.d.ts} +1 -1
- package/msal.broadcast.config.d.ts +0 -1
- package/msal.broadcast.service.d.ts +7 -5
- package/msal.guard.config.d.ts +4 -5
- package/msal.guard.d.ts +12 -10
- package/msal.interceptor.config.d.ts +4 -5
- package/msal.interceptor.d.ts +11 -8
- package/msal.module.d.ts +10 -5
- package/msal.navigation.client.d.ts +7 -5
- package/msal.redirect.component.d.ts +5 -3
- package/msal.service.d.ts +7 -5
- package/package.json +25 -14
- package/packageMetadata.d.ts +1 -2
- package/public-api.d.ts +13 -14
- package/IMsalService.d.ts.map +0 -1
- package/azure-msal-angular.d.ts.map +0 -1
- package/azure-msal-angular.metadata.json +0 -1
- package/bundles/azure-msal-angular.umd.js +0 -1071
- package/bundles/azure-msal-angular.umd.js.map +0 -1
- package/bundles/azure-msal-angular.umd.min.js +0 -2
- package/bundles/azure-msal-angular.umd.min.js.map +0 -1
- package/constants.d.ts.map +0 -1
- package/esm2015/IMsalService.js +0 -6
- package/esm2015/constants.js +0 -10
- package/esm2015/msal.broadcast.service.js +0 -46
- package/esm2015/msal.guard.config.js +0 -6
- package/esm2015/msal.guard.js +0 -189
- package/esm2015/msal.interceptor.config.js +0 -6
- package/esm2015/msal.interceptor.js +0 -230
- package/esm2015/msal.module.js +0 -46
- package/esm2015/msal.navigation.client.js +0 -53
- package/esm2015/msal.redirect.component.js +0 -33
- package/esm2015/msal.service.js +0 -77
- package/esm2015/public-api.js +0 -18
- package/fesm2015/azure-msal-angular.js.map +0 -1
- package/msal.broadcast.config.d.ts.map +0 -1
- package/msal.broadcast.service.d.ts.map +0 -1
- package/msal.guard.config.d.ts.map +0 -1
- package/msal.guard.d.ts.map +0 -1
- package/msal.interceptor.config.d.ts.map +0 -1
- package/msal.interceptor.d.ts.map +0 -1
- package/msal.module.d.ts.map +0 -1
- package/msal.navigation.client.d.ts.map +0 -1
- package/msal.redirect.component.d.ts.map +0 -1
- package/msal.service.d.ts.map +0 -1
- package/packageMetadata.d.ts.map +0 -1
- package/public-api.d.ts.map +0 -1
- /package/{esm2015/azure-msal-angular.js → esm2020/azure-msal-angular.mjs} +0 -0
package/IMsalService.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EndSessionRequest, AuthorizationUrlRequest, AuthenticationResult, PopupRequest, RedirectRequest, SilentRequest, Logger } from
|
|
2
|
-
import { Observable } from
|
|
1
|
+
import { EndSessionRequest, AuthorizationUrlRequest, AuthenticationResult, PopupRequest, RedirectRequest, SilentRequest, Logger } from '@azure/msal-browser';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
3
|
export interface IMsalService {
|
|
4
4
|
initialize(): Observable<void>;
|
|
5
5
|
acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult>;
|
|
@@ -13,4 +13,3 @@ export interface IMsalService {
|
|
|
13
13
|
getLogger(): Logger;
|
|
14
14
|
setLogger(logger: Logger): void;
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=IMsalService.d.ts.map
|
package/README.md
CHANGED
|
@@ -34,6 +34,7 @@ The current `@azure/msal-angular` library improves upon the previous version and
|
|
|
34
34
|
|
|
35
35
|
## Guides
|
|
36
36
|
|
|
37
|
+
- [Upgrade Guide (v2-v3)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v2-v3-upgrade-guide.md)
|
|
37
38
|
- [Upgrade Guide (v1-v2)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v2-docs/v1-v2-upgrade-guide.md)
|
|
38
39
|
- [Upgrade Guide (v0-v1)](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v1-docs/v0-v1-upgrade-guide.md)
|
|
39
40
|
- [Configuration](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/docs/v2-docs/configuration.md)
|
|
@@ -44,9 +45,10 @@ At a minimum, `@azure/msal-angular` will follow the [support schedule of the mai
|
|
|
44
45
|
|
|
45
46
|
| MSAL Angular version | MSAL support status | Supported Angular versions |
|
|
46
47
|
|----------------------|-------------------------|----------------------------|
|
|
47
|
-
| MSAL Angular
|
|
48
|
-
| MSAL Angular
|
|
49
|
-
| MSAL Angular
|
|
48
|
+
| MSAL Angular v3 | Active development | 15 |
|
|
49
|
+
| MSAL Angular v2 | In maintenance | 9, 10, 11, 12, 13, 14 |
|
|
50
|
+
| MSAL Angular v1 | In maintenance | 6, 7, 8, 9 |
|
|
51
|
+
| MSAL Angular v0 | Out of support | 4, 5 |
|
|
50
52
|
|
|
51
53
|
## Prerequisites
|
|
52
54
|
|
|
@@ -82,11 +84,8 @@ All documentation for MSAL Angular v1 can be found [here](https://github.com/Azu
|
|
|
82
84
|
|
|
83
85
|
## Samples
|
|
84
86
|
|
|
85
|
-
### MSAL Angular
|
|
86
|
-
* [Angular
|
|
87
|
-
* [Angular v7](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/samples/msal-angular-samples/angular7-sample-app)
|
|
88
|
-
* [Angular v8](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/samples/msal-angular-samples/angular8-sample-app)
|
|
89
|
-
* [Angular v9](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/samples/msal-angular-samples/angular9-sample-app)
|
|
87
|
+
### MSAL Angular v3 Samples
|
|
88
|
+
* [Angular v15](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-angular-v3-samples/angular15-sample-app)
|
|
90
89
|
|
|
91
90
|
### MSAL Angular v2 Samples
|
|
92
91
|
* [Angular v9](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/msal-angular-v2-samples/angular9-v2-sample-app)
|
|
@@ -108,6 +107,12 @@ See [here](https://github.com/AzureAD/microsoft-authentication-library-for-js/bl
|
|
|
108
107
|
* [Multi-tenant tutorial using MSAL Angular v2](https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial/tree/main/6-AdvancedScenarios/2-call-api-mt)
|
|
109
108
|
* [Deployment tutorial using Azure App Service and Azure Storage](https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial/tree/main/4-Deployment)
|
|
110
109
|
|
|
110
|
+
### MSAL Angular v1 Samples
|
|
111
|
+
* [Angular v6](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/samples/msal-angular-samples/angular6-sample-app)
|
|
112
|
+
* [Angular v7](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/samples/msal-angular-samples/angular7-sample-app)
|
|
113
|
+
* [Angular v8](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/samples/msal-angular-samples/angular8-sample-app)
|
|
114
|
+
* [Angular v9](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/msal-angular-v1/samples/msal-angular-samples/angular9-sample-app)
|
|
115
|
+
|
|
111
116
|
## Build and running tests
|
|
112
117
|
|
|
113
118
|
If you want to build the library and run all the unit tests, you can do the following.
|
|
@@ -148,4 +153,4 @@ Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT
|
|
|
148
153
|
|
|
149
154
|
## We Value and Adhere to the Microsoft Open Source Code of Conduct
|
|
150
155
|
|
|
151
|
-
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
|
156
|
+
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
package/constants.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { InjectionToken } from
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
2
|
export declare const MSAL_INSTANCE: InjectionToken<string>;
|
|
3
3
|
export declare const MSAL_GUARD_CONFIG: InjectionToken<string>;
|
|
4
4
|
export declare const MSAL_INTERCEPTOR_CONFIG: InjectionToken<string>;
|
|
5
5
|
export declare const MSAL_BROADCAST_CONFIG: InjectionToken<string>;
|
|
6
|
-
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSU1zYWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0lNc2FsU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgRW5kU2Vzc2lvblJlcXVlc3QsXHJcbiAgQXV0aG9yaXphdGlvblVybFJlcXVlc3QsXHJcbiAgQXV0aGVudGljYXRpb25SZXN1bHQsXHJcbiAgUG9wdXBSZXF1ZXN0LFxyXG4gIFJlZGlyZWN0UmVxdWVzdCxcclxuICBTaWxlbnRSZXF1ZXN0LFxyXG4gIExvZ2dlcixcclxufSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTXNhbFNlcnZpY2Uge1xyXG4gIGluaXRpYWxpemUoKTogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICBhY3F1aXJlVG9rZW5Qb3B1cChyZXF1ZXN0OiBQb3B1cFJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PjtcclxuICBhY3F1aXJlVG9rZW5SZWRpcmVjdChyZXF1ZXN0OiBSZWRpcmVjdFJlcXVlc3QpOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gIGFjcXVpcmVUb2tlblNpbGVudChcclxuICAgIHNpbGVudFJlcXVlc3Q6IFNpbGVudFJlcXVlc3RcclxuICApOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0aW9uUmVzdWx0PjtcclxuICBoYW5kbGVSZWRpcmVjdE9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdCB8IG51bGw+O1xyXG4gIGxvZ2luUG9wdXAocmVxdWVzdD86IFBvcHVwUmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRpb25SZXN1bHQ+O1xyXG4gIGxvZ2luUmVkaXJlY3QocmVxdWVzdD86IFJlZGlyZWN0UmVxdWVzdCk6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgbG9nb3V0KGxvZ291dFJlcXVlc3Q/OiBFbmRTZXNzaW9uUmVxdWVzdCk6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgc3NvU2lsZW50KHJlcXVlc3Q6IEF1dGhvcml6YXRpb25VcmxSZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3VsdD47XHJcbiAgZ2V0TG9nZ2VyKCk6IExvZ2dlcjtcclxuICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXIpOiB2b2lkO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { InjectionToken } from '@angular/core';
|
|
6
|
+
export const MSAL_INSTANCE = new InjectionToken('MSAL_INSTANCE');
|
|
7
|
+
export const MSAL_GUARD_CONFIG = new InjectionToken('MSAL_GUARD_CONFIG');
|
|
8
|
+
export const MSAL_INTERCEPTOR_CONFIG = new InjectionToken('MSAL_INTERCEPTOR_CONFIG');
|
|
9
|
+
export const MSAL_BROADCAST_CONFIG = new InjectionToken('MSAL_BROADCAST_CONFIG');
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBUyxlQUFlLENBQUMsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FDakQsbUJBQW1CLENBQ3BCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQseUJBQXlCLENBQzFCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FDckQsdUJBQXVCLENBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgY29uc3QgTVNBTF9JTlNUQU5DRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdNU0FMX0lOU1RBTkNFJyk7XHJcblxyXG5leHBvcnQgY29uc3QgTVNBTF9HVUFSRF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcclxuICAnTVNBTF9HVUFSRF9DT05GSUcnXHJcbik7XHJcblxyXG5leHBvcnQgY29uc3QgTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcclxuICAnTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcnXHJcbik7XHJcblxyXG5leHBvcnQgY29uc3QgTVNBTF9CUk9BRENBU1RfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXHJcbiAgJ01TQUxfQlJPQURDQVNUX0NPTkZJRydcclxuKTtcclxuIl19
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
export {};
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5icm9hZGNhc3QuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21zYWwuYnJvYWRjYXN0LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmV4cG9ydCB0eXBlIE1zYWxCcm9hZGNhc3RDb25maWd1cmF0aW9uID0ge1xyXG4gIGV2ZW50c1RvUmVwbGF5OiBudW1iZXI7XHJcbn07XHJcbiJdfQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
6
|
+
import { EventMessageUtils, InteractionStatus, } from '@azure/msal-browser';
|
|
7
|
+
import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
|
|
8
|
+
import { MSAL_BROADCAST_CONFIG, MSAL_INSTANCE } from './constants';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./msal.service";
|
|
11
|
+
export class MsalBroadcastService {
|
|
12
|
+
constructor(msalInstance, authService, msalBroadcastConfig) {
|
|
13
|
+
this.msalInstance = msalInstance;
|
|
14
|
+
this.authService = authService;
|
|
15
|
+
this.msalBroadcastConfig = msalBroadcastConfig;
|
|
16
|
+
// Make _msalSubject a ReplaySubject if configured to replay past events
|
|
17
|
+
if (this.msalBroadcastConfig &&
|
|
18
|
+
this.msalBroadcastConfig.eventsToReplay > 0) {
|
|
19
|
+
this.authService
|
|
20
|
+
.getLogger()
|
|
21
|
+
.verbose(`BroadcastService - replayPastEvents set on BroadcastConfig, replaying the last ${this.msalBroadcastConfig.eventsToReplay} events`);
|
|
22
|
+
this._msalSubject = new ReplaySubject(this.msalBroadcastConfig.eventsToReplay);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// Defaults to _msalSubject being a Subject
|
|
26
|
+
this._msalSubject = new Subject();
|
|
27
|
+
}
|
|
28
|
+
this.msalSubject$ = this._msalSubject.asObservable();
|
|
29
|
+
// InProgress as BehaviorSubject so most recent inProgress state will be available upon subscription
|
|
30
|
+
this._inProgress = new BehaviorSubject(InteractionStatus.Startup);
|
|
31
|
+
this.inProgress$ = this._inProgress.asObservable();
|
|
32
|
+
this.msalInstance.addEventCallback((message) => {
|
|
33
|
+
this._msalSubject.next(message);
|
|
34
|
+
const status = EventMessageUtils.getInteractionStatusFromEvent(message, this._inProgress.value);
|
|
35
|
+
if (status !== null) {
|
|
36
|
+
this.authService
|
|
37
|
+
.getLogger()
|
|
38
|
+
.verbose(`BroadcastService - ${message.eventType} results in setting inProgress from ${this._inProgress.value} to ${status}`);
|
|
39
|
+
this._inProgress.next(status);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
MsalBroadcastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalBroadcastService, deps: [{ token: MSAL_INSTANCE }, { token: i1.MsalService }, { token: MSAL_BROADCAST_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
45
|
+
MsalBroadcastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalBroadcastService });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalBroadcastService, decorators: [{
|
|
47
|
+
type: Injectable
|
|
48
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
49
|
+
type: Inject,
|
|
50
|
+
args: [MSAL_INSTANCE]
|
|
51
|
+
}] }, { type: i1.MsalService }, { type: undefined, decorators: [{
|
|
52
|
+
type: Optional
|
|
53
|
+
}, {
|
|
54
|
+
type: Inject,
|
|
55
|
+
args: [MSAL_BROADCAST_CONFIG]
|
|
56
|
+
}] }]; } });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5icm9hZGNhc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLmJyb2FkY2FzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBRUwsaUJBQWlCLEVBRWpCLGlCQUFpQixHQUNsQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUczRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFHbkUsTUFBTSxPQUFPLG9CQUFvQjtJQU0vQixZQUNpQyxZQUFzQyxFQUM3RCxXQUF3QixFQUd4QixtQkFBZ0Q7UUFKekIsaUJBQVksR0FBWixZQUFZLENBQTBCO1FBQzdELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBR3hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBNkI7UUFFeEQsd0VBQXdFO1FBQ3hFLElBQ0UsSUFBSSxDQUFDLG1CQUFtQjtZQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLENBQUMsRUFDM0M7WUFDQSxJQUFJLENBQUMsV0FBVztpQkFDYixTQUFTLEVBQUU7aUJBQ1gsT0FBTyxDQUNOLGtGQUFrRixJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxTQUFTLENBQ25JLENBQUM7WUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksYUFBYSxDQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUN4QyxDQUFDO1NBQ0g7YUFBTTtZQUNMLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1NBQ2pEO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXJELG9HQUFvRztRQUNwRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUNwQyxpQkFBaUIsQ0FBQyxPQUFPLENBQzFCLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtZQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyw2QkFBNkIsQ0FDNUQsT0FBTyxFQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUN2QixDQUFDO1lBQ0YsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUNuQixJQUFJLENBQUMsV0FBVztxQkFDYixTQUFTLEVBQUU7cUJBQ1gsT0FBTyxDQUNOLHNCQUFzQixPQUFPLENBQUMsU0FBUyx1Q0FBdUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLE9BQU8sTUFBTSxFQUFFLENBQ3BILENBQUM7Z0JBQ0osSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDL0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lIQXREVSxvQkFBb0Isa0JBT3JCLGFBQWEsd0NBR2IscUJBQXFCO3FIQVZwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVTs7MEJBUU4sTUFBTTsyQkFBQyxhQUFhOzswQkFFcEIsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBFdmVudE1lc3NhZ2UsXHJcbiAgRXZlbnRNZXNzYWdlVXRpbHMsXHJcbiAgSVB1YmxpY0NsaWVudEFwcGxpY2F0aW9uLFxyXG4gIEludGVyYWN0aW9uU3RhdHVzLFxyXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1zYWxCcm9hZGNhc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9tc2FsLmJyb2FkY2FzdC5jb25maWcnO1xyXG5pbXBvcnQgeyBNU0FMX0JST0FEQ0FTVF9DT05GSUcsIE1TQUxfSU5TVEFOQ0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBNc2FsQnJvYWRjYXN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfbXNhbFN1YmplY3Q6IFN1YmplY3Q8RXZlbnRNZXNzYWdlPjtcclxuICBwdWJsaWMgbXNhbFN1YmplY3QkOiBPYnNlcnZhYmxlPEV2ZW50TWVzc2FnZT47XHJcbiAgcHJpdmF0ZSBfaW5Qcm9ncmVzczogQmVoYXZpb3JTdWJqZWN0PEludGVyYWN0aW9uU3RhdHVzPjtcclxuICBwdWJsaWMgaW5Qcm9ncmVzcyQ6IE9ic2VydmFibGU8SW50ZXJhY3Rpb25TdGF0dXM+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTVNBTF9JTlNUQU5DRSkgcHJpdmF0ZSBtc2FsSW5zdGFuY2U6IElQdWJsaWNDbGllbnRBcHBsaWNhdGlvbixcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIEBJbmplY3QoTVNBTF9CUk9BRENBU1RfQ09ORklHKVxyXG4gICAgcHJpdmF0ZSBtc2FsQnJvYWRjYXN0Q29uZmlnPzogTXNhbEJyb2FkY2FzdENvbmZpZ3VyYXRpb25cclxuICApIHtcclxuICAgIC8vIE1ha2UgX21zYWxTdWJqZWN0IGEgUmVwbGF5U3ViamVjdCBpZiBjb25maWd1cmVkIHRvIHJlcGxheSBwYXN0IGV2ZW50c1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm1zYWxCcm9hZGNhc3RDb25maWcgJiZcclxuICAgICAgdGhpcy5tc2FsQnJvYWRjYXN0Q29uZmlnLmV2ZW50c1RvUmVwbGF5ID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgICAudmVyYm9zZShcclxuICAgICAgICAgIGBCcm9hZGNhc3RTZXJ2aWNlIC0gcmVwbGF5UGFzdEV2ZW50cyBzZXQgb24gQnJvYWRjYXN0Q29uZmlnLCByZXBsYXlpbmcgdGhlIGxhc3QgJHt0aGlzLm1zYWxCcm9hZGNhc3RDb25maWcuZXZlbnRzVG9SZXBsYXl9IGV2ZW50c2BcclxuICAgICAgICApO1xyXG4gICAgICB0aGlzLl9tc2FsU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PEV2ZW50TWVzc2FnZT4oXHJcbiAgICAgICAgdGhpcy5tc2FsQnJvYWRjYXN0Q29uZmlnLmV2ZW50c1RvUmVwbGF5XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBEZWZhdWx0cyB0byBfbXNhbFN1YmplY3QgYmVpbmcgYSBTdWJqZWN0XHJcbiAgICAgIHRoaXMuX21zYWxTdWJqZWN0ID0gbmV3IFN1YmplY3Q8RXZlbnRNZXNzYWdlPigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubXNhbFN1YmplY3QkID0gdGhpcy5fbXNhbFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgLy8gSW5Qcm9ncmVzcyBhcyBCZWhhdmlvclN1YmplY3Qgc28gbW9zdCByZWNlbnQgaW5Qcm9ncmVzcyBzdGF0ZSB3aWxsIGJlIGF2YWlsYWJsZSB1cG9uIHN1YnNjcmlwdGlvblxyXG4gICAgdGhpcy5faW5Qcm9ncmVzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJhY3Rpb25TdGF0dXM+KFxyXG4gICAgICBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwXHJcbiAgICApO1xyXG4gICAgdGhpcy5pblByb2dyZXNzJCA9IHRoaXMuX2luUHJvZ3Jlc3MuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgdGhpcy5tc2FsSW5zdGFuY2UuYWRkRXZlbnRDYWxsYmFjaygobWVzc2FnZTogRXZlbnRNZXNzYWdlKSA9PiB7XHJcbiAgICAgIHRoaXMuX21zYWxTdWJqZWN0Lm5leHQobWVzc2FnZSk7XHJcbiAgICAgIGNvbnN0IHN0YXR1cyA9IEV2ZW50TWVzc2FnZVV0aWxzLmdldEludGVyYWN0aW9uU3RhdHVzRnJvbUV2ZW50KFxyXG4gICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgdGhpcy5faW5Qcm9ncmVzcy52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoc3RhdHVzICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZVxyXG4gICAgICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgICAgICAudmVyYm9zZShcclxuICAgICAgICAgICAgYEJyb2FkY2FzdFNlcnZpY2UgLSAke21lc3NhZ2UuZXZlbnRUeXBlfSByZXN1bHRzIGluIHNldHRpbmcgaW5Qcm9ncmVzcyBmcm9tICR7dGhpcy5faW5Qcm9ncmVzcy52YWx1ZX0gdG8gJHtzdGF0dXN9YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9pblByb2dyZXNzLm5leHQoc3RhdHVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5ndWFyZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5ndWFyZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcblxyXG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICBQb3B1cFJlcXVlc3QsXHJcbiAgUmVkaXJlY3RSZXF1ZXN0LFxyXG4gIEludGVyYWN0aW9uVHlwZSxcclxufSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XHJcblxyXG5leHBvcnQgZGVjbGFyZSB0eXBlIE1zYWxHdWFyZEF1dGhSZXF1ZXN0ID1cclxuICB8IFBhcnRpYWw8UG9wdXBSZXF1ZXN0PlxyXG4gIHwgUGFydGlhbDxPbWl0PFJlZGlyZWN0UmVxdWVzdCwgJ3JlZGlyZWN0U3RhcnRQYWdlJz4+O1xyXG5cclxuZXhwb3J0IHR5cGUgTXNhbEd1YXJkQ29uZmlndXJhdGlvbiA9IHtcclxuICBpbnRlcmFjdGlvblR5cGU6IEludGVyYWN0aW9uVHlwZS5Qb3B1cCB8IEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdDtcclxuICBhdXRoUmVxdWVzdD86XHJcbiAgICB8IE1zYWxHdWFyZEF1dGhSZXF1ZXN0XHJcbiAgICB8ICgoXHJcbiAgICAgICAgYXV0aFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XHJcbiAgICAgICkgPT4gTXNhbEd1YXJkQXV0aFJlcXVlc3QpO1xyXG4gIGxvZ2luRmFpbGVkUm91dGU/OiBzdHJpbmc7XHJcbn07XHJcbiJdfQ==
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { Injectable, Inject } from '@angular/core';
|
|
6
|
+
import { InteractionType, BrowserConfigurationAuthError, BrowserUtils, UrlString, } from '@azure/msal-browser';
|
|
7
|
+
import { of } from 'rxjs';
|
|
8
|
+
import { concatMap, catchError, map } from 'rxjs/operators';
|
|
9
|
+
import { MSAL_GUARD_CONFIG } from './constants';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "./msal.broadcast.service";
|
|
12
|
+
import * as i2 from "./msal.service";
|
|
13
|
+
import * as i3 from "@angular/common";
|
|
14
|
+
import * as i4 from "@angular/router";
|
|
15
|
+
export class MsalGuard {
|
|
16
|
+
constructor(msalGuardConfig, msalBroadcastService, authService, location, router) {
|
|
17
|
+
this.msalGuardConfig = msalGuardConfig;
|
|
18
|
+
this.msalBroadcastService = msalBroadcastService;
|
|
19
|
+
this.authService = authService;
|
|
20
|
+
this.location = location;
|
|
21
|
+
this.router = router;
|
|
22
|
+
// Subscribing so events in MsalGuard will set inProgress$ observable
|
|
23
|
+
this.msalBroadcastService.inProgress$.subscribe();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parses url string to UrlTree
|
|
27
|
+
* @param url
|
|
28
|
+
*/
|
|
29
|
+
parseUrl(url) {
|
|
30
|
+
return this.router.parseUrl(url);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Builds the absolute url for the destination page
|
|
34
|
+
* @param path Relative path of requested page
|
|
35
|
+
* @returns Full destination url
|
|
36
|
+
*/
|
|
37
|
+
getDestinationUrl(path) {
|
|
38
|
+
this.authService.getLogger().verbose('Guard - getting destination url');
|
|
39
|
+
// Absolute base url for the application (default to origin if base element not present)
|
|
40
|
+
const baseElements = document.getElementsByTagName('base');
|
|
41
|
+
const baseUrl = this.location.normalize(baseElements.length ? baseElements[0].href : window.location.origin);
|
|
42
|
+
// Path of page (including hash, if using hash routing)
|
|
43
|
+
const pathUrl = this.location.prepareExternalUrl(path);
|
|
44
|
+
// Hash location strategy
|
|
45
|
+
if (pathUrl.startsWith('#')) {
|
|
46
|
+
this.authService
|
|
47
|
+
.getLogger()
|
|
48
|
+
.verbose('Guard - destination by hash routing');
|
|
49
|
+
return `${baseUrl}/${pathUrl}`;
|
|
50
|
+
}
|
|
51
|
+
/*
|
|
52
|
+
* If using path location strategy, pathUrl will include the relative portion of the base path (e.g. /base/page).
|
|
53
|
+
* Since baseUrl also includes /base, can just concatentate baseUrl + path
|
|
54
|
+
*/
|
|
55
|
+
return `${baseUrl}${path}`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Interactively prompt the user to login
|
|
59
|
+
* @param url Path of the requested page
|
|
60
|
+
*/
|
|
61
|
+
loginInteractively(state) {
|
|
62
|
+
const authRequest = typeof this.msalGuardConfig.authRequest === 'function'
|
|
63
|
+
? this.msalGuardConfig.authRequest(this.authService, state)
|
|
64
|
+
: { ...this.msalGuardConfig.authRequest };
|
|
65
|
+
if (this.msalGuardConfig.interactionType === InteractionType.Popup) {
|
|
66
|
+
this.authService.getLogger().verbose('Guard - logging in by popup');
|
|
67
|
+
return this.authService.loginPopup(authRequest).pipe(map((response) => {
|
|
68
|
+
this.authService
|
|
69
|
+
.getLogger()
|
|
70
|
+
.verbose('Guard - login by popup successful, can activate, setting active account');
|
|
71
|
+
this.authService.instance.setActiveAccount(response.account);
|
|
72
|
+
return true;
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
this.authService.getLogger().verbose('Guard - logging in by redirect');
|
|
76
|
+
const redirectStartPage = this.getDestinationUrl(state.url);
|
|
77
|
+
return this.authService
|
|
78
|
+
.loginRedirect({
|
|
79
|
+
redirectStartPage,
|
|
80
|
+
...authRequest,
|
|
81
|
+
})
|
|
82
|
+
.pipe(map(() => false));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Helper which checks for the correct interaction type, prevents page with Guard to be set as redirect, and calls handleRedirectObservable
|
|
86
|
+
* @param state
|
|
87
|
+
*/
|
|
88
|
+
activateHelper(state) {
|
|
89
|
+
if (this.msalGuardConfig.interactionType !== InteractionType.Popup &&
|
|
90
|
+
this.msalGuardConfig.interactionType !== InteractionType.Redirect) {
|
|
91
|
+
throw new BrowserConfigurationAuthError('invalid_interaction_type', 'Invalid interaction type provided to MSAL Guard. InteractionType.Popup or InteractionType.Redirect must be provided in the MsalGuardConfiguration');
|
|
92
|
+
}
|
|
93
|
+
this.authService.getLogger().verbose('MSAL Guard activated');
|
|
94
|
+
/*
|
|
95
|
+
* If a page with MSAL Guard is set as the redirect for acquireTokenSilent,
|
|
96
|
+
* short-circuit to prevent redirecting or popups.
|
|
97
|
+
*/
|
|
98
|
+
if (typeof window !== 'undefined') {
|
|
99
|
+
if (UrlString.hashContainsKnownProperties(window.location.hash) &&
|
|
100
|
+
BrowserUtils.isInIframe() &&
|
|
101
|
+
!this.authService.instance.getConfiguration().system
|
|
102
|
+
.allowRedirectInIframe) {
|
|
103
|
+
this.authService
|
|
104
|
+
.getLogger()
|
|
105
|
+
.warning('Guard - redirectUri set to page with MSAL Guard. It is recommended to not set redirectUri to a page that requires authentication.');
|
|
106
|
+
return of(false);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
this.authService
|
|
111
|
+
.getLogger()
|
|
112
|
+
.info('Guard - window is undefined, MSAL does not support server-side token acquisition');
|
|
113
|
+
return of(true);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* If a loginFailedRoute is set in the config, set this as the loginFailedRoute
|
|
117
|
+
*/
|
|
118
|
+
if (this.msalGuardConfig.loginFailedRoute) {
|
|
119
|
+
this.loginFailedRoute = this.parseUrl(this.msalGuardConfig.loginFailedRoute);
|
|
120
|
+
}
|
|
121
|
+
// Capture current path before it gets changed by handleRedirectObservable
|
|
122
|
+
const currentPath = this.location.path(true);
|
|
123
|
+
return this.authService.initialize().pipe(concatMap(() => {
|
|
124
|
+
return this.authService.handleRedirectObservable();
|
|
125
|
+
}), concatMap(() => {
|
|
126
|
+
if (!this.authService.instance.getAllAccounts().length) {
|
|
127
|
+
if (state) {
|
|
128
|
+
this.authService
|
|
129
|
+
.getLogger()
|
|
130
|
+
.verbose('Guard - no accounts retrieved, log in required to activate');
|
|
131
|
+
return this.loginInteractively(state);
|
|
132
|
+
}
|
|
133
|
+
this.authService
|
|
134
|
+
.getLogger()
|
|
135
|
+
.verbose('Guard - no accounts retrieved, no state, cannot load');
|
|
136
|
+
return of(false);
|
|
137
|
+
}
|
|
138
|
+
this.authService
|
|
139
|
+
.getLogger()
|
|
140
|
+
.verbose('Guard - at least 1 account exists, can activate or load');
|
|
141
|
+
// Prevent navigating the app to /#code= or /code=
|
|
142
|
+
if (state) {
|
|
143
|
+
/*
|
|
144
|
+
* Path routing:
|
|
145
|
+
* state.url: /#code=...
|
|
146
|
+
* state.root.fragment: code=...
|
|
147
|
+
*/
|
|
148
|
+
/*
|
|
149
|
+
* Hash routing:
|
|
150
|
+
* state.url: /code
|
|
151
|
+
* state.root.fragment: null
|
|
152
|
+
*/
|
|
153
|
+
const urlContainsCode = this.includesCode(state.url);
|
|
154
|
+
const fragmentContainsCode = !!state.root &&
|
|
155
|
+
!!state.root.fragment &&
|
|
156
|
+
this.includesCode(`#${state.root.fragment}`);
|
|
157
|
+
const hashRouting = this.location.prepareExternalUrl(state.url).indexOf('#') === 0;
|
|
158
|
+
// Ensure code parameter is in fragment (and not in query parameter), or that hash hash routing is used
|
|
159
|
+
if (urlContainsCode && (fragmentContainsCode || hashRouting)) {
|
|
160
|
+
this.authService
|
|
161
|
+
.getLogger()
|
|
162
|
+
.info('Guard - Hash contains known code response, stopping navigation.');
|
|
163
|
+
// Path routing (navigate to current path without hash)
|
|
164
|
+
if (currentPath.indexOf('#') > -1) {
|
|
165
|
+
return of(this.parseUrl(this.location.path()));
|
|
166
|
+
}
|
|
167
|
+
// Hash routing (navigate to root path)
|
|
168
|
+
return of(this.parseUrl(''));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return of(true);
|
|
172
|
+
}), catchError((error) => {
|
|
173
|
+
this.authService
|
|
174
|
+
.getLogger()
|
|
175
|
+
.error('Guard - error while logging in, unable to activate');
|
|
176
|
+
this.authService
|
|
177
|
+
.getLogger()
|
|
178
|
+
.errorPii(`Guard - error: ${error.message}`);
|
|
179
|
+
/**
|
|
180
|
+
* If a loginFailedRoute is set, checks to see if state is passed before returning route
|
|
181
|
+
*/
|
|
182
|
+
if (this.loginFailedRoute && state) {
|
|
183
|
+
this.authService
|
|
184
|
+
.getLogger()
|
|
185
|
+
.verbose('Guard - loginFailedRoute set, redirecting');
|
|
186
|
+
return of(this.loginFailedRoute);
|
|
187
|
+
}
|
|
188
|
+
return of(false);
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
includesCode(path) {
|
|
192
|
+
return ((path.lastIndexOf('/code') > -1 &&
|
|
193
|
+
path.lastIndexOf('/code') === path.length - '/code'.length) || // path.endsWith("/code")
|
|
194
|
+
path.indexOf('#code=') > -1 ||
|
|
195
|
+
path.indexOf('&code=') > -1);
|
|
196
|
+
}
|
|
197
|
+
canActivate(route, state) {
|
|
198
|
+
this.authService.getLogger().verbose('Guard - canActivate');
|
|
199
|
+
return this.activateHelper(state);
|
|
200
|
+
}
|
|
201
|
+
canActivateChild(route, state) {
|
|
202
|
+
this.authService.getLogger().verbose('Guard - canActivateChild');
|
|
203
|
+
return this.activateHelper(state);
|
|
204
|
+
}
|
|
205
|
+
canMatch() {
|
|
206
|
+
this.authService.getLogger().verbose('Guard - canLoad');
|
|
207
|
+
return this.activateHelper();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
MsalGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalGuard, deps: [{ token: MSAL_GUARD_CONFIG }, { token: i1.MsalBroadcastService }, { token: i2.MsalService }, { token: i3.Location }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
211
|
+
MsalGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalGuard });
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MsalGuard, decorators: [{
|
|
213
|
+
type: Injectable
|
|
214
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
215
|
+
type: Inject,
|
|
216
|
+
args: [MSAL_GUARD_CONFIG]
|
|
217
|
+
}] }, { type: i1.MsalBroadcastService }, { type: i2.MsalService }, { type: i3.Location }, { type: i4.Router }]; } });
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tc2FsLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUW5ELE9BQU8sRUFDTCxlQUFlLEVBQ2YsNkJBQTZCLEVBQzdCLFlBQVksRUFDWixTQUFTLEdBSVYsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7O0FBR2hELE1BQU0sT0FBTyxTQUFTO0lBR3BCLFlBQ3FDLGVBQXVDLEVBQ2xFLG9CQUEwQyxFQUMxQyxXQUF3QixFQUN4QixRQUFrQixFQUNsQixNQUFjO1FBSmEsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ2xFLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRXRCLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsR0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FB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LHlCQUF5QjtZQUMxRixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FDVCxLQUE2QixFQUM3QixLQUEwQjtRQUUxQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsS0FBNkIsRUFDN0IsS0FBMEI7UUFFMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQy9CLENBQUM7O3NHQWxRVSxTQUFTLGtCQUlWLGlCQUFpQjswR0FKaEIsU0FBUzsyRkFBVCxTQUFTO2tCQURyQixVQUFVOzswQkFLTixNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXHJcbiAgVXJsVHJlZSxcclxuICBSb3V0ZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICBJbnRlcmFjdGlvblR5cGUsXHJcbiAgQnJvd3NlckNvbmZpZ3VyYXRpb25BdXRoRXJyb3IsXHJcbiAgQnJvd3NlclV0aWxzLFxyXG4gIFVybFN0cmluZyxcclxuICBQb3B1cFJlcXVlc3QsXHJcbiAgUmVkaXJlY3RSZXF1ZXN0LFxyXG4gIEF1dGhlbnRpY2F0aW9uUmVzdWx0LFxyXG59IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjb25jYXRNYXAsIGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1zYWxHdWFyZENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL21zYWwuZ3VhcmQuY29uZmlnJztcclxuaW1wb3J0IHsgTXNhbEJyb2FkY2FzdFNlcnZpY2UgfSBmcm9tICcuL21zYWwuYnJvYWRjYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNU0FMX0dVQVJEX0NPTkZJRyB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1zYWxHdWFyZCB7XHJcbiAgcHJpdmF0ZSBsb2dpbkZhaWxlZFJvdXRlPzogVXJsVHJlZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1TQUxfR1VBUkRfQ09ORklHKSBwcml2YXRlIG1zYWxHdWFyZENvbmZpZzogTXNhbEd1YXJkQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgbXNhbEJyb2FkY2FzdFNlcnZpY2U6IE1zYWxCcm9hZGNhc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIC8vIFN1YnNjcmliaW5nIHNvIGV2ZW50cyBpbiBNc2FsR3VhcmQgd2lsbCBzZXQgaW5Qcm9ncmVzcyQgb2JzZXJ2YWJsZVxyXG4gICAgdGhpcy5tc2FsQnJvYWRjYXN0U2VydmljZS5pblByb2dyZXNzJC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlcyB1cmwgc3RyaW5nIHRvIFVybFRyZWVcclxuICAgKiBAcGFyYW0gdXJsXHJcbiAgICovXHJcbiAgcGFyc2VVcmwodXJsOiBzdHJpbmcpOiBVcmxUcmVlIHtcclxuICAgIHJldHVybiB0aGlzLnJvdXRlci5wYXJzZVVybCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRoZSBhYnNvbHV0ZSB1cmwgZm9yIHRoZSBkZXN0aW5hdGlvbiBwYWdlXHJcbiAgICogQHBhcmFtIHBhdGggUmVsYXRpdmUgcGF0aCBvZiByZXF1ZXN0ZWQgcGFnZVxyXG4gICAqIEByZXR1cm5zIEZ1bGwgZGVzdGluYXRpb24gdXJsXHJcbiAgICovXHJcbiAgZ2V0RGVzdGluYXRpb25VcmwocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZSgnR3VhcmQgLSBnZXR0aW5nIGRlc3RpbmF0aW9uIHVybCcpO1xyXG4gICAgLy8gQWJzb2x1dGUgYmFzZSB1cmwgZm9yIHRoZSBhcHBsaWNhdGlvbiAoZGVmYXVsdCB0byBvcmlnaW4gaWYgYmFzZSBlbGVtZW50IG5vdCBwcmVzZW50KVxyXG4gICAgY29uc3QgYmFzZUVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKTtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmxvY2F0aW9uLm5vcm1hbGl6ZShcclxuICAgICAgYmFzZUVsZW1lbnRzLmxlbmd0aCA/IGJhc2VFbGVtZW50c1swXS5ocmVmIDogd2luZG93LmxvY2F0aW9uLm9yaWdpblxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBQYXRoIG9mIHBhZ2UgKGluY2x1ZGluZyBoYXNoLCBpZiB1c2luZyBoYXNoIHJvdXRpbmcpXHJcbiAgICBjb25zdCBwYXRoVXJsID0gdGhpcy5sb2NhdGlvbi5wcmVwYXJlRXh0ZXJuYWxVcmwocGF0aCk7XHJcblxyXG4gICAgLy8gSGFzaCBsb2NhdGlvbiBzdHJhdGVneVxyXG4gICAgaWYgKHBhdGhVcmwuc3RhcnRzV2l0aCgnIycpKSB7XHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgICAudmVyYm9zZSgnR3VhcmQgLSBkZXN0aW5hdGlvbiBieSBoYXNoIHJvdXRpbmcnKTtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cGF0aFVybH1gO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiB1c2luZyBwYXRoIGxvY2F0aW9uIHN0cmF0ZWd5LCBwYXRoVXJsIHdpbGwgaW5jbHVkZSB0aGUgcmVsYXRpdmUgcG9ydGlvbiBvZiB0aGUgYmFzZSBwYXRoIChlLmcuIC9iYXNlL3BhZ2UpLlxyXG4gICAgICogU2luY2UgYmFzZVVybCBhbHNvIGluY2x1ZGVzIC9iYXNlLCBjYW4ganVzdCBjb25jYXRlbnRhdGUgYmFzZVVybCArIHBhdGhcclxuICAgICAqL1xyXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9JHtwYXRofWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnRlcmFjdGl2ZWx5IHByb21wdCB0aGUgdXNlciB0byBsb2dpblxyXG4gICAqIEBwYXJhbSB1cmwgUGF0aCBvZiB0aGUgcmVxdWVzdGVkIHBhZ2VcclxuICAgKi9cclxuICBwcml2YXRlIGxvZ2luSW50ZXJhY3RpdmVseShzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgYXV0aFJlcXVlc3QgPVxyXG4gICAgICB0eXBlb2YgdGhpcy5tc2FsR3VhcmRDb25maWcuYXV0aFJlcXVlc3QgPT09ICdmdW5jdGlvbidcclxuICAgICAgICA/IHRoaXMubXNhbEd1YXJkQ29uZmlnLmF1dGhSZXF1ZXN0KHRoaXMuYXV0aFNlcnZpY2UsIHN0YXRlKVxyXG4gICAgICAgIDogeyAuLi50aGlzLm1zYWxHdWFyZENvbmZpZy5hdXRoUmVxdWVzdCB9O1xyXG4gICAgaWYgKHRoaXMubXNhbEd1YXJkQ29uZmlnLmludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLlBvcHVwKSB7XHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZSgnR3VhcmQgLSBsb2dnaW5nIGluIGJ5IHBvcHVwJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luUG9wdXAoYXV0aFJlcXVlc3QgYXMgUG9wdXBSZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgICAgICAudmVyYm9zZShcclxuICAgICAgICAgICAgICAnR3VhcmQgLSBsb2dpbiBieSBwb3B1cCBzdWNjZXNzZnVsLCBjYW4gYWN0aXZhdGUsIHNldHRpbmcgYWN0aXZlIGFjY291bnQnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocmVzcG9uc2UuYWNjb3VudCk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZSgnR3VhcmQgLSBsb2dnaW5nIGluIGJ5IHJlZGlyZWN0Jyk7XHJcbiAgICBjb25zdCByZWRpcmVjdFN0YXJ0UGFnZSA9IHRoaXMuZ2V0RGVzdGluYXRpb25Vcmwoc3RhdGUudXJsKTtcclxuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgIC5sb2dpblJlZGlyZWN0KHtcclxuICAgICAgICByZWRpcmVjdFN0YXJ0UGFnZSxcclxuICAgICAgICAuLi5hdXRoUmVxdWVzdCxcclxuICAgICAgfSBhcyBSZWRpcmVjdFJlcXVlc3QpXHJcbiAgICAgIC5waXBlKG1hcCgoKSA9PiBmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGVscGVyIHdoaWNoIGNoZWNrcyBmb3IgdGhlIGNvcnJlY3QgaW50ZXJhY3Rpb24gdHlwZSwgcHJldmVudHMgcGFnZSB3aXRoIEd1YXJkIHRvIGJlIHNldCBhcyByZWRpcmVjdCwgYW5kIGNhbGxzIGhhbmRsZVJlZGlyZWN0T2JzZXJ2YWJsZVxyXG4gICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWN0aXZhdGVIZWxwZXIoXHJcbiAgICBzdGF0ZT86IFJvdXRlclN0YXRlU25hcHNob3RcclxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubXNhbEd1YXJkQ29uZmlnLmludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLlBvcHVwICYmXHJcbiAgICAgIHRoaXMubXNhbEd1YXJkQ29uZmlnLmludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLlJlZGlyZWN0XHJcbiAgICApIHtcclxuICAgICAgdGhyb3cgbmV3IEJyb3dzZXJDb25maWd1cmF0aW9uQXV0aEVycm9yKFxyXG4gICAgICAgICdpbnZhbGlkX2ludGVyYWN0aW9uX3R5cGUnLFxyXG4gICAgICAgICdJbnZhbGlkIGludGVyYWN0aW9uIHR5cGUgcHJvdmlkZWQgdG8gTVNBTCBHdWFyZC4gSW50ZXJhY3Rpb25UeXBlLlBvcHVwIG9yIEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdCBtdXN0IGJlIHByb3ZpZGVkIGluIHRoZSBNc2FsR3VhcmRDb25maWd1cmF0aW9uJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKCdNU0FMIEd1YXJkIGFjdGl2YXRlZCcpO1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBhIHBhZ2Ugd2l0aCBNU0FMIEd1YXJkIGlzIHNldCBhcyB0aGUgcmVkaXJlY3QgZm9yIGFjcXVpcmVUb2tlblNpbGVudCxcclxuICAgICAqIHNob3J0LWNpcmN1aXQgdG8gcHJldmVudCByZWRpcmVjdGluZyBvciBwb3B1cHMuXHJcbiAgICAgKi9cclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgVXJsU3RyaW5nLmhhc2hDb250YWluc0tub3duUHJvcGVydGllcyh3aW5kb3cubG9jYXRpb24uaGFzaCkgJiZcclxuICAgICAgICBCcm93c2VyVXRpbHMuaXNJbklmcmFtZSgpICYmXHJcbiAgICAgICAgIXRoaXMuYXV0aFNlcnZpY2UuaW5zdGFuY2UuZ2V0Q29uZmlndXJhdGlvbigpLnN5c3RlbVxyXG4gICAgICAgICAgLmFsbG93UmVkaXJlY3RJbklmcmFtZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgICAgIC53YXJuaW5nKFxyXG4gICAgICAgICAgICAnR3VhcmQgLSByZWRpcmVjdFVyaSBzZXQgdG8gcGFnZSB3aXRoIE1TQUwgR3VhcmQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIG5vdCBzZXQgcmVkaXJlY3RVcmkgdG8gYSBwYWdlIHRoYXQgcmVxdWlyZXMgYXV0aGVudGljYXRpb24uJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgICAgLmluZm8oXHJcbiAgICAgICAgICAnR3VhcmQgLSB3aW5kb3cgaXMgdW5kZWZpbmVkLCBNU0FMIGRvZXMgbm90IHN1cHBvcnQgc2VydmVyLXNpZGUgdG9rZW4gYWNxdWlzaXRpb24nXHJcbiAgICAgICAgKTtcclxuICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYSBsb2dpbkZhaWxlZFJvdXRlIGlzIHNldCBpbiB0aGUgY29uZmlnLCBzZXQgdGhpcyBhcyB0aGUgbG9naW5GYWlsZWRSb3V0ZVxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5tc2FsR3VhcmRDb25maWcubG9naW5GYWlsZWRSb3V0ZSkge1xyXG4gICAgICB0aGlzLmxvZ2luRmFpbGVkUm91dGUgPSB0aGlzLnBhcnNlVXJsKFxyXG4gICAgICAgIHRoaXMubXNhbEd1YXJkQ29uZmlnLmxvZ2luRmFpbGVkUm91dGVcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYXB0dXJlIGN1cnJlbnQgcGF0aCBiZWZvcmUgaXQgZ2V0cyBjaGFuZ2VkIGJ5IGhhbmRsZVJlZGlyZWN0T2JzZXJ2YWJsZVxyXG4gICAgY29uc3QgY3VycmVudFBhdGggPSB0aGlzLmxvY2F0aW9uLnBhdGgodHJ1ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuaW5pdGlhbGl6ZSgpLnBpcGUoXHJcbiAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UuaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjb25jYXRNYXAoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAgICAgICAuZ2V0TG9nZ2VyKClcclxuICAgICAgICAgICAgICAudmVyYm9zZShcclxuICAgICAgICAgICAgICAgICdHdWFyZCAtIG5vIGFjY291bnRzIHJldHJpZXZlZCwgbG9nIGluIHJlcXVpcmVkIHRvIGFjdGl2YXRlJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvZ2luSW50ZXJhY3RpdmVseShzdGF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgICAgICAudmVyYm9zZSgnR3VhcmQgLSBubyBhY2NvdW50cyByZXRyaWV2ZWQsIG5vIHN0YXRlLCBjYW5ub3QgbG9hZCcpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgICAgLnZlcmJvc2UoJ0d1YXJkIC0gYXQgbGVhc3QgMSBhY2NvdW50IGV4aXN0cywgY2FuIGFjdGl2YXRlIG9yIGxvYWQnKTtcclxuXHJcbiAgICAgICAgLy8gUHJldmVudCBuYXZpZ2F0aW5nIHRoZSBhcHAgdG8gLyNjb2RlPSBvciAvY29kZT1cclxuICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgKiBQYXRoIHJvdXRpbmc6XHJcbiAgICAgICAgICAgKiBzdGF0ZS51cmw6IC8jY29kZT0uLi5cclxuICAgICAgICAgICAqIHN0YXRlLnJvb3QuZnJhZ21lbnQ6IGNvZGU9Li4uXHJcbiAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgICogSGFzaCByb3V0aW5nOlxyXG4gICAgICAgICAgICogc3RhdGUudXJsOiAvY29kZVxyXG4gICAgICAgICAgICogc3RhdGUucm9vdC5mcmFnbWVudDogbnVsbFxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBjb25zdCB1cmxDb250YWluc0NvZGU6IGJvb2xlYW4gPSB0aGlzLmluY2x1ZGVzQ29kZShzdGF0ZS51cmwpO1xyXG4gICAgICAgICAgY29uc3QgZnJhZ21lbnRDb250YWluc0NvZGU6IGJvb2xlYW4gPVxyXG4gICAgICAgICAgICAhIXN0YXRlLnJvb3QgJiZcclxuICAgICAgICAgICAgISFzdGF0ZS5yb290LmZyYWdtZW50ICYmXHJcbiAgICAgICAgICAgIHRoaXMuaW5jbHVkZXNDb2RlKGAjJHtzdGF0ZS5yb290LmZyYWdtZW50fWApO1xyXG4gICAgICAgICAgY29uc3QgaGFzaFJvdXRpbmc6IGJvb2xlYW4gPVxyXG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uLnByZXBhcmVFeHRlcm5hbFVybChzdGF0ZS51cmwpLmluZGV4T2YoJyMnKSA9PT0gMDtcclxuXHJcbiAgICAgICAgICAvLyBFbnN1cmUgY29kZSBwYXJhbWV0ZXIgaXMgaW4gZnJhZ21lbnQgKGFuZCBub3QgaW4gcXVlcnkgcGFyYW1ldGVyKSwgb3IgdGhhdCBoYXNoIGhhc2ggcm91dGluZyBpcyB1c2VkXHJcbiAgICAgICAgICBpZiAodXJsQ29udGFpbnNDb2RlICYmIChmcmFnbWVudENvbnRhaW5zQ29kZSB8fCBoYXNoUm91dGluZykpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgICAgICAgIC5pbmZvKFxyXG4gICAgICAgICAgICAgICAgJ0d1YXJkIC0gSGFzaCBjb250YWlucyBrbm93biBjb2RlIHJlc3BvbnNlLCBzdG9wcGluZyBuYXZpZ2F0aW9uLidcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgLy8gUGF0aCByb3V0aW5nIChuYXZpZ2F0ZSB0byBjdXJyZW50IHBhdGggd2l0aG91dCBoYXNoKVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudFBhdGguaW5kZXhPZignIycpID4gLTEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5wYXJzZVVybCh0aGlzLmxvY2F0aW9uLnBhdGgoKSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBIYXNoIHJvdXRpbmcgKG5hdmlnYXRlIHRvIHJvb3QgcGF0aClcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMucGFyc2VVcmwoJycpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBFcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgICAgLmVycm9yKCdHdWFyZCAtIGVycm9yIHdoaWxlIGxvZ2dpbmcgaW4sIHVuYWJsZSB0byBhY3RpdmF0ZScpO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAgIC5nZXRMb2dnZXIoKVxyXG4gICAgICAgICAgLmVycm9yUGlpKGBHdWFyZCAtIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgYSBsb2dpbkZhaWxlZFJvdXRlIGlzIHNldCwgY2hlY2tzIHRvIHNlZSBpZiBzdGF0ZSBpcyBwYXNzZWQgYmVmb3JlIHJldHVybmluZyByb3V0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLmxvZ2luRmFpbGVkUm91dGUgJiYgc3RhdGUpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2VcclxuICAgICAgICAgICAgLmdldExvZ2dlcigpXHJcbiAgICAgICAgICAgIC52ZXJib3NlKCdHdWFyZCAtIGxvZ2luRmFpbGVkUm91dGUgc2V0LCByZWRpcmVjdGluZycpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHRoaXMubG9naW5GYWlsZWRSb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5jbHVkZXNDb2RlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHBhdGgubGFzdEluZGV4T2YoJy9jb2RlJykgPiAtMSAmJlxyXG4gICAgICAgIHBhdGgubGFzdEluZGV4T2YoJy9jb2RlJykgPT09IHBhdGgubGVuZ3RoIC0gJy9jb2RlJy5sZW5ndGgpIHx8IC8vIHBhdGguZW5kc1dpdGgoXCIvY29kZVwiKVxyXG4gICAgICBwYXRoLmluZGV4T2YoJyNjb2RlPScpID4gLTEgfHxcclxuICAgICAgcGF0aC5pbmRleE9mKCcmY29kZT0nKSA+IC0xXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGUoXHJcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XHJcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4ge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRMb2dnZXIoKS52ZXJib3NlKCdHdWFyZCAtIGNhbkFjdGl2YXRlJyk7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUhlbHBlcihzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBjYW5BY3RpdmF0ZUNoaWxkKFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxyXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0TG9nZ2VyKCkudmVyYm9zZSgnR3VhcmQgLSBjYW5BY3RpdmF0ZUNoaWxkJyk7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUhlbHBlcihzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBjYW5NYXRjaCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldExvZ2dlcigpLnZlcmJvc2UoJ0d1YXJkIC0gY2FuTG9hZCcpO1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVIZWxwZXIoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXNhbC5pbnRlcmNlcHRvci5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNhbC5pbnRlcmNlcHRvci5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuICovXHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcclxuaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgUG9wdXBSZXF1ZXN0LFxyXG4gIFJlZGlyZWN0UmVxdWVzdCxcclxuICBJbnRlcmFjdGlvblR5cGUsXHJcbiAgU2lsZW50UmVxdWVzdCxcclxufSBmcm9tICdAYXp1cmUvbXNhbC1icm93c2VyJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICcuL21zYWwuc2VydmljZSc7XHJcblxyXG5leHBvcnQgZGVjbGFyZSB0eXBlIE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0ID1cclxuICB8IE9taXQ8UG9wdXBSZXF1ZXN0LCAnc2NvcGVzJz5cclxuICB8IE9taXQ8UmVkaXJlY3RSZXF1ZXN0LCAnc2NvcGVzJz5cclxuICB8IE9taXQ8U2lsZW50UmVxdWVzdCwgJ3Njb3Blcyc+O1xyXG5cclxuZXhwb3J0IHR5cGUgTXNhbEludGVyY2VwdG9yQ29uZmlndXJhdGlvbiA9IHtcclxuICBpbnRlcmFjdGlvblR5cGU6IEludGVyYWN0aW9uVHlwZS5Qb3B1cCB8IEludGVyYWN0aW9uVHlwZS5SZWRpcmVjdDtcclxuICBwcm90ZWN0ZWRSZXNvdXJjZU1hcDogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgQXJyYXk8c3RyaW5nIHwgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXM+IHwgbnVsbFxyXG4gID47XHJcbiAgYXV0aFJlcXVlc3Q/OlxyXG4gICAgfCBNc2FsSW50ZXJjZXB0b3JBdXRoUmVxdWVzdFxyXG4gICAgfCAoKFxyXG4gICAgICAgIG1zYWxTZXJ2aWNlOiBNc2FsU2VydmljZSxcclxuICAgICAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxyXG4gICAgICAgIG9yaWdpbmFsQXV0aFJlcXVlc3Q6IE1zYWxJbnRlcmNlcHRvckF1dGhSZXF1ZXN0XHJcbiAgICAgICkgPT4gTXNhbEludGVyY2VwdG9yQXV0aFJlcXVlc3QpO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgUHJvdGVjdGVkUmVzb3VyY2VTY29wZXMgPSB7XHJcbiAgaHR0cE1ldGhvZDogc3RyaW5nO1xyXG4gIHNjb3BlczogQXJyYXk8c3RyaW5nPiB8IG51bGw7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNYXRjaGluZ1Jlc291cmNlcyA9IHtcclxuICBhYnNvbHV0ZVJlc291cmNlczogQXJyYXk8c3RyaW5nPjtcclxuICByZWxhdGl2ZVJlc291cmNlczogQXJyYXk8c3RyaW5nPjtcclxufTtcclxuIl19
|