diff --git a/src/Tgstation.Server.Host/Security/IdentityCache.cs b/src/Tgstation.Server.Host/Security/IdentityCache.cs index 81850ab4f2..9ba37398b8 100644 --- a/src/Tgstation.Server.Host/Security/IdentityCache.cs +++ b/src/Tgstation.Server.Host/Security/IdentityCache.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Extensions.Logging; +using System; using System.Collections.Generic; using Tgstation.Server.Host.Models; @@ -7,16 +8,30 @@ namespace Tgstation.Server.Host.Security /// sealed class IdentityCache : IIdentityCache, IDisposable { + /// + /// The for the + /// + readonly ILogger logger; + + /// + /// The map of s to s + /// readonly Dictionary cachedIdentities; - public IdentityCache() + /// + /// Construct an + /// + public IdentityCache(ILogger logger) { + this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); + cachedIdentities = new Dictionary(); } /// public void Dispose() { + logger.LogTrace("Disposing..."); foreach (var I in cachedIdentities) I.Value.Dispose(); } @@ -30,10 +45,16 @@ namespace Tgstation.Server.Host.Security throw new ArgumentNullException(nameof(systemIdentity)); lock (cachedIdentities) { + logger.LogDebug("Caching system identity {0} of user {1}", systemIdentity.Uid, user.Id); + if (cachedIdentities.TryGetValue(user.Id, out var identCache)) + { + logger.LogTrace("Expiring previously cached identity..."); identCache.Dispose(); //also clears it out + } identCache = new IdentityCacheObject(systemIdentity.Clone(), () => { + logger.LogDebug("Expiring system identity cache for user {1}", systemIdentity.Uid, user.Id); lock (cachedIdentities) cachedIdentities.Remove(user.Id); }, expiry);