mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Tenant filter fix (#11411)
* Fix tenant filter * Test for the azure filter feature
This commit is contained in:
@@ -435,7 +435,7 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async openConsentDialog(tenant: Tenant, resourceId: string): Promise<boolean> {
|
public async openConsentDialog(tenant: Tenant, resourceId: string): Promise<boolean> {
|
||||||
if (!tenant.displayName && !tenant.id) {
|
if (!tenant.displayName && !tenant.id) {
|
||||||
throw new Error('Tenant did not have display name or id');
|
throw new Error('Tenant did not have display name or id');
|
||||||
}
|
}
|
||||||
@@ -451,18 +451,18 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// The user wants to ignore this tenant.
|
// The user wants to ignore this tenant.
|
||||||
if (getTenantConfigurationSet().has(tenant?.displayName ?? tenant?.id)) {
|
if (getTenantConfigurationSet().has(tenant.id)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateTenantConfigurationSet = (set: Set<string>): void => {
|
const updateTenantConfigurationSet = async (set: Set<string>): Promise<void> => {
|
||||||
const configuration = vscode.workspace.getConfiguration('azure.tenant.config');
|
const configuration = vscode.workspace.getConfiguration('azure.tenant.config');
|
||||||
configuration.update('filter', Array.from(set), vscode.ConfigurationTarget.Global);
|
await configuration.update('filter', Array.from(set), vscode.ConfigurationTarget.Global);
|
||||||
};
|
};
|
||||||
|
|
||||||
interface ConsentMessageItem extends vscode.MessageItem {
|
interface ConsentMessageItem extends vscode.MessageItem {
|
||||||
booleanResult: boolean;
|
booleanResult: boolean;
|
||||||
action?: (tenantId: string) => void;
|
action?: (tenantId: string) => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const openItem: ConsentMessageItem = {
|
const openItem: ConsentMessageItem = {
|
||||||
@@ -479,10 +479,10 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
const dontAskAgainItem: ConsentMessageItem = {
|
const dontAskAgainItem: ConsentMessageItem = {
|
||||||
title: localize('azurecore.consentDialog.ignore', "Ignore Tenant"),
|
title: localize('azurecore.consentDialog.ignore', "Ignore Tenant"),
|
||||||
booleanResult: false,
|
booleanResult: false,
|
||||||
action: (tenantId: string) => {
|
action: async (tenantId: string) => {
|
||||||
let set = getTenantConfigurationSet();
|
let set = getTenantConfigurationSet();
|
||||||
set.add(tenantId);
|
set.add(tenantId);
|
||||||
updateTenantConfigurationSet(set);
|
await updateTenantConfigurationSet(set);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -490,7 +490,7 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
const result = await vscode.window.showInformationMessage(messageBody, { modal: true }, openItem, closeItem, dontAskAgainItem);
|
const result = await vscode.window.showInformationMessage(messageBody, { modal: true }, openItem, closeItem, dontAskAgainItem);
|
||||||
|
|
||||||
if (result.action) {
|
if (result.action) {
|
||||||
result.action(tenant.id);
|
await result.action(tenant.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result.booleanResult;
|
return result.booleanResult;
|
||||||
|
|||||||
@@ -6,10 +6,11 @@
|
|||||||
import * as should from 'should';
|
import * as should from 'should';
|
||||||
import * as os from 'os';
|
import * as os from 'os';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
|
import * as vscode from 'vscode';
|
||||||
|
|
||||||
import { PromptFailedResult, AccountKey } from 'azdata';
|
import { PromptFailedResult, AccountKey } from 'azdata';
|
||||||
import { AzureAuth, AccessToken, RefreshToken, TokenClaims, TokenRefreshResponse } from '../../../account-provider/auths/azureAuth';
|
import { AzureAuth, AccessToken, RefreshToken, TokenClaims, TokenRefreshResponse } from '../../../account-provider/auths/azureAuth';
|
||||||
import { AzureAccount, AzureAuthType, Deferred } from '../../../account-provider/interfaces';
|
import { AzureAccount, AzureAuthType, Deferred, Tenant } from '../../../account-provider/interfaces';
|
||||||
import providerSettings from '../../../account-provider/providerSettings';
|
import providerSettings from '../../../account-provider/providerSettings';
|
||||||
import { SimpleTokenCache } from '../../../account-provider/simpleTokenCache';
|
import { SimpleTokenCache } from '../../../account-provider/simpleTokenCache';
|
||||||
import { CredentialsTestProvider } from '../../stubs/credentialsTestProvider';
|
import { CredentialsTestProvider } from '../../stubs/credentialsTestProvider';
|
||||||
@@ -48,6 +49,11 @@ const refreshToken: RefreshToken = {
|
|||||||
const resourceId = 'resource';
|
const resourceId = 'resource';
|
||||||
const tenantId = 'tenant';
|
const tenantId = 'tenant';
|
||||||
|
|
||||||
|
const tenant: Tenant = {
|
||||||
|
id: tenantId,
|
||||||
|
displayName: 'common'
|
||||||
|
};
|
||||||
|
|
||||||
// These tests don't work on Linux systems because gnome-keyring doesn't like running on headless machines.
|
// These tests don't work on Linux systems because gnome-keyring doesn't like running on headless machines.
|
||||||
describe('AccountProvider.AzureAuth', function (): void {
|
describe('AccountProvider.AzureAuth', function (): void {
|
||||||
beforeEach(async function (): Promise<void> {
|
beforeEach(async function (): Promise<void> {
|
||||||
@@ -96,4 +102,16 @@ describe('AccountProvider.AzureAuth', function (): void {
|
|||||||
should(account.key.accountId).be.equal('someKey');
|
should(account.key.accountId).be.equal('someKey');
|
||||||
should(account.properties.isMsAccount).be.equal(true);
|
should(account.properties.isMsAccount).be.equal(true);
|
||||||
});
|
});
|
||||||
|
it('Should handle ignored tenants', async function (): Promise<void> {
|
||||||
|
// Don't sit on the await openConsentDialog if test is failing
|
||||||
|
this.timeout(3000);
|
||||||
|
|
||||||
|
const configuration = vscode.workspace.getConfiguration('azure.tenant.config');
|
||||||
|
const values = [tenantId];
|
||||||
|
|
||||||
|
await configuration.update('filter', values, vscode.ConfigurationTarget.Global);
|
||||||
|
const x = await baseAuth.openConsentDialog(tenant, resourceId);
|
||||||
|
|
||||||
|
should(x).be.false();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user