From 836f7a311ebc39779c884d31fa57b1ec5ffd6947 Mon Sep 17 00:00:00 2001 From: Leendert de Borst <6917405+lanedirt@users.noreply.github.com> Date: Tue, 9 Jul 2024 12:54:49 -0700 Subject: [PATCH] Add timeout to favicon extraction (#95) (#96) --- .../Services/CredentialService.cs | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/AliasVault.WebApp/Services/CredentialService.cs b/src/AliasVault.WebApp/Services/CredentialService.cs index 6c97e3e53..35b1c9d32 100644 --- a/src/AliasVault.WebApp/Services/CredentialService.cs +++ b/src/AliasVault.WebApp/Services/CredentialService.cs @@ -275,11 +275,24 @@ public class CredentialService(HttpClient httpClient, DbService dbService) var url = credentialObject.Service.Url; if (url != null && !string.IsNullOrEmpty(url) && url.Contains("http")) { - // Request favicon from from service URL via WebApi - var apiReturn = await httpClient.GetFromJsonAsync("api/v1/Favicon/Extract?url=" + url); - if (apiReturn != null && apiReturn.Image != null) + // Set timeout to 3 seconds for favicon extraction. + var cts = new CancellationTokenSource(TimeSpan.FromSeconds(3)); + + try { - credentialObject.Service.Logo = apiReturn.Image; + // If an exception occurs during favicon extraction, we will ignore it and continue execution. + var apiReturn = await httpClient.GetFromJsonAsync( + "api/v1/Favicon/Extract?url=" + url, + cts.Token); + + if (apiReturn != null && apiReturn.Image != null) + { + credentialObject.Service.Logo = apiReturn.Image; + } + } + finally + { + cts.Dispose(); } } }