From 9c6783288063a826578ec30d50eee975fa286d28 Mon Sep 17 00:00:00 2001 From: Amir Omidi Date: Wed, 5 Aug 2020 14:48:47 -0700 Subject: [PATCH] Return cancelled, not undefined for azure login (#11656) * Return cancelled, not undefined. * fallback to reject * Add type to the rejection * add default --- .../src/account-provider/auths/azureAuth.ts | 12 ++++++++---- .../src/account-provider/auths/azureAuthCodeGrant.ts | 4 ++-- .../src/account-provider/auths/azureDeviceCode.ts | 4 ++-- .../src/account-provider/azureAccountProvider.ts | 2 +- .../azurecore/src/account-provider/interfaces.ts | 4 ++-- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/extensions/azurecore/src/account-provider/auths/azureAuth.ts b/extensions/azurecore/src/account-provider/auths/azureAuth.ts index 688889e4e8..3b82745571 100644 --- a/extensions/azurecore/src/account-provider/auths/azureAuth.ts +++ b/extensions/azurecore/src/account-provider/auths/azureAuth.ts @@ -78,7 +78,7 @@ export abstract class AzureAuth implements vscode.Disposable { } public async startLogin(): Promise { - let loginComplete: Deferred; + let loginComplete: Deferred; try { const result = await this.login(this.commonTenant, this.metadata.settings.microsoftResource); loginComplete = result.authComplete; @@ -94,13 +94,17 @@ export abstract class AzureAuth implements vscode.Disposable { } catch (ex) { if (ex instanceof AzureAuthError) { if (loginComplete) { - loginComplete.reject(ex.getPrintableString()); + loginComplete.reject(ex); } else { vscode.window.showErrorMessage(ex.getPrintableString()); } } Logger.error(ex); - return undefined; + return { + canceled: false + }; + } finally { + loginComplete?.reject(new AzureAuthError(localize('azureAuth.unidentifiedError', "Unidentified error with azure authentication"), 'Unidentified error with azure auth', undefined)); } } @@ -210,7 +214,7 @@ export abstract class AzureAuth implements vscode.Disposable { - protected abstract async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred }>; + protected abstract async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred }>; /** * Refreshes a token, if a refreshToken is passed in then we use that. If it is not passed in then we will prompt the user for consent. diff --git a/extensions/azurecore/src/account-provider/auths/azureAuthCodeGrant.ts b/extensions/azurecore/src/account-provider/auths/azureAuthCodeGrant.ts index e0138f5154..b7590d38b1 100644 --- a/extensions/azurecore/src/account-provider/auths/azureAuthCodeGrant.ts +++ b/extensions/azurecore/src/account-provider/auths/azureAuthCodeGrant.ts @@ -46,8 +46,8 @@ export class AzureAuthCodeGrant extends AzureAuth { } - protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred }> { - let authCompleteDeferred: Deferred; + protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred }> { + let authCompleteDeferred: Deferred; let authCompletePromise = new Promise((resolve, reject) => authCompleteDeferred = { resolve, reject }); let authResponse: AuthCodeResponse; diff --git a/extensions/azurecore/src/account-provider/auths/azureDeviceCode.ts b/extensions/azurecore/src/account-provider/auths/azureDeviceCode.ts index 14dc71a7d5..125a466a70 100644 --- a/extensions/azurecore/src/account-provider/auths/azureDeviceCode.ts +++ b/extensions/azurecore/src/account-provider/auths/azureDeviceCode.ts @@ -58,8 +58,8 @@ export class AzureDeviceCode extends AzureAuth { this.pageTitle = localize('addAccount', "Add {0} account", this.metadata.displayName); } - protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred }> { - let authCompleteDeferred: Deferred; + protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred }> { + let authCompleteDeferred: Deferred; let authCompletePromise = new Promise((resolve, reject) => authCompleteDeferred = { resolve, reject }); const uri = `${this.loginEndpointUrl}/${this.commonTenant.id}/oauth2/devicecode`; diff --git a/extensions/azurecore/src/account-provider/azureAccountProvider.ts b/extensions/azurecore/src/account-provider/azureAccountProvider.ts index 1f2471a394..0cd08d5a26 100644 --- a/extensions/azurecore/src/account-provider/azureAccountProvider.ts +++ b/extensions/azurecore/src/account-provider/azureAccountProvider.ts @@ -25,7 +25,7 @@ const localize = nls.loadMessageBundle(); export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disposable { private static readonly CONFIGURATION_SECTION = 'accounts.azure.auth'; private readonly authMappings = new Map(); - private initComplete: Deferred; + private initComplete: Deferred; private initCompletePromise: Promise = new Promise((resolve, reject) => this.initComplete = { resolve, reject }); constructor( diff --git a/extensions/azurecore/src/account-provider/interfaces.ts b/extensions/azurecore/src/account-provider/interfaces.ts index 1977afbd4a..0738eab4db 100644 --- a/extensions/azurecore/src/account-provider/interfaces.ts +++ b/extensions/azurecore/src/account-provider/interfaces.ts @@ -221,7 +221,7 @@ export interface AzureAccountSecurityToken { */ export type AzureAccountSecurityTokenCollection = { [tenantId: string]: AzureAccountSecurityToken }; -export interface Deferred { +export interface Deferred { resolve: (result: T | Promise) => void; - reject: (reason: any) => void; + reject: (reason: E) => void; }