private static async Task MainInternal()

in nuget-extensions/nuget-plugin/Program.cs [50:128]


    private static async Task<int> MainInternal(CancellationTokenSource tokenSource, MultiLogger multiLogger, string[] args)
    {
      var credentialProvider = new TeamCityCredentialProvider(multiLogger);
      var sdkInfo = new SdkInfo();
      var requestHandlers = new RequestHandlerCollection
                            {
                              {
                                MessageMethod.GetAuthenticationCredentials,
                                new GetAuthenticationCredentialsRequestHandler(multiLogger, credentialProvider)
                              },
                              {
                                MessageMethod.GetOperationClaims,
                                new GetOperationClaimsRequestHandler(multiLogger, credentialProvider, sdkInfo)
                              },
                              {
                                MessageMethod.SetLogLevel,
                                new SetLogLevelHandler(multiLogger)
                              },
                              {
                                MessageMethod.Initialize,
                                new InitializeRequestHandler(multiLogger)
                              },
                              {
                                MessageMethod.SetCredentials,
                                new SetCredentialsRequestHandler(multiLogger)
                              }
                            };

      if (String.Equals(args.SingleOrDefault(), "-plugin", StringComparison.OrdinalIgnoreCase))
      {
        multiLogger.Log(LogLevel.Verbose, "Running in plug-in mode");

        try
        {
          using (IPlugin plugin = await PluginFactory
            .CreateFromCurrentProcessAsync(requestHandlers, ConnectionOptions.CreateDefault(), CancellationToken.None)
            .ConfigureAwait(continueOnCapturedContext: false))
          {
            multiLogger.Add(new PluginConnectionLogger(plugin.Connection));
            await RunNuGetPluginsAsync(plugin, multiLogger, tokenSource.Token).ConfigureAwait(continueOnCapturedContext: false);
          }
        }
        catch (OperationCanceledException e)
        {
          // Multiple source restoration. Request will be cancelled if a package has been successfully restored from another source
          multiLogger.Log(LogLevel.Verbose, $"Request to credential provider was cancelled. Message: {e.Message}");
        }

        return 0;
      }

      if (requestHandlers.TryGet(MessageMethod.GetAuthenticationCredentials, out IRequestHandler requestHandler) &&
          requestHandler is GetAuthenticationCredentialsRequestHandler getAuthenticationCredentialsRequestHandler)
      {
        multiLogger.Log(LogLevel.Verbose, "Running in stand-alone mode");

        if (args.Length == 0)
        {
          Console.WriteLine("Usage: CredentialProvider.TeamCity.exe <NuGetFeedUrl>");
          return 1;
        }

        var request = new GetAuthenticationCredentialsRequest(
          uri: new Uri(args[0]),
          isRetry: false,
          isNonInteractive: true,
          canShowDialog: false
        );
        var response = getAuthenticationCredentialsRequestHandler.HandleRequestAsync(request).GetAwaiter().GetResult();

        Console.WriteLine(response?.Username);
        Console.WriteLine(response?.Password);
        Console.WriteLine(response?.Password.ToJsonWebTokenString());

        return 0;
      }

      return -1;
    }