using System; using System.Threading.Tasks; using NuGet.Common; using NuGet.Protocol.Plugins; using ILogger = JetBrains.TeamCity.NuGet.Logging.ILogger; namespace JetBrains.TeamCity.NuGet.RequestHandlers { /// /// Handles a and replies with credentials. /// internal class GetAuthenticationCredentialsRequestHandler : RequestHandlerBase { private readonly ICredentialProvider _credentialProvider; /// /// Initializes a new instance of the class. /// /// A to use for logging. /// An containing credential provider. public GetAuthenticationCredentialsRequestHandler(ILogger logger, ICredentialProvider credentialProvider) : base(logger) { _credentialProvider = credentialProvider ?? throw new ArgumentNullException(nameof(credentialProvider)); } public override Task HandleRequestAsync(GetAuthenticationCredentialsRequest request) { try { var response = _credentialProvider.HandleRequest(request); if (response != null && response.ResponseCode == MessageResponseCode.Success) { return Task.FromResult(response); } } catch (Exception e) { Logger.Log(LogLevel.Error, $"Failed to acquire credentials: {e}"); return Task.FromResult(new GetAuthenticationCredentialsResponse( username: null, password: null, message: e.Message, authenticationTypes: null, responseCode: MessageResponseCode.Error)); } return Task.FromResult(new GetAuthenticationCredentialsResponse( username: null, password: null, message: null, authenticationTypes: null, responseCode: MessageResponseCode.NotFound)); } } }