mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Return cancelled, not undefined for azure login (#11656)
* Return cancelled, not undefined. * fallback to reject * Add type to the rejection * add default
This commit is contained in:
@@ -78,7 +78,7 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async startLogin(): Promise<AzureAccount | azdata.PromptFailedResult> {
|
public async startLogin(): Promise<AzureAccount | azdata.PromptFailedResult> {
|
||||||
let loginComplete: Deferred<void>;
|
let loginComplete: Deferred<void, Error>;
|
||||||
try {
|
try {
|
||||||
const result = await this.login(this.commonTenant, this.metadata.settings.microsoftResource);
|
const result = await this.login(this.commonTenant, this.metadata.settings.microsoftResource);
|
||||||
loginComplete = result.authComplete;
|
loginComplete = result.authComplete;
|
||||||
@@ -94,13 +94,17 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
if (ex instanceof AzureAuthError) {
|
if (ex instanceof AzureAuthError) {
|
||||||
if (loginComplete) {
|
if (loginComplete) {
|
||||||
loginComplete.reject(ex.getPrintableString());
|
loginComplete.reject(ex);
|
||||||
} else {
|
} else {
|
||||||
vscode.window.showErrorMessage(ex.getPrintableString());
|
vscode.window.showErrorMessage(ex.getPrintableString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Logger.error(ex);
|
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<void> }>;
|
protected abstract async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred<void, Error> }>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.
|
* 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.
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ export class AzureAuthCodeGrant extends AzureAuth {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred<void> }> {
|
protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred<void, Error> }> {
|
||||||
let authCompleteDeferred: Deferred<void>;
|
let authCompleteDeferred: Deferred<void, Error>;
|
||||||
let authCompletePromise = new Promise<void>((resolve, reject) => authCompleteDeferred = { resolve, reject });
|
let authCompletePromise = new Promise<void>((resolve, reject) => authCompleteDeferred = { resolve, reject });
|
||||||
let authResponse: AuthCodeResponse;
|
let authResponse: AuthCodeResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ export class AzureDeviceCode extends AzureAuth {
|
|||||||
this.pageTitle = localize('addAccount', "Add {0} account", this.metadata.displayName);
|
this.pageTitle = localize('addAccount', "Add {0} account", this.metadata.displayName);
|
||||||
|
|
||||||
}
|
}
|
||||||
protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred<void> }> {
|
protected async login(tenant: Tenant, resource: Resource): Promise<{ response: OAuthTokenResponse, authComplete: Deferred<void, Error> }> {
|
||||||
let authCompleteDeferred: Deferred<void>;
|
let authCompleteDeferred: Deferred<void, Error>;
|
||||||
let authCompletePromise = new Promise<void>((resolve, reject) => authCompleteDeferred = { resolve, reject });
|
let authCompletePromise = new Promise<void>((resolve, reject) => authCompleteDeferred = { resolve, reject });
|
||||||
|
|
||||||
const uri = `${this.loginEndpointUrl}/${this.commonTenant.id}/oauth2/devicecode`;
|
const uri = `${this.loginEndpointUrl}/${this.commonTenant.id}/oauth2/devicecode`;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ const localize = nls.loadMessageBundle();
|
|||||||
export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disposable {
|
export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disposable {
|
||||||
private static readonly CONFIGURATION_SECTION = 'accounts.azure.auth';
|
private static readonly CONFIGURATION_SECTION = 'accounts.azure.auth';
|
||||||
private readonly authMappings = new Map<AzureAuthType, AzureAuth>();
|
private readonly authMappings = new Map<AzureAuthType, AzureAuth>();
|
||||||
private initComplete: Deferred<void>;
|
private initComplete: Deferred<void, Error>;
|
||||||
private initCompletePromise: Promise<void> = new Promise<void>((resolve, reject) => this.initComplete = { resolve, reject });
|
private initCompletePromise: Promise<void> = new Promise<void>((resolve, reject) => this.initComplete = { resolve, reject });
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ export interface AzureAccountSecurityToken {
|
|||||||
*/
|
*/
|
||||||
export type AzureAccountSecurityTokenCollection = { [tenantId: string]: AzureAccountSecurityToken };
|
export type AzureAccountSecurityTokenCollection = { [tenantId: string]: AzureAccountSecurityToken };
|
||||||
|
|
||||||
export interface Deferred<T> {
|
export interface Deferred<T, E extends Error = Error> {
|
||||||
resolve: (result: T | Promise<T>) => void;
|
resolve: (result: T | Promise<T>) => void;
|
||||||
reject: (reason: any) => void;
|
reject: (reason: E) => void;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user