using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; namespace Sony.Filtr.AppleMusic { public class AppleMusicAuthClientCredentialsHttpMessageHandler : DelegatingHandler { private readonly AppleMusicTokenGenerator _tokenGenerator; public AppleMusicAuthClientCredentialsHttpMessageHandler(AppleMusicTokenGenerator tokenGenerator, HttpMessageHandler httpMessageHandler): base(httpMessageHandler) { _tokenGenerator = tokenGenerator; } protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (request.Headers.Authorization == null) { request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", GetJwtToken()); } var response = await base.SendAsync(request, cancellationToken); return response; } private string _jwtTokenString; private string GetJwtToken() { if (_jwtTokenString != null) return _jwtTokenString; _jwtTokenString = _tokenGenerator.GetJwtToken(); return _jwtTokenString; } } }