declare var host: string; declare var appInsights: Client; import ko = require("knockout"); import { Account } from "./api/account"; import { App } from "./app"; import { appConfig } from "./appconfig"; import { settings } from "./settings"; declare const app: App; class AuthManager { public authenticated: KnockoutObservable; public login: KnockoutObservable; public loginId: KnockoutObservable; constructor() { this.authenticated = ko.observable(false); this.login = ko.observable(); this.loginId = ko.observable(); } /** * Authenticate user with given password and return status of operation. * @param login Login which use for authentication. * @param password Password which user for login. * @param rememberMe Value indicating whether remember user in manager. */ public async authenticate(login: string, password: string, rememberMe: boolean = false): Promise { const accountApi = new Account(host); if (rememberMe) { settings.login(login); settings.password(password); settings.saveSettings(); } try { const data = await accountApi.authenticate(login, password, false); if (data.Status === "Ok") { this.authenticated(true); this.login(data.Login); this.loginId(data.Id); settings.isGuest(data.IsGuest); settings.saveSettings(); if (appConfig.game.seatMode) { // tslint:disable-next-line:no-string-literal appInsights.context["device"].model = "Individual Console: " + login; } } else { // Report authentication or authorization errors this.authenticated(false); this.login(null); this.loginId(null); } return data.Status; } catch (e) { return ""; } } public logout() { settings.login(null); settings.password(null); settings.saveSettings(); authToken = null; this.authenticated(false); this.login(null); } /** * Initiate login as guest request to server. */ public async loginAsGuest(): Promise { const accountApi = new Account(host); try { const value = await accountApi.registerGuest(); if (!value) { return ""; } else { settings.login(value.Login); settings.password(value.Password); settings.saveSettings(); app.processing(false); if (value.Status === "Ok") { return await this.authenticate(value.Login, value.Password, true); } else { return value.Status; } } } catch (e) { return ""; } } } const authManager: AuthManager = new AuthManager(); export = authManager;