public async Task <Authorization> CallAsync()
        {
            Credential registryCredential = await retrieveTargetRegistryCredentialsStep.GetFuture().ConfigureAwait(false);

            string registry = buildConfiguration.GetTargetImageConfiguration().GetImageRegistry();

            try
            {
                using (progressEventDispatcherFactory.Create("authenticating push to " + registry, 1))
                    using (new TimerEventDispatcher(
                               buildConfiguration.GetEventHandlers(), string.Format(CultureInfo.CurrentCulture, DESCRIPTION, registry)))
                    {
                        RegistryAuthenticator registryAuthenticator =
                            await buildConfiguration
                            .NewTargetImageRegistryClientFactory()
                            .NewRegistryClient()
                            .GetRegistryAuthenticatorAsync().ConfigureAwait(false);

                        if (registryAuthenticator != null)
                        {
                            return(await registryAuthenticator.AuthenticatePushAsync(registryCredential).ConfigureAwait(false));
                        }
                    }
            }
            catch (InsecureRegistryException)
            {
                // Cannot skip certificate validation or use HTTP; fall through.
            }

            return(registryCredential?.IsOAuth2RefreshToken() != false
                ? null
                : Authorization.FromBasicCredentials(
                       registryCredential.GetUsername(), registryCredential.GetPassword()));
        }
 public async Task TestUserAgentAsync()
 {
     using (TestWebServer server = new TestWebServer(false))
     {
         try
         {
             RegistryAuthenticator authenticator =
                 RegistryAuthenticator.FromAuthenticationMethod(
                     new AuthenticationHeaderValue("Bearer", "realm=\"" + server.GetAddressAndPort() + "\""),
                     registryEndpointRequestProperties,
                     new[] { new ProductInfoHeaderValue(new ProductHeaderValue("Competent-Agent")) });
             await authenticator.AuthenticatePushAsync(null).ConfigureAwait(false);
         }
         catch (RegistryAuthenticationFailedException)
         {
             // Doesn't matter if auth fails. We only examine what we sent.
         }
         Assert.That(server.GetInputRead(), Does.Contain("User-Agent: Competent-Agent"));
     }
 }