-
Notifications
You must be signed in to change notification settings - Fork 2.7k
/
Copy pathmsal.service.ts
97 lines (93 loc) · 3.04 KB
/
msal.service.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
import { Inject, Injectable } from "@angular/core";
import { Location } from "@angular/common";
import {
IPublicClientApplication,
EndSessionRequest,
EndSessionPopupRequest,
AuthenticationResult,
RedirectRequest,
SilentRequest,
PopupRequest,
SsoSilentRequest,
Logger,
WrapperSKU,
} from "@azure/msal-browser";
import { Observable, from } from "rxjs";
import { IMsalService } from "./IMsalService";
import { name, version } from "./packageMetadata";
import { MSAL_INSTANCE } from "./constants";
@Injectable()
export class MsalService implements IMsalService {
private redirectHash: string;
private logger: Logger;
constructor(
@Inject(MSAL_INSTANCE) public instance: IPublicClientApplication,
private location: Location
) {
const hash = this.location.path(true).split("#").pop();
if (hash) {
this.redirectHash = `#${hash}`;
}
this.instance.initializeWrapperLibrary(WrapperSKU.Angular, version);
}
initialize(): Observable<void> {
return from(this.instance.initialize());
}
acquireTokenPopup(request: PopupRequest): Observable<AuthenticationResult> {
return from(this.instance.acquireTokenPopup(request));
}
acquireTokenRedirect(request: RedirectRequest): Observable<void> {
return from(this.instance.acquireTokenRedirect(request));
}
acquireTokenSilent(
silentRequest: SilentRequest
): Observable<AuthenticationResult> {
return from(this.instance.acquireTokenSilent(silentRequest));
}
handleRedirectObservable(hash?: string): Observable<AuthenticationResult> {
return from(
this.instance
.initialize()
.then(() =>
this.instance.handleRedirectPromise(hash || this.redirectHash)
)
);
}
loginPopup(request?: PopupRequest): Observable<AuthenticationResult> {
return from(this.instance.loginPopup(request));
}
loginRedirect(request?: RedirectRequest): Observable<void> {
return from(this.instance.loginRedirect(request));
}
logout(logoutRequest?: EndSessionRequest): Observable<void> {
return from(this.instance.logout(logoutRequest));
}
logoutRedirect(logoutRequest?: EndSessionRequest): Observable<void> {
return from(this.instance.logoutRedirect(logoutRequest));
}
logoutPopup(logoutRequest?: EndSessionPopupRequest): Observable<void> {
return from(this.instance.logoutPopup(logoutRequest));
}
ssoSilent(request: SsoSilentRequest): Observable<AuthenticationResult> {
return from(this.instance.ssoSilent(request));
}
/**
* Gets logger for msal-angular.
* If no logger set, returns logger instance created with same options as msal-browser
*/
getLogger(): Logger {
if (!this.logger) {
this.logger = this.instance.getLogger().clone(name, version);
}
return this.logger;
}
// Create a logger instance for msal-angular with the same options as msal-browser
setLogger(logger: Logger): void {
this.logger = logger.clone(name, version);
this.instance.setLogger(logger);
}
}