src/bll/credentialsstore/inmemorycredentialsstore.ts (59 lines of code) (raw):

import {inject, injectable} from "inversify"; import {Logger} from "../utils/logger"; import {Credentials} from "./credentials"; import {CredentialsStore} from "./credentialsstore"; import {MessageConstants} from "../utils/messageconstants"; import {TYPES} from "../utils/constants"; import {SignIn} from "../commands/signin"; import {RemoteLogin} from "../../dal/remotelogin"; import {Settings} from "../entities/settings"; import {Output} from "../../view/output"; import {PersistentStorageManager} from "./persistentstoragemanager"; import {TeamCityStatusBarItem} from "../../view/teamcitystatusbaritem"; import {MessageManager} from "../../view/messagemanager"; import {WindowProxy} from "../moduleproxies/window-proxy"; import {Context} from "../../view/Context"; @injectable() export class InMemoryCredentialsStore implements CredentialsStore { constructor(@inject(TYPES.RemoteLogin) private readonly remoteLogin: RemoteLogin, @inject(TYPES.Output) private readonly output: Output, @inject(TYPES.Settings) private readonly settings: Settings, @inject(TYPES.PersistentStorageManager) private persistentStorageManager: PersistentStorageManager, @inject(TYPES.TeamCityStatusBarItem) private readonly statusBarItem: TeamCityStatusBarItem, @inject(TYPES.MessageManager) private readonly messageManager: MessageManager, @inject(TYPES.WindowProxy) private readonly windowProxy: WindowProxy, @inject(TYPES.Context) private readonly myContext: Context) { // } private credentials: Credentials; public async setCredentials(credentials: Credentials): Promise<void> { this.credentials = credentials; } public async getCredentials(): Promise<Credentials> { let credentials: Credentials = this.getCredentialsSilently(); if (!credentials) { Logger.logInfo("InMemoryCredentialsStore#getCredentials: credentials is undefined. An attempt to get them"); await this.signIn(); credentials = this.getCredentialsSilently(); if (!credentials) { Logger.logWarning("InMemoryCredentialsStore#getCredentials: An attempt to get credentials failed"); return Promise.reject(MessageConstants.NO_CREDENTIALS_RUN_SIGNIN); } } return Promise.resolve<Credentials>(credentials); } private async signIn(): Promise<void> { const signInCommand = new SignIn(this.remoteLogin, this, this.settings, this.persistentStorageManager, this.statusBarItem, this.messageManager, this.windowProxy, this.myContext); return signInCommand.exec(); } public getCredentialsSilently(): Credentials { return this.credentials; } public async removeCredentials(): Promise<void> { if (this.credentials) { Logger.logInfo(`The credentials for ${this.credentials.user} will be deleted from the CredentialsStore`); this.credentials = undefined; } } }