in src/tree/registries/RegistriesTreeItem.ts [79:133]
public async connectRegistry(context: IActionContext, provider?: IRegistryProvider, url?: string): Promise<void> {
let picks: IAzureQuickPickItem<IRegistryProvider | undefined>[] = getRegistryProviders().map(rp => {
return {
label: rp.label,
description: rp.description,
detail: rp.detail,
data: rp
};
});
picks = picks.sort((p1, p2) => p1.label.localeCompare(p2.label));
const placeHolder: string = localize('vscode-docker.tree.registries.selectProvider', 'Select the provider for your registry');
provider = provider ?? (await context.ui.showQuickPick(picks, { placeHolder, suppressPersistence: true })).data;
if (!provider) {
throw new UserCancelledError();
} else if (provider.onlyOneAllowed && this._cachedProviders.find(c => c.id === provider.id)) {
// Don't wait, no input to wait for anyway
void context.ui.showWarningMessage(localize('vscode-docker.tree.registries.providerConnected', 'The "{0}" registry provider is already connected.', provider.label));
throw new UserCancelledError('registryProviderAlreadyAdded');
}
context.telemetry.properties.providerId = provider.id;
context.telemetry.properties.providerApi = provider.api;
const cachedProvider: ICachedRegistryProvider = {
id: provider.id,
api: provider.api,
};
if (provider.connectWizardOptions) {
const existingProviders: ICachedRegistryProvider[] = this._cachedProviders.filter(rp => rp.id === provider.id);
const wizardContext: IConnectRegistryWizardContext = { ...context, ...provider.connectWizardOptions, url, existingProviders };
const wizard = new AzureWizard(wizardContext, {
title: provider.connectWizardOptions.wizardTitle,
promptSteps: [
new RegistryUrlStep(),
new RegistryUsernameStep(),
new RegistryPasswordStep()
]
});
await wizard.prompt();
await wizard.execute();
cachedProvider.url = wizardContext.url;
cachedProvider.username = wizardContext.username;
if (wizardContext.secret && provider.persistAuth) {
await provider.persistAuth(cachedProvider, wizardContext.secret);
}
}
this._cachedProviders.push(cachedProvider);
await this.saveCachedProviders(context);
}