src/Relecloud.Web.CallCenter/Services/RelecloudApiServices/RelecloudApiTicketImageService.cs (36 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All Rights Reserved. // Licensed under the MIT License. using Microsoft.Extensions.Options; using Microsoft.Identity.Web; using System.Net.Http.Headers; namespace Relecloud.Web.CallCenter.Services.RelecloudApiServices; public class RelecloudApiTicketImageService : ITicketImageService { private readonly HttpClient httpClient; private readonly IHttpContextAccessor httpContextAccessor; private readonly ITokenAcquisition tokenAcquisition; private readonly IOptions<RelecloudApiOptions> options; public RelecloudApiTicketImageService(IHttpContextAccessor httpContextAccessor, HttpClient httpClient, ITokenAcquisition tokenAcquisition, IOptions<RelecloudApiOptions> options) { this.httpContextAccessor = httpContextAccessor; this.httpClient = httpClient; this.tokenAcquisition = tokenAcquisition; this.options = options; } public async Task<Stream> GetTicketImagesAsync(string imageName) { await PrepareAuthenticatedClient(); var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, $"api/Image/{imageName}"); var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage); var responseMessage = await httpResponseMessage.Content.ReadAsStreamAsync(); return responseMessage; } private async Task PrepareAuthenticatedClient() { if (httpContextAccessor.HttpContext?.User?.Identity != null) { var scopes = new[] { options.Value.AttendeeScope ?? throw new ArgumentNullException(nameof(options.Value.AttendeeScope)) }; var accessToken = await tokenAcquisition.GetAccessTokenForUserAsync(scopes); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); } } }