public async connectRegistry()

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);
    }