| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | 
							- diff --git a/src/vs/workbench/contrib/commands/common/commands.contribution.ts b/src/vs/workbench/contrib/commands/common/commands.contribution.ts
 
- index 3fd6b59..97a0e04 100644
 
- --- a/src/vs/workbench/contrib/commands/common/commands.contribution.ts
 
- +++ b/src/vs/workbench/contrib/commands/common/commands.contribution.ts
 
- @@ -9,2 +9,3 @@ import { Action2, registerAction2 } from '../../../../platform/actions/common/ac
 
-  import { ICommandService } from '../../../../platform/commands/common/commands.js';
 
- +import { ConfigurationScope, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js';
 
-  import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
 
- @@ -12,2 +13,3 @@ import { ILogService } from '../../../../platform/log/common/log.js';
 
-  import { INotificationService } from '../../../../platform/notification/common/notification.js';
 
- +import { Registry } from '../../../../platform/registry/common/platform.js';
 
-  
 
- @@ -156,2 +158,30 @@ class RunCommands extends Action2 {
 
-  
 
- +Registry.as<IConfigurationRegistry>('base.contributions.configuration')
 
- +	.registerConfiguration({
 
- +		id: 'commands',
 
- +		order: 30,
 
- +		title: nls.localize('commandsConfigurationTitle', "Commands"),
 
- +		type: 'object',
 
- +		properties: {
 
- +			'commands.filters': {
 
- +				additionalProperties: {
 
- +					type: 'string',
 
- +					enum: ['ask', 'off', 'on'],
 
- +					enumDescriptions: [
 
- +						nls.localize('commands.filters.ask', 'Ask the user before executing the command.'),
 
- +						nls.localize('commands.filters.off', 'The command is never authorized.'),
 
- +						nls.localize('commands.filters.on', 'The command is always authorized.'),
 
- +					],
 
- +					description: nls.localize('commands.filters.value', "Authorization for the command."),
 
- +				},
 
- +				description: nls.localize('commands.filters', "Controls which commands are authorized to be executed."),
 
- +				default: {
 
- +					'workbench.action.terminal.newLocal': 'off'
 
- +				},
 
- +				scope: ConfigurationScope.APPLICATION,
 
- +				tags: []
 
- +			},
 
- +		}
 
- +	});
 
- +
 
-  registerAction2(RunCommands);
 
- diff --git a/src/vs/workbench/services/commands/common/commandService.ts b/src/vs/workbench/services/commands/common/commandService.ts
 
- index 93d1631..0533cf0 100644
 
- --- a/src/vs/workbench/services/commands/common/commandService.ts
 
- +++ b/src/vs/workbench/services/commands/common/commandService.ts
 
- @@ -8,3 +8,6 @@ import { Emitter, Event } from '../../../../base/common/event.js';
 
-  import { Disposable } from '../../../../base/common/lifecycle.js';
 
- +import Severity from '../../../../base/common/severity.js';
 
-  import { CommandsRegistry, ICommandEvent, ICommandService } from '../../../../platform/commands/common/commands.js';
 
- +import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
 
- +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js';
 
-  import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';
 
- @@ -20,2 +23,3 @@ export class CommandService extends Disposable implements ICommandService {
 
-  	private _starActivation: CancelablePromise<void> | null;
 
- +	private _commandFilters: Record<string, "ask" | "off" | "on">
 
-  
 
- @@ -30,3 +34,5 @@ export class CommandService extends Disposable implements ICommandService {
 
-  		@IExtensionService private readonly _extensionService: IExtensionService,
 
- -		@ILogService private readonly _logService: ILogService
 
- +		@ILogService private readonly _logService: ILogService,
 
- +		@IConfigurationService private readonly _configurationService: IConfigurationService,
 
- +		@IDialogService private readonly _dialogService: IDialogService
 
-  	) {
 
- @@ -35,2 +41,9 @@ export class CommandService extends Disposable implements ICommandService {
 
-  		this._starActivation = null;
 
- +		this._commandFilters = this._configurationService.getValue('commands.filters') ?? { 'workbench.action.terminal.newLocal': 'off' };
 
- +
 
- +		this._configurationService.onDidChangeConfiguration(async (event) => {
 
- +			if (event.affectsConfiguration('commands.filters')) {
 
- +				this._commandFilters = this._configurationService.getValue('commands.filters') ?? { 'workbench.action.terminal.newLocal': 'off' };
 
- +			}
 
- +		})
 
-  	}
 
- @@ -57,2 +70,27 @@ export class CommandService extends Disposable implements ICommandService {
 
-  
 
- +		const filter = this._commandFilters[id];
 
- +		if (filter === 'off') {
 
- +			return Promise.reject(new Error(`command '${id}' not authorized`));
 
- +		}
 
- +		else if (filter === 'ask') {
 
- +			const { result } = await this._dialogService.prompt({
 
- +				type: Severity.Error,
 
- +				message: `Are you sure you want to execute the command "${id}"?`,
 
- +				buttons: [
 
- +					{
 
- +						label: 'Yes',
 
- +						run: () => true
 
- +					},
 
- +					{
 
- +						label: 'No',
 
- +						run: () => false
 
- +					}
 
- +				],
 
- +			});
 
- +
 
- +			if (!result) {
 
- +				return Promise.reject(new Error(`command '${id}' not authorized`));
 
- +			}
 
- +		}
 
- +
 
-  		if (commandIsRegistered) {
 
- diff --git a/src/vs/workbench/services/commands/test/common/commandService.test.ts b/src/vs/workbench/services/commands/test/common/commandService.test.ts
 
- index ca3be11..fb456a3 100644
 
- --- a/src/vs/workbench/services/commands/test/common/commandService.test.ts
 
- +++ b/src/vs/workbench/services/commands/test/common/commandService.test.ts
 
- @@ -12,2 +12,7 @@ import { NullExtensionService } from '../../../extensions/common/extensions.js';
 
-  import { CommandService } from '../../common/commandService.js';
 
- +import { NullPolicyService } from '../../../../../platform/policy/common/policy.js';
 
- +import { FileService } from '../../../../../platform/files/common/fileService.js';
 
- +import { URI } from '../../../../../base/common/uri.js';
 
- +import { ConfigurationService } from '../../../../../platform/configuration/common/configurationService.js';
 
- +import { TestDialogService } from '../../../../../platform/dialogs/test/common/testDialogService.js';
 
-  
 
- @@ -16,4 +21,16 @@ suite('CommandService', function () {
 
-  	const store = ensureNoDisposablesAreLeakedInTestSuite();
 
- +	const testDisposables = ensureNoDisposablesAreLeakedInTestSuite();
 
- +	let nullConfigService: ConfigurationService
 
-  
 
-  	setup(function () {
 
- +		const nullPolicyService = new NullPolicyService();
 
- +		const nullLogService = testDisposables.add(new NullLogService());
 
- +		const nullFileService = testDisposables.add(new FileService(nullLogService));
 
- +		nullConfigService = testDisposables.add(new ConfigurationService(
 
- +			URI.file('/config.json'),
 
- +			nullFileService,
 
- +			nullPolicyService,
 
- +			nullLogService,
 
- +		));
 
- +
 
-  		store.add(CommandsRegistry.registerCommand('foo', function () { }));
 
- @@ -30,3 +47,3 @@ suite('CommandService', function () {
 
-  			}
 
- -		}, new NullLogService()));
 
- +		}, new NullLogService(), nullConfigService, new TestDialogService()));
 
-  
 
- @@ -50,3 +67,3 @@ suite('CommandService', function () {
 
-  
 
- -		const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService()));
 
- +		const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService(), nullConfigService, new TestDialogService()));
 
-  
 
- @@ -68,3 +85,3 @@ suite('CommandService', function () {
 
-  			}
 
- -		}, new NullLogService()));
 
- +		}, new NullLogService(), nullConfigService, new TestDialogService()));
 
-  
 
- @@ -85,3 +102,3 @@ suite('CommandService', function () {
 
-  			}
 
- -		}, new NullLogService()));
 
- +		}, new NullLogService(), nullConfigService, new TestDialogService()));
 
-  
 
- @@ -125,3 +142,3 @@ suite('CommandService', function () {
 
-  
 
- -		}, new NullLogService()));
 
- +		}, new NullLogService(), nullConfigService, new TestDialogService()));
 
-  
 
- @@ -166,3 +183,3 @@ suite('CommandService', function () {
 
-  
 
- -		}, new NullLogService()));
 
- +		}, new NullLogService(), nullConfigService, new TestDialogService()));
 
-  
 
- @@ -187,3 +204,3 @@ suite('CommandService', function () {
 
-  		};
 
- -		const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService()));
 
- +		const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService(), nullConfigService, new TestDialogService()));
 
-  
 
 
  |