diff --git a/src/Icons/Controllers/IconsController.cs b/src/Icons/Controllers/IconsController.cs index c43759d13f..8dae7a4e2b 100644 --- a/src/Icons/Controllers/IconsController.cs +++ b/src/Icons/Controllers/IconsController.cs @@ -4,6 +4,7 @@ using Bit.Icons.Models; using Bit.Icons.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Logging; namespace Bit.Icons.Controllers { @@ -13,17 +14,20 @@ namespace Bit.Icons.Controllers private readonly IMemoryCache _memoryCache; private readonly IDomainMappingService _domainMappingService; private readonly IIconFetchingService _iconFetchingService; + private readonly ILogger _logger; private readonly IconsSettings _iconsSettings; public IconsController( IMemoryCache memoryCache, IDomainMappingService domainMappingService, IIconFetchingService iconFetchingService, + ILogger logger, IconsSettings iconsSettings) { _memoryCache = memoryCache; _domainMappingService = domainMappingService; _iconFetchingService = iconFetchingService; + _logger = logger; _iconsSettings = iconsSettings; } @@ -54,6 +58,7 @@ namespace Bit.Icons.Controllers var result = await _iconFetchingService.GetIconAsync(domain); if(result == null) { + _logger.LogInformation("Null result returned."); icon = null; } else @@ -64,6 +69,7 @@ namespace Bit.Icons.Controllers // Only cache not found and smaller images (<= 50kb) if(_iconsSettings.CacheEnabled && (icon == null || icon.Image.Length <= 50012)) { + _logger.LogInformation("Cache the icon."); _memoryCache.Set(mappedDomain, icon, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = new TimeSpan(_iconsSettings.CacheHours, 0, 0), diff --git a/src/Icons/Services/IconFetchingService.cs b/src/Icons/Services/IconFetchingService.cs index b2accce268..9e1c854773 100644 --- a/src/Icons/Services/IconFetchingService.cs +++ b/src/Icons/Services/IconFetchingService.cs @@ -7,6 +7,7 @@ using System.Net.Http; using System.Threading.Tasks; using Bit.Icons.Models; using AngleSharp.Parser.Html; +using Microsoft.Extensions.Logging; namespace Bit.Icons.Services { @@ -29,9 +30,11 @@ namespace Bit.Icons.Services private readonly HashSet _allowedMediaTypes; private readonly HttpClient _httpClient; + private readonly ILogger _logger; - public IconFetchingService() + public IconFetchingService(ILogger logger) { + _logger = logger; _allowedMediaTypes = new HashSet { _pngMediaType, @@ -52,6 +55,7 @@ namespace Bit.Icons.Services { if(!Uri.TryCreate($"https://{domain}", UriKind.Absolute, out var parsedHttpsUri)) { + _logger.LogInformation("Bad domain."); return null; } @@ -87,6 +91,7 @@ namespace Bit.Icons.Services if(response?.Content == null || !response.IsSuccessStatusCode) { Cleanup(response); + _logger.LogInformation("Couldn't load a website: {0}.", response.StatusCode); return null; } @@ -98,6 +103,7 @@ namespace Bit.Icons.Services uri = response.RequestMessage.RequestUri; if(document.DocumentElement == null) { + _logger.LogInformation("No DocumentElement."); return null; } @@ -198,6 +204,7 @@ namespace Bit.Icons.Services } else { + _logger.LogInformation("No favicon.ico found."); return null; } }