diff --git a/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs b/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs index 9ddd7958d2..f78abdfd13 100644 --- a/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs +++ b/src/Core/Auth/Identity/TemporaryDuoWebV4SDKService.cs @@ -55,7 +55,10 @@ public class TemporaryDuoWebV4SDKService : ITemporaryDuoWebV4SDKService { if (!HasProperMetaData(provider)) { - return null; + if (!HasProperMetaData_SDKV2(provider)) + { + return null; + } } @@ -82,7 +85,10 @@ public class TemporaryDuoWebV4SDKService : ITemporaryDuoWebV4SDKService { if (!HasProperMetaData(provider)) { - return false; + if (!HasProperMetaData_SDKV2(provider)) + { + return false; + } } var duoClient = await BuildDuoClientAsync(provider); @@ -114,6 +120,29 @@ public class TemporaryDuoWebV4SDKService : ITemporaryDuoWebV4SDKService provider.MetaData.ContainsKey("ClientSecret") && provider.MetaData.ContainsKey("Host"); } + /// + /// Checks if the metadata for SDK V2 is present. + /// Transitional method to support Duo during v4 database rename + /// + /// The TwoFactorProvider object to check. + /// True if the provider has the proper metadata; otherwise, false. + private bool HasProperMetaData_SDKV2(TwoFactorProvider provider) + { + if (provider?.MetaData != null && + provider.MetaData.TryGetValue("IKey", out var iKey) && + provider.MetaData.TryGetValue("SKey", out var sKey) && + provider.MetaData.ContainsKey("Host")) + { + provider.MetaData.Add("ClientId", iKey); + provider.MetaData.Add("ClientSecret", sKey); + return true; + } + else + { + return false; + } + } + /// /// Generates a Duo.Client object for use with Duo SDK v4. This combines the health check and the client generation ///