Skip to content

Commit cac3467

Browse files
FIx issue #25 where Microsoft.Extensions.Configuration.Binder version 7.0.0 or up was required for JSON configuration to work
1 parent ef22c18 commit cac3467

File tree

7 files changed

+106
-28
lines changed

7 files changed

+106
-28
lines changed

Changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog for Serilog.Enrichers.Sensitive
22

3+
## 1.7.2
4+
5+
- FIx issue where Microsoft.Extensions.Configuration.Binder version 7.0.0 or up was required for JSON configuration to work. [#25](https://github.com/serilog-contrib/Serilog.Enrichers.Sensitive/issues/25)
6+
37
## 1.7.1
48

59
- Support confguring masking operators using [Serilog.Settings.Configuration](https://github.com/serilog/serilog-settings-configuration) (mainly `appsettings.json`)

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<Version>1.7.1.0</Version>
3+
<Version>1.7.2.0</Version>
44
<Authors>Sander van Vliet, Huibert Jan Nieuwkamer, Scott Toberman</Authors>
55
<Company>Codenizer BV</Company>
66
<Copyright>2023 Sander van Vliet</Copyright>

src/Serilog.Enrichers.Sensitive/SensitiveDataEnricherOptions.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,19 @@ namespace Serilog.Enrichers.Sensitive
77
{
88
public class SensitiveDataEnricherOptions
99
{
10+
private string[] _operators;
11+
12+
public SensitiveDataEnricherOptions()
13+
{
14+
}
15+
1016
public SensitiveDataEnricherOptions(
1117
MaskingMode mode = MaskingMode.Globally,
1218
string maskValue = SensitiveDataEnricher.DefaultMaskValue,
1319
IEnumerable<string>? maskingOperators = null,
1420
IEnumerable<string>? maskProperties = null,
15-
IEnumerable<string>? excludeProperties = null)
21+
IEnumerable<string>? excludeProperties = null,
22+
IEnumerable<string>? operators = null)
1623
{
1724
Mode = mode;
1825
MaskValue = maskValue;
@@ -91,6 +98,22 @@ private static List<IMaskingOperator> ResolveMaskingOperators(IEnumerable<string
9198
/// </remarks>
9299
public List<string> ExcludeProperties { get; set; } = new List<string>();
93100

101+
public string[] Operators
102+
{
103+
get
104+
{
105+
return _operators;
106+
}
107+
set
108+
{
109+
_operators = value;
110+
if (value != null)
111+
{
112+
MaskingOperators = ResolveMaskingOperators(value);
113+
}
114+
}
115+
}
116+
94117
/// <summary>
95118
/// Applies the settings of this <c>SensitiveDataEnricherOptions</c> instance to another <c>SensitiveDataEnricherOptions</c> instance
96119
/// </summary>
@@ -102,6 +125,7 @@ public void Apply(SensitiveDataEnricherOptions other)
102125
other.MaskingOperators = MaskingOperators;
103126
other.MaskProperties = MaskProperties;
104127
other.ExcludeProperties = ExcludeProperties;
128+
other.Operators = Operators;
105129
}
106130
}
107131
}

test/Serilog.Enrichers.Sensitive.Tests.Unit/Serilog.Enrichers.Sensitive.Tests.Unit.csproj

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
<ItemGroup>
1313
<PackageReference Include="FluentAssertions" Version="6.7.0" />
14-
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
1514
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.2" />
1615
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
1716
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="7.0.0" />
@@ -36,4 +35,13 @@
3635
<ProjectReference Include="..\..\src\Serilog.Enrichers.Sensitive\Serilog.Enrichers.Sensitive.csproj" />
3736
</ItemGroup>
3837

38+
<ItemGroup>
39+
<None Update="enricher-operator-config.json">
40+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
41+
</None>
42+
<None Update="enricher-config.json">
43+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
44+
</None>
45+
</ItemGroup>
46+
3947
</Project>

test/Serilog.Enrichers.Sensitive.Tests.Unit/WhenConfiguringFromJson.cs

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System.IO;
2-
using System.Text;
3-
using Microsoft.Extensions.Configuration;
1+
using Microsoft.Extensions.Configuration;
42
using Serilog.Sinks.InMemory;
53
using Serilog.Sinks.InMemory.Assertions;
64
using Xunit;
@@ -12,28 +10,8 @@ public class WhenConfiguringFromJson
1210
[Fact]
1311
public void GivenJsonConfigurationWithMaskingOperator_MaskingOperatorIsUsedAndFullMessageIsMasked()
1412
{
15-
var jsonConfiguration = @"
16-
{
17-
""Serilog"": {
18-
""Using"": [ ""Serilog.Enrichers.Sensitive"" ],
19-
""Enrich"": [ {
20-
""Name"": ""WithSensitiveDataMasking"",
21-
""Args"": {
22-
""options"": {
23-
""MaskValue"": ""MASK FROM JSON"",
24-
""MaskingOperators"": [ ""Serilog.Enrichers.Sensitive.Tests.Unit.MyTestMaskingOperator, Serilog.Enrichers.Sensitive.Tests.Unit"" ]
25-
}
26-
}
27-
}]
28-
}
29-
}
30-
";
31-
var memoryStream = new MemoryStream();
32-
memoryStream.Write(Encoding.UTF8.GetBytes(jsonConfiguration));
33-
memoryStream.Seek(0, SeekOrigin.Begin);
34-
3513
var configuration = new ConfigurationBuilder()
36-
.AddJsonStream(memoryStream)
14+
.AddJsonFile("enricher-operator-config.json")
3715
.Build();
3816

3917
var inMemorySink = new InMemorySink();
@@ -50,12 +28,42 @@ public void GivenJsonConfigurationWithMaskingOperator_MaskingOperatorIsUsedAndFu
5028
.HaveMessage("MASK FROM JSON", "the custom masking operator matches everything")
5129
.Appearing().Once();
5230
}
31+
32+
[Fact]
33+
public void ReproCaseIssue25()
34+
{
35+
var configuration = new ConfigurationBuilder()
36+
.AddJsonFile("enricher-config.json")
37+
.Build();
38+
39+
var inMemorySink = new InMemorySink();
40+
41+
var logger = new LoggerConfiguration()
42+
.ReadFrom.Configuration(configuration)
43+
.WriteTo.Sink(inMemorySink)
44+
.CreateLogger();
45+
46+
logger.Information("A test message {secret}", "this is secret");
47+
48+
inMemorySink
49+
.Should()
50+
.HaveMessage("A test message {secret}")
51+
.Appearing().Once()
52+
.WithProperty("secret")
53+
.WithValue("**SECRET**");
54+
}
5355
}
5456

5557
public class MyTestMaskingOperator : IMaskingOperator
5658
{
59+
private readonly bool _flip;
60+
5761
public static IMaskingOperator Instance = new MyTestMaskingOperator();
58-
62+
63+
public MyTestMaskingOperator()
64+
{
65+
}
66+
5967
public MaskingResult Mask(string input, string mask)
6068
{
6169
return new MaskingResult
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"Serilog": {
3+
"Using": [
4+
"Serilog.Enrichers.Sensitive"
5+
],
6+
"Enrich": [
7+
{
8+
"Name": "WithSensitiveDataMasking",
9+
"Args": {
10+
"options": {
11+
"MaskValue": "**SECRET**",
12+
"MaskProperties": [
13+
"secret"
14+
]
15+
}
16+
}
17+
}
18+
]
19+
}
20+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"Serilog": {
3+
"Using": [ "Serilog.Enrichers.Sensitive" ],
4+
"Enrich": [ {
5+
"Name": "WithSensitiveDataMasking",
6+
"Args": {
7+
"options": {
8+
"MaskValue": "MASK FROM JSON",
9+
"Operators": [ "Serilog.Enrichers.Sensitive.Tests.Unit.MyTestMaskingOperator, Serilog.Enrichers.Sensitive.Tests.Unit" ]
10+
}
11+
}
12+
}]
13+
}
14+
}

0 commit comments

Comments
 (0)