Handle tenant failures (#8578)

* Handle tenant failures

* Change the comparison

* Fix issue
This commit is contained in:
Amir Omidi
2019-12-05 17:47:05 -08:00
committed by GitHub
parent 7201025a15
commit febf6b9e70

View File

@@ -248,13 +248,21 @@ export class AzureAccountProvider implements azdata.AccountProvider {
}); });
} }
private async getTenants(userId: string, homeTenant: string): Promise<Tenant[]> { private async getTenants(userId: string, homeTenant?: string): Promise<Tenant[]> {
const armToken = await this.getToken(userId, AzureAccountProvider.AadCommonTenant, this.metadata.settings.armResource.id); const armToken = await this.getToken(userId, AzureAccountProvider.AadCommonTenant, this.metadata.settings.armResource.id);
const tenantUri = url.resolve(this.metadata.settings.armResource.endpoint, 'tenants?api-version=2015-01-01'); const tenantUri = url.resolve(this.metadata.settings.armResource.endpoint, 'tenants?api-version=2015-01-01');
const armWebResponse: any[] = await this.makeWebRequest(armToken, tenantUri); const armWebResponse: any[] = await this.makeWebRequest(armToken, tenantUri);
const promises = armWebResponse.map(async (value: { tenantId: string }) => { const promises = armWebResponse.map(async (value: { tenantId: string }) => {
const graphToken = await this.getToken(userId, value.tenantId, this.metadata.settings.graphResource.id); let graphToken: TokenResponse;
try {
graphToken = await this.getToken(userId, value.tenantId, this.metadata.settings.graphResource.id);
} catch (ex) {
console.log(`Your authentication to the tenant ${value.tenantId} failed: ${ex}`);
return undefined;
}
let tenantDetailsUri = url.resolve(this.metadata.settings.graphResource.endpoint, value.tenantId + '/'); let tenantDetailsUri = url.resolve(this.metadata.settings.graphResource.endpoint, value.tenantId + '/');
tenantDetailsUri = url.resolve(tenantDetailsUri, 'tenantDetails?api-version=2013-04-05'); tenantDetailsUri = url.resolve(tenantDetailsUri, 'tenantDetails?api-version=2013-04-05');
const tenantDetails: any[] = await this.makeWebRequest(graphToken, tenantDetailsUri); const tenantDetails: any[] = await this.makeWebRequest(graphToken, tenantDetailsUri);
@@ -262,17 +270,25 @@ export class AzureAccountProvider implements azdata.AccountProvider {
return { return {
id: value.tenantId, id: value.tenantId,
userId: userId, userId: userId,
displayName: tenantDetailsUri.length && tenantDetails[0].displayName displayName: tenantDetails.length > 0 && tenantDetails[0].displayName
? tenantDetails[0].displayName ? tenantDetails[0].displayName
: localize('azureWorkAccountDisplayName', "Work or school account") : localize('azureWorkAccountDisplayName', "Work or school account")
} as Tenant; } as Tenant;
}); });
const tenants = await Promise.all(promises); let tenants = await Promise.all(promises);
const homeTenantIndex = tenants.findIndex(tenant => tenant.id === homeTenant);
if (homeTenantIndex >= 0) { tenants = tenants.filter(t => t !== undefined);
const homeTenant = tenants.splice(homeTenantIndex, 1); if (tenants.length === 0) {
tenants.unshift(homeTenant[0]); throw new Error(localize('azure.noTenants', "No azure tenants found. Failing..."));
}
if (homeTenant) {
const homeTenantIndex = tenants.findIndex(tenant => tenant.id === homeTenant);
if (homeTenantIndex >= 0) {
const homeTenant = tenants.splice(homeTenantIndex, 1);
tenants.unshift(homeTenant[0]);
}
} }
return tenants; return tenants;
} }
@@ -284,7 +300,7 @@ export class AzureAccountProvider implements azdata.AccountProvider {
private async handleAuthentication(code: string): Promise<void> { private async handleAuthentication(code: string): Promise<void> {
const token = await this.getTokenWithAuthCode(code, AzureAccountProvider.redirectUrlAAD); const token = await this.getTokenWithAuthCode(code, AzureAccountProvider.redirectUrlAAD);
const tenants = await this.getTenants(token.userId, token.userId); const tenants = await this.getTenants(token.userId, token.tenantId);
let identityProvider = token.identityProvider; let identityProvider = token.identityProvider;
if (identityProvider) { if (identityProvider) {
identityProvider = identityProvider.toLowerCase(); identityProvider = identityProvider.toLowerCase();