mirror of
https://github.com/bitwarden/server.git
synced 2025-02-01 23:31:41 +01:00
Revert TwoFactorProviders to be saved with numerical value (#1828)
* Add enum key resolver * Change tests to reflect changes
This commit is contained in:
parent
8ce4d56a91
commit
9e074bca49
@ -133,7 +133,7 @@ namespace Bit.Core.Entities
|
||||
public void SetTwoFactorProviders(Dictionary<TwoFactorProviderType, TwoFactorProvider> providers)
|
||||
{
|
||||
// When replacing with system.text remember to remove the extra serialization in WebAuthnTokenProvider.
|
||||
TwoFactorProviders = JsonHelpers.LegacySerialize(providers);
|
||||
TwoFactorProviders = JsonHelpers.LegacySerialize(providers, JsonHelpers.LegacyEnumKeyResolver);
|
||||
_twoFactorProviders = providers;
|
||||
}
|
||||
|
||||
|
@ -66,22 +66,42 @@ namespace Bit.Core.Utilities
|
||||
private const string LegacyMessage = "Usage of Newtonsoft.Json should be kept to a minimum and will further be removed when we move to .NET 6";
|
||||
|
||||
[Obsolete(LegacyMessage)]
|
||||
public static NS.JsonSerializerSettings LegacyDefault { get; } = new NS.JsonSerializerSettings();
|
||||
public static NS.JsonSerializerSettings LegacyEnumKeyResolver { get; } = new NS.JsonSerializerSettings
|
||||
{
|
||||
ContractResolver = new EnumKeyResolver<byte>(),
|
||||
};
|
||||
|
||||
[Obsolete(LegacyMessage)]
|
||||
public static string LegacySerialize(object value, NS.JsonSerializerSettings settings = null)
|
||||
{
|
||||
return NS.JsonConvert.SerializeObject(value, settings ?? LegacyDefault);
|
||||
return NS.JsonConvert.SerializeObject(value, settings);
|
||||
}
|
||||
|
||||
[Obsolete(LegacyMessage)]
|
||||
public static T LegacyDeserialize<T>(string value, NS.JsonSerializerSettings settings = null)
|
||||
{
|
||||
return NS.JsonConvert.DeserializeObject<T>(value, settings ?? LegacyDefault);
|
||||
return NS.JsonConvert.DeserializeObject<T>(value, settings);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class EnumKeyResolver<T> : NS.Serialization.DefaultContractResolver
|
||||
where T : struct
|
||||
{
|
||||
protected override NS.Serialization.JsonDictionaryContract CreateDictionaryContract(Type objectType)
|
||||
{
|
||||
var contract = base.CreateDictionaryContract(objectType);
|
||||
var keyType = contract.DictionaryKeyType;
|
||||
|
||||
if (keyType.BaseType == typeof(Enum))
|
||||
{
|
||||
contract.DictionaryKeyResolver = propName => ((T)Enum.Parse(keyType, propName)).ToString();
|
||||
}
|
||||
|
||||
return contract;
|
||||
}
|
||||
}
|
||||
|
||||
public class MsEpochConverter : JsonConverter<DateTime?>
|
||||
{
|
||||
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
|
@ -72,12 +72,12 @@ namespace Bit.Core.Test.Models.Tables
|
||||
using var jsonDocument = JsonDocument.Parse(user.TwoFactorProviders);
|
||||
var root = jsonDocument.RootElement;
|
||||
|
||||
var webAuthn = AssertHelper.AssertJsonProperty(root, "WebAuthn", JsonValueKind.Object);
|
||||
var webAuthn = AssertHelper.AssertJsonProperty(root, "7", JsonValueKind.Object);
|
||||
AssertHelper.AssertJsonProperty(webAuthn, "Enabled", JsonValueKind.True);
|
||||
var webMetaData = AssertHelper.AssertJsonProperty(webAuthn, "MetaData", JsonValueKind.Object);
|
||||
AssertHelper.AssertJsonProperty(webMetaData, "Item", JsonValueKind.String);
|
||||
|
||||
var email = AssertHelper.AssertJsonProperty(root, "Email", JsonValueKind.Object);
|
||||
var email = AssertHelper.AssertJsonProperty(root, "1", JsonValueKind.Object);
|
||||
AssertHelper.AssertJsonProperty(email, "Enabled", JsonValueKind.False);
|
||||
var emailMetaData = AssertHelper.AssertJsonProperty(email, "MetaData", JsonValueKind.Object);
|
||||
AssertHelper.AssertJsonProperty(emailMetaData, "Email", JsonValueKind.String);
|
||||
|
Loading…
Reference in New Issue
Block a user