public virtual void AnonymizeData <TEntity>(TEntity entity, Expression <Func <TEntity, object> > expression, IdentifierDataType type, Language language = null) where TEntity : BaseEntity { Guard.NotNull(entity, nameof(entity)); Guard.NotNull(expression, nameof(expression)); var originalValue = expression.Compile().Invoke(entity); object maskedValue = null; if (originalValue is DateTime d) { maskedValue = MinDate; } else if (originalValue is string s) { if (s.IsEmpty()) { return; } language = language ?? (entity as Customer)?.GetLanguage(); switch (type) { case IdentifierDataType.Address: case IdentifierDataType.Name: case IdentifierDataType.Text: maskedValue = T("Gdpr.DeletedText", language.Id).Text; break; case IdentifierDataType.LongText: maskedValue = T("Gdpr.DeletedLongText", language.Id).Text; break; case IdentifierDataType.EmailAddress: //maskedValue = s.Hash(Encoding.ASCII, true) + "@anony.mous"; maskedValue = HashCodeCombiner.Start() .Add(entity.GetHashCode()) .Add(s) .CombinedHashString + "@anony.mous"; break; case IdentifierDataType.Url: maskedValue = "https://anony.mous"; break; case IdentifierDataType.IpAddress: maskedValue = AnonymizeIpAddress(s); break; case IdentifierDataType.UserName: maskedValue = T("Gdpr.Anonymous", language.Id).Text.ToLower(); break; case IdentifierDataType.PhoneNumber: maskedValue = "555-00000"; break; case IdentifierDataType.PostalCode: maskedValue = "00000"; break; case IdentifierDataType.DateTime: maskedValue = MinDate.ToString(CultureInfo.InvariantCulture); break; } } if (maskedValue != null) { var pi = expression.ExtractPropertyInfo(); pi.SetValue(entity, maskedValue); } }
/// <summary> /// TODO /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <param name="expression"></param> /// <param name="type"></param> public void AnonymizeData <TEntity>(TEntity entity, Expression <Func <TEntity, object> > expression, IdentifierDataType type, Language language = null) where TEntity : BaseEntity { _gdprTool.AnonymizeData(entity, expression, type, language); }