apim-developer-portal2
Version:
API management developer portal
79 lines (65 loc) • 3.32 kB
text/typescript
import { AccessToken } from "./../../authentication/accessToken";
import template from "./app.html";
import { ViewManager } from "@paperbits/common/ui";
import { Component, OnMounted } from "@paperbits/common/ko/decorators";
import { ISettingsProvider } from "@paperbits/common/configuration";
import { ISiteService } from "@paperbits/common/sites";
import { IAuthenticator } from "../../authentication";
import { Utils } from "../../utils";
const startupError = `Unable to start the portal`;
export class App {
constructor(
private readonly settingsProvider: ISettingsProvider,
private readonly authenticator: IAuthenticator,
private readonly viewManager: ViewManager,
private readonly siteService: ISiteService
) { }
public async initialize(): Promise<void> {
const settings = await this.settingsProvider.getSettings();
if (!settings["managementApiUrl"]) {
this.viewManager.addToast(startupError, `Management API URL is missing. See setting <i>managementApiUrl</i> in the configuration file <i>config.design.json</i>`);
return;
}
try {
const token = await this.authenticator.getAccessToken();
if (!token) {
const managementApiAccessToken = settings["managementApiAccessToken"];
if (!managementApiAccessToken) {
this.viewManager.addToast(startupError, `Management API access token is missing. See setting <i>managementApiAccessToken</i> in the configuration file <i>config.design.json</i>`);
return;
}
const accessToken = AccessToken.parse(managementApiAccessToken);
const utcNow = Utils.getUtcDateTime();
if (utcNow >= accessToken.expires) {
this.viewManager.addToast(startupError, `Management API access token has expired. See setting <i>managementApiAccessToken</i> in the configuration file <i>config.design.json</i>`);
this.authenticator.clearAccessToken();
window.location.assign("/signout");
return;
}
await this.authenticator.setAccessToken(accessToken);
}
}
catch (error) {
this.viewManager.addToast(startupError, error);
return;
}
try {
/* Checking if settings were created, and if not, we consider the portal not initialized and launch setup dialog. */
const siteSettings = await this.siteService.getSettings<any>();
if (!siteSettings) {
this.viewManager.setHost({ name: "setup-dialog" });
return;
}
this.viewManager.setHost({ name: "page-host" });
this.viewManager.showToolboxes();
}
catch (error) {
this.viewManager.addToast(startupError, `Check if the settings specified in the configuration file <i>config.design.json</i> are correct or refer to the <a href="http://aka.ms/apimdocs/portal#faq" target="_blank">frequently asked questions</a>.`);
}
}
}