Skip to content

Commit 8eda55b

Browse files
committed
tmp
1 parent ab1d6ab commit 8eda55b

File tree

10 files changed

+94
-99
lines changed

10 files changed

+94
-99
lines changed

package-lock.json

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"webpack-merge": "^5.2.0"
6363
},
6464
"dependencies": {
65+
"@azure/msal-browser": "^2.20.0",
6566
"@braintree/sanitize-url": "^5.0.2",
6667
"@monaco-editor/loader": "^1.2.0",
6768
"@paperbits/azure": "0.1.468",

src/apim.design.module.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { MapiObjectStorage, MapiBlobStorage } from "./persistence";
44
import { DefaultAuthenticator } from "./authentication/defaultAuthenticator";
55
import { IInjector, IInjectorModule } from "@paperbits/common/injection";
66
import { ConsoleLogger } from "@paperbits/common/logging";
7-
import { DefaultSessionManager } from "@paperbits/common/persistence/defaultSessionManager";
87
import { ListOfApisModule } from "./components/apis/list-of-apis/ko/listOfApis.module";
98
import { ListOfApisEditorModule } from "./components/apis/list-of-apis/ko/listOfApisEditor.module";
109
import { DetailsOfApiModule } from "./components/apis/details-of-api/ko/detailsOfApi.module";
@@ -61,11 +60,12 @@ import { HistoryRouteHandler } from "@paperbits/common/routing";
6160
import { OldContentRouteGuard } from "./routing/oldContentRouteGuard";
6261
import { ArmAuthenticator } from "./authentication/armAuthenticator";
6362
import { DefaultSettingsProvider } from "./configuration";
64-
import { DefaultSessionManager } from "./authentication/defaultSessionManager";
6563
import { AzureResourceManagementService } from "./services/armService";
6664
import { ApiProductsModule } from "./components/apis/api-products/ko/apiProducts.module";
6765
import { ApiProductsEditorModule } from "./components/apis/api-products/ko/apiProductsEditor.module";
6866
import { RuntimeConfigurator } from "./services/runtimeConfigurator";
67+
import { AccessTokenRefrsher } from "./authentication/accessTokenRefresher";
68+
import { DefaultSessionManager } from "@paperbits/common/persistence/defaultSessionManager";
6969

7070

7171
export class ApimDesignModule implements IInjectorModule {
@@ -136,10 +136,11 @@ export class ApimDesignModule implements IInjectorModule {
136136
injector.bindToCollection("autostart", HistoryRouteHandler);
137137

138138

139-
injector.bindToCollection("autostart", AccessTokenRefrsher);
139+
// injector.bindToCollection("autostart", AccessTokenRefrsher);
140140
injector.bindToCollection("autostart", RuntimeConfigurator);
141141
injector.bindSingleton("sessionManager", DefaultSessionManager);
142-
injector.bindInstance("configFileUri", "/config.design.json");
142+
// injector.bindInstance("configFileUri", "/config.design.json");
143+
injector.bindInstance("configFileUri", "/config.json");
143144
injector.bindSingleton("settingsProvider", DefaultSettingsProvider);
144145
injector.bindSingleton("sessionManager", DefaultSessionManager);
145146
injector.bindSingleton("armService", AzureResourceManagementService);

src/apim.runtime.module.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import { ApiProductsTiles } from "./components/apis/api-products/ko/runtime/api-
2424
import { ApiDetails } from "./components/apis/details-of-api/ko/runtime/api-details";
2525
import { ApiHistory } from "./components/apis/history-of-api/ko/runtime/api-history";
2626
import { ApiList, ApiListDropdown, ApiListTiles } from "./components/apis/list-of-apis/ko/runtime";
27-
import { DefaultAuthenticator } from "./components/defaultAuthenticator";
2827
import { FileInput } from "./components/file-input/file-input";
2928
import { CodeSnippet } from "./components/operations/operation-details/ko/runtime/code-snippet";
3029
import { Authorization } from "./components/operations/operation-details/ko/runtime/authorization";
@@ -60,7 +59,7 @@ import { AadSignOutRouteGuard } from "./routing/aadSignoutRouteGuard";
6059
import { RouteHelper } from "./routing/routeHelper";
6160
import { SignOutRouteGuard } from "./routing/signOutRouteGuard";
6261
import { StaticUserService } from "./services";
63-
import { AadService } from "./services/aadService";
62+
import { AzureActiveDirectoryService } from "./services/aadService";
6463
import { AnalyticsService } from "./services/analyticsService";
6564
import { ApiService } from "./services/apiService";
6665
import { BackendService } from "./services/backendService";
@@ -73,6 +72,11 @@ import { TenantService } from "./services/tenantService";
7372
import { UsersService } from "./services/usersService";
7473
import { ApimSettingsProvider } from "./configuration/apimSettingsProvider";
7574
import { AccessTokenRefrsher } from "./authentication/accessTokenRefresher";
75+
import { DefaultSettingsProvider, StaticSettingsProvider } from "./configuration";
76+
import { HistoryRouteHandler, LocationRouteHandler } from "@paperbits/common/routing";
77+
import { SettingNames } from "./constants";
78+
import { XmlHttpRequestClient } from "@paperbits/common/http";
79+
import { DefaultAuthenticator } from "./authentication/defaultAuthenticator";
7680

7781
export class ApimRuntimeModule implements IInjectorModule {
7882
public register(injector: IInjector): void {
@@ -155,6 +159,6 @@ export class ApimRuntimeModule implements IInjectorModule {
155159
injector.bindInstance("configFileUri", "/config.runtime.json");
156160
injector.bindSingleton("settingsProvider", DefaultSettingsProvider);
157161
}
158-
injector.bindToCollection("autostart", AccessTokenRefrsher)
162+
// injector.bindToCollection("autostart", AccessTokenRefrsher);
159163
}
160164
}

src/authentication/accessToken.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export class AccessToken {
9595
}
9696

9797
public isExpired(): boolean {
98+
return false;
9899
const now = new Date();
99100
return now > this.expires;
100101
}

src/authentication/armAuthenticator.ts

Lines changed: 33 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import * as Msal from "@azure/msal-browser";
2-
import { Utils } from "../utils";
32
import { IAuthenticator, AccessToken } from ".";
43

54

65
const aadClientId = "a962e1ed-5694-4abe-9e9b-d08d35877efc"; // test app
7-
const scopes = ["https://management.azure.com/user_impersonation"];
8-
const loginRequest = { scopes: ["openid", "profile", "https://management.azure.com/user_impersonation"] };
9-
6+
const loginRequest = { scopes: ["openid", "profile", "https://management.azure.com/user_impersonation"], account: null };
7+
const authority = "https://login.microsoftonline.com/common";
8+
const redirectUri = "https://apimanagement-cors-proxy-df.azure-api.net/portal/signin-aad";
109

1110
export class ArmAuthenticator implements IAuthenticator {
1211
private accessToken: AccessToken;
1312
private msalInstance: Msal.PublicClientApplication;
13+
private authPromise: Promise<AccessToken>;
1414

1515
constructor() {
1616
const msalConfig: Msal.Configuration = {
1717
auth: {
1818
clientId: aadClientId,
19-
authority: "https://login.microsoftonline.com/common",
20-
redirectUri: "https://apimanagement-cors-proxy-df.azure-api.net/portal/signin-aad",
19+
authority: authority,
20+
redirectUri: redirectUri
2121
},
2222
cache: {
2323
cacheLocation: "sessionStorage", // This configures where your cache will be stored
@@ -26,55 +26,18 @@ export class ArmAuthenticator implements IAuthenticator {
2626
};
2727

2828
this.msalInstance = new Msal.PublicClientApplication(msalConfig);
29-
this.checkCallbacks();
3029
}
3130

32-
public async checkCallbacks(): Promise<void> {
31+
public async checkCallbacks(): Promise<Msal.AuthenticationResult> {
3332
try {
34-
const response = await this.msalInstance.handleRedirectPromise();
35-
36-
debugger;
3733

38-
if (response !== null) {
39-
// sessionStorage[tokenKey] = response.idToken;
40-
// this.onLogin.next(true);
41-
42-
// this.checkToken();
43-
}
34+
return await this.msalInstance.handleRedirectPromise();
4435
}
4536
catch (error) {
4637
console.error(error);
4738
}
4839
}
4940

50-
51-
52-
private async getTokenRedirect(request): Promise<Msal.AuthenticationResult> {
53-
const account = this.getAccount();
54-
55-
if (!account) {
56-
await this.msalInstance.acquireTokenRedirect(request);
57-
return;
58-
}
59-
60-
request.account = account;
61-
62-
try {
63-
return await this.msalInstance.acquireTokenSilent(request);
64-
}
65-
catch (error) {
66-
console.warn("silent token acquisition fails. acquiring token using redirect");
67-
68-
if (error instanceof Msal.InteractionRequiredAuthError) {
69-
// fallback to interaction when silent call fails
70-
await this.msalInstance.acquireTokenRedirect(request);
71-
}
72-
else {
73-
console.warn(error);
74-
}
75-
}
76-
}
77-
7841
private getAccount(): Msal.AccountInfo {
7942
const accounts = this.msalInstance.getAllAccounts();
8043

@@ -85,75 +48,59 @@ export class ArmAuthenticator implements IAuthenticator {
8548
return accounts[0];
8649
}
8750

88-
private async tryAcquireToken(request: any): Promise<any> {
51+
private async tryAcquireToken(): Promise<AccessToken> {
8952
const account = this.getAccount();
9053

9154
if (!account) {
92-
await this.msalInstance.acquireTokenRedirect(request);
55+
const callbackResult = await this.checkCallbacks();
56+
57+
if (callbackResult) {
58+
const parsedToken = AccessToken.parse(`${callbackResult.tokenType} ${callbackResult.accessToken}`);
59+
return parsedToken;
60+
}
61+
62+
await this.msalInstance.acquireTokenRedirect(loginRequest);
9363
return;
9464
}
9565

96-
request.account = account;
66+
loginRequest.account = account;
9767

9868
try {
99-
const result = await this.msalInstance.acquireTokenSilent(request);
100-
debugger;
69+
const result = await this.msalInstance.acquireTokenSilent(loginRequest);
70+
const token = AccessToken.parse(`${result.tokenType} ${result.accessToken}`);
71+
72+
return token;
10173
}
10274
catch (error) {
103-
console.warn("silent token acquisition fails. acquiring token using redirect");
104-
10575
if (error instanceof Msal.InteractionRequiredAuthError) {
10676
// fallback to interaction when silent call fails
107-
await this.msalInstance.acquireTokenRedirect(request);
77+
await this.msalInstance.acquireTokenRedirect(loginRequest);
10878
}
10979
else {
11080
console.warn(error);
11181
}
11282
}
11383

114-
115-
console.log("2");
116-
// await Utils.delay(1);
117-
118-
// if (!response.accessToken) {
119-
// throw new Error(`Unable to acquire ARM token.`);
120-
// }
121-
122-
// const accessToken = AccessToken.parse(`Bearer ${response.accessToken}`);
123-
// this.setAccessToken(accessToken);
124-
125-
126-
127-
// setTimeout(this.tryAcquireToken.bind(this), 30 * 60 * 1000); // scheduling token refresh in 30 min
128-
129-
// return accessToken;
130-
131-
13284
return null;
13385
}
13486

135-
public async getAccessToken(): Promise<AccessToken> {
136-
if (this.accessToken && !this.accessToken.isExpired()) {
137-
return this.accessToken;
138-
}
139-
140-
const storedAccessToken = sessionStorage.getItem("armAccessToken");
141-
142-
if (storedAccessToken) {
143-
const parsedToken = AccessToken.parse(storedAccessToken);
87+
private async startGettingToken(): Promise<AccessToken> {
88+
const accessToken = await this.tryAcquireToken();
89+
return accessToken;
90+
}
14491

145-
if (!parsedToken.isExpired()) {
146-
return parsedToken;
147-
}
92+
public getAccessToken(): Promise<AccessToken> {
93+
if (this.authPromise) {
94+
return this.authPromise;
14895
}
14996

150-
const accessToken = await this.tryAcquireToken(loginRequest);
151-
return accessToken;
97+
this.authPromise = this.startGettingToken();
98+
return this.authPromise;
15299
}
153100

154101
public async getAccessTokenAsString(): Promise<string> {
155102
const accessToken = await this.getAccessToken();
156-
return accessToken.toString();
103+
return accessToken?.toString();
157104
}
158105

159106
public async setAccessToken(accessToken: AccessToken): Promise<void> {

src/components/app/app.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { IAuthenticator } from "../../authentication";
99
import { Utils } from "../../utils";
1010
import { Bag } from "@paperbits/common";
1111
import { SettingNames } from "../../constants";
12+
import { AzureResourceManagementService } from "../../services/armService";
13+
import { SessionManager } from "@paperbits/common/persistence/sessionManager";
1214

1315
const startupError = `Unable to start the portal`;
1416

@@ -21,7 +23,7 @@ export class App {
2123
private readonly settingsProvider: ISettingsProvider,
2224
private readonly authenticator: IAuthenticator,
2325
private readonly viewManager: ViewManager,
24-
private readonly eventManager: EventManager
26+
private readonly eventManager: EventManager,
2527
private readonly siteService: ISiteService,
2628
private readonly armService: AzureResourceManagementService,
2729
private readonly sessionManager: SessionManager

src/components/users/signin-social/ko/runtime/signin-aad-b2c.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Component, OnMounted, Param, RuntimeComponent } from "@paperbits/common
66
import { SettingNames } from "../../../../../constants";
77
import { AadB2CClientConfig } from "../../../../../contracts/aadB2CClientConfig";
88
import { ValidationReport } from "../../../../../contracts/validationReport";
9-
import { AadService } from "../../../../../services";
9+
import { AzureActiveDirectoryService } from "../../../../../services";
1010

1111

1212
const aadb2cResetPasswordErrorCode = "AADB2C90118";
@@ -20,7 +20,7 @@ const aadb2cResetPasswordErrorCode = "AADB2C90118";
2020
})
2121
export class SignInAadB2C {
2222
constructor(
23-
private readonly aadService: AadService,
23+
private readonly aadService: AzureActiveDirectoryService,
2424
private readonly eventManager: EventManager,
2525
private readonly settingsProvider: ISettingsProvider
2626
) {

src/components/users/signin-social/ko/runtime/signin-aad.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { ISettingsProvider } from "@paperbits/common/configuration";
44
import { EventManager } from "@paperbits/common/events";
55
import { Component, Param, RuntimeComponent } from "@paperbits/common/ko/decorators";
66
import { ValidationReport } from "../../../../../contracts/validationReport";
7-
import { AadService } from "../../../../../services";
7+
import { AzureActiveDirectoryService } from "../../../../../services";
88
import { SettingNames, defaultAadTenantName } from "./../../../../../constants";
99
import { AadClientConfig } from "./../../../../../contracts/aadClientConfig";
1010

@@ -19,7 +19,7 @@ import { AadClientConfig } from "./../../../../../contracts/aadClientConfig";
1919
})
2020
export class SignInAad {
2121
constructor(
22-
private readonly aadService: AadService,
22+
private readonly aadService: AzureActiveDirectoryService,
2323
private readonly eventManager: EventManager,
2424
private readonly settingsProvider: ISettingsProvider
2525
) {

0 commit comments

Comments
 (0)