mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Null & Error handling in Azure core (#22259)
This commit is contained in:
@@ -139,11 +139,8 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
if (ex instanceof AzureAuthError) {
|
if (ex instanceof AzureAuthError) {
|
||||||
if (loginComplete) {
|
if (loginComplete) {
|
||||||
loginComplete.reject(ex);
|
loginComplete.reject(ex);
|
||||||
Logger.error(ex);
|
|
||||||
} else {
|
|
||||||
void vscode.window.showErrorMessage(ex.message);
|
|
||||||
Logger.error(ex.originalMessageAndException);
|
|
||||||
}
|
}
|
||||||
|
Logger.error(ex.originalMessageAndException);
|
||||||
} else {
|
} else {
|
||||||
const message = ex.errorMessage || ex.message;
|
const message = ex.errorMessage || ex.message;
|
||||||
if (message) {
|
if (message) {
|
||||||
@@ -155,10 +152,11 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
Logger.error(ex);
|
Logger.error(ex);
|
||||||
|
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
canceled: false
|
canceled: false,
|
||||||
|
errorCode: ex.errorCode,
|
||||||
|
errorMessage: ex.errorMessage || ex.message
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -476,7 +474,12 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
Logger.verbose('Fetching tenants with uri {0}', tenantUri);
|
Logger.verbose('Fetching tenants with uri {0}', tenantUri);
|
||||||
let tenantList: string[] = [];
|
let tenantList: string[] = [];
|
||||||
const tenantResponse = await this.makeGetRequest(tenantUri, token);
|
const tenantResponse = await this.makeGetRequest(tenantUri, token);
|
||||||
const tenants: Tenant[] = tenantResponse.data.value.map((tenantInfo: TenantResponse) => {
|
const data = tenantResponse.data;
|
||||||
|
if (data.error) {
|
||||||
|
Logger.error(`Error fetching tenants :${data.error.code} - ${data.error.message}`);
|
||||||
|
throw new Error(`${data.error.code} - ${data.error.message}`);
|
||||||
|
}
|
||||||
|
const tenants: Tenant[] = data.value.map((tenantInfo: TenantResponse) => {
|
||||||
if (tenantInfo.displayName) {
|
if (tenantInfo.displayName) {
|
||||||
tenantList.push(tenantInfo.displayName);
|
tenantList.push(tenantInfo.displayName);
|
||||||
} else {
|
} else {
|
||||||
@@ -501,7 +504,7 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
return tenants;
|
return tenants;
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
Logger.error(`Error fetching tenants :${ex}`);
|
Logger.error(`Error fetching tenants :${ex}`);
|
||||||
throw new Error('Error retrieving tenant information');
|
throw ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export default class AccountStore implements IAccountStore {
|
|||||||
return this.readFromMemento()
|
return this.readFromMemento()
|
||||||
.then(accounts => {
|
.then(accounts => {
|
||||||
// Determine if account exists and proceed accordingly
|
// Determine if account exists and proceed accordingly
|
||||||
const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, newAccount.key));
|
const match = accounts.findIndex(account => AccountStore.isSameAccountKey(account.key, newAccount.key));
|
||||||
return match < 0
|
return match < 0
|
||||||
? this.addToAccountList(accounts, newAccount)
|
? this.addToAccountList(accounts, newAccount)
|
||||||
: this.updateAccountList(accounts, newAccount.key, matchAccount => AccountStore.mergeAccounts(newAccount, matchAccount));
|
: this.updateAccountList(accounts, newAccount.key, matchAccount => AccountStore.mergeAccounts(newAccount, matchAccount));
|
||||||
@@ -100,9 +100,11 @@ export default class AccountStore implements IAccountStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PRIVATE METHODS /////////////////////////////////////////////////////
|
// PRIVATE METHODS /////////////////////////////////////////////////////
|
||||||
private static findAccountByKey(key1: azdata.AccountKey, key2: azdata.AccountKey): boolean {
|
private static isSameAccountKey(key1: azdata.AccountKey | undefined, key2: azdata.AccountKey | undefined): boolean {
|
||||||
// Provider ID and Account ID must match
|
// Provider ID and Account ID must match
|
||||||
return key1.providerId === key2.providerId && key1.accountId === key2.accountId;
|
return key1 && key2
|
||||||
|
? key1.providerId === key2.providerId && key1.accountId === key2.accountId
|
||||||
|
: false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static mergeAccounts(source: azdata.Account, target: azdata.Account): void {
|
private static mergeAccounts(source: azdata.Account, target: azdata.Account): void {
|
||||||
@@ -135,7 +137,7 @@ export default class AccountStore implements IAccountStore {
|
|||||||
|
|
||||||
private addToAccountList(accounts: azdata.Account[], accountToAdd: azdata.Account): AccountListOperationResult {
|
private addToAccountList(accounts: azdata.Account[], accountToAdd: azdata.Account): AccountListOperationResult {
|
||||||
// Check if the entry already exists
|
// Check if the entry already exists
|
||||||
const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToAdd.key));
|
const match = accounts.findIndex(account => AccountStore.isSameAccountKey(account.key, accountToAdd.key));
|
||||||
if (match >= 0) {
|
if (match >= 0) {
|
||||||
// Account already exists, we won't do anything
|
// Account already exists, we won't do anything
|
||||||
return {
|
return {
|
||||||
@@ -160,7 +162,7 @@ export default class AccountStore implements IAccountStore {
|
|||||||
|
|
||||||
private removeFromAccountList(accounts: azdata.Account[], accountToRemove: azdata.AccountKey): AccountListOperationResult {
|
private removeFromAccountList(accounts: azdata.Account[], accountToRemove: azdata.AccountKey): AccountListOperationResult {
|
||||||
// Check if the entry exists
|
// Check if the entry exists
|
||||||
const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToRemove));
|
const match = accounts.findIndex(account => AccountStore.isSameAccountKey(account.key, accountToRemove));
|
||||||
if (match >= 0) {
|
if (match >= 0) {
|
||||||
// Account exists, remove it from the account list
|
// Account exists, remove it from the account list
|
||||||
accounts.splice(match, 1);
|
accounts.splice(match, 1);
|
||||||
@@ -177,7 +179,7 @@ export default class AccountStore implements IAccountStore {
|
|||||||
|
|
||||||
private updateAccountList(accounts: azdata.Account[], accountToUpdate: azdata.AccountKey, updateOperation: (account: azdata.Account) => void): AccountListOperationResult {
|
private updateAccountList(accounts: azdata.Account[], accountToUpdate: azdata.AccountKey, updateOperation: (account: azdata.Account) => void): AccountListOperationResult {
|
||||||
// Check if the entry exists
|
// Check if the entry exists
|
||||||
const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToUpdate));
|
const match = accounts.findIndex(account => AccountStore.isSameAccountKey(account.key, accountToUpdate));
|
||||||
if (match < 0) {
|
if (match < 0) {
|
||||||
// Account doesn't exist, we won't do anything
|
// Account doesn't exist, we won't do anything
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user