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);