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