public void VerifyWhenMaskingFieldAsPayloadFails_ValueIsSetToDefaultMaskingFailureValue() { var apiLog = new ApiLog(); var filter = new StreamLogMaskingFilter(new List <JsonPayloadMaskingRule> { new JsonPayloadMaskingRule("jsonfield", new PayloadFieldMaskingRule [] { new PayloadFieldMaskingRule { Path = "param1", Mask = new FuncMask(new Func <string, string>((string value) => { throw new Exception("MaskingFailed"); })) } }) }); var json = string.Format(@"{{ ""PARAM1"": "" aa "" }}"); apiLog.TrySetValue("jsonField", new Payload(json)); var masked = filter.Apply(apiLog); var fields = masked.GetFields(); var maskedJsonField = fields.First(x => x.Key == "jsonField").Value.ToString(); Assert.Equal(KeyStore.Masking.MaskingFailed, maskedJsonField); Assert.True(Boolean.Parse(fields.First(x => x.Key == KeyStore.Masking.MaskingFailedKey).Value.ToString())); }
public void VerifyJSONFieldsAreMaskedCorrectly() { var apiLog = new ApiLog(); var cc = "4111111111111111"; var maskedCC = "411111******1111"; var filter = new StreamLogMaskingFilter(new List <JsonPayloadMaskingRule> { new JsonPayloadMaskingRule("jsonfield", new PayloadFieldMaskingRule [] { new PayloadFieldMaskingRule { Path = "param1" }, new PayloadFieldMaskingRule { Path = "param2" }, new PayloadFieldMaskingRule { Path = "param3" }, new PayloadFieldMaskingRule { Path = "param4.childParam" }, new PayloadFieldMaskingRule { Path = "param4.childParamCC", Mask = Masks.CreditCardMask } }) }); var json = string.Format(@"{{ ""PARAM1"": "" aa "", ""param2"": "" aaaa "", ""param3"": "" aaaaa "", ""param4"": {{ ""childParam"": ""ccccc"", ""childParamCC"": ""{0}"" }} }}", cc); apiLog.TrySetValue("jsonField", new Payload(json)); apiLog.TrySetValue("jsonFieldNotToBeMasked", new Payload(json)); var masked = filter.Apply(apiLog); var fields = masked.GetFields(); var maskedJsonField = (fields.First(x => x.Key == "jsonField").Value as Payload).GetString(); var maskedJsonFieldNoToBeMasked = (fields.First(x => x.Key == "jsonFieldNotToBeMasked").Value as Payload).GetString(); Assert.Equal(string.Format(Regex.Replace(@"{{ ""PARAM1"": ""**"", ""param2"": ""a***"", ""param3"": ""a***a"", ""param4"": {{ ""childParam"": ""c***c"", ""childParamCC"": ""{0}"" }} }}", @"\s|\t|\n|\r", ""), maskedCC), maskedJsonField); Assert.Equal(json, maskedJsonFieldNoToBeMasked); }
public void Should_Mask_Json_Payload() { var id = Convert.ToString(Guid.NewGuid()); var apiLog = Utility.GetApiLog(); apiLog.Id = id; List <PayloadFieldMaskingRule> rules = new List <PayloadFieldMaskingRule>(); IMask CreditCardMask = new FuncMask(CreditcardMask.Mask); rules.Add(new PayloadFieldMaskingRule() { Path = "paymentMethod.cards[0].num", Mask = CreditCardMask }); var jsonPayloadMaskingRule = new JsonPayloadMaskingRule("request", rules.ToArray()); var filter = new StreamLogMaskingFilter(new PayloadMaskingRule[] { jsonPayloadMaskingRule }); Assert.IsNotNull(filter.Rules); var maskedLog = filter.Apply(apiLog); var formatter = JsonLogFormatter.Instance; var firehoseSink = Utility.GetFirehoseSink(); var redisSink = Utility.GetRedisSink(); var compositeSink = Utility.GetCompositeSink(formatter, redisSink, firehoseSink); var logWriter = new LogWriter(formatter, compositeSink); logWriter.WriteAsync(maskedLog).GetAwaiter().GetResult(); //Thread.Sleep(40000); var logData = Utility.GetEsLogDataById(id); var esLogId = string.Empty; var expectedSubstring = "444455******5555"; string actualUrl; logData.TryGetValue("request", out actualUrl); var actual = Utility.GetOutputFromUrl(actualUrl); var isMasked = actual.Contains(expectedSubstring); Assert.IsTrue(isMasked); }
public void Should_Mask_Xml() { var id = Convert.ToString(Guid.NewGuid()); var apiLog = Utility.GetApiLog(); apiLog.Id = id; var cc = "4111111111111111"; var maskedCC = "411111******1111"; var filter = new StreamLogMaskingFilter(new List <PayloadMaskingRule> { new XmlPayloadMaskingRule("xmlField", new Dictionary <string, string> { { "oski", "http://oski.io/my_custom_ns" } }, new PayloadFieldMaskingRule[] { new PayloadFieldMaskingRule { Path = "/root/node1/node1Child1/@node1Child1Attr" }, new PayloadFieldMaskingRule { Path = "/root/node1/node1Child1/text()" }, new PayloadFieldMaskingRule { Path = "/root/node1/node1Child2/text()" }, new PayloadFieldMaskingRule { Path = "/root/node1/node1Child3/text()" }, new PayloadFieldMaskingRule { Path = "/root/oski:node2/text()" }, new PayloadFieldMaskingRule { Path = "/root/nodeCC/text()", Mask = Masks.CreditCardMask } }) }); var xml = string.Format(@"<?xml version=""1.0"" encoding=""utf-8""?> <root> <node1> <node1Child1 node1Child1Attr="" attr_value ""> ab </node1Child1> <node1Child2> abcd </node1Child2> <node1Child3> abcde </node1Child3> </node1> <node2 xmlns=""http://oski.io/my_custom_ns"">uvwxyz</node2> <nodeCC>{0}</nodeCC> <node3>pqrst</node3> </root>", cc); apiLog.TrySetValue("xmlField", new Payload(xml)); var maskedLog = filter.Apply(apiLog); var formatter = JsonLogFormatter.Instance; var firehoseSink = Utility.GetFirehoseSink(); var redisSink = Utility.GetRedisSink(); var compositeSink = Utility.GetCompositeSink(formatter, redisSink, firehoseSink); var logWriter = new LogWriter(formatter, compositeSink); logWriter.WriteAsync(maskedLog).GetAwaiter().GetResult(); //Thread.Sleep(30000); var logData = Utility.GetEsLogDataById(id); var esLogId = string.Empty; string actualUrl; logData.TryGetValue("xmlField", out actualUrl); var actual = Utility.GetOutputFromUrl(actualUrl); var expected = string.Format(Regex.Replace(Regex.Replace(@"<?xml version=""1.0"" encoding=""utf-8""?> <root> <node1> <node1Child1 node1Child1Attr=""a********e"">**</node1Child1> <node1Child2>a***</node1Child2> <node1Child3>a***e</node1Child3> </node1> <node2 xmlns=""http://oski.io/my_custom_ns"">u****z</node2> <nodeCC>{0}</nodeCC> <node3>pqrst</node3> </root>", @"\t|\n|\r", ""), @">\s*<", "><"), maskedCC); Assert.Equal(expected, actual); }
public void VerifyXmlFieldsAreMaskedCorrectly() { var apiLog = new ApiLog(); var cc = "4111111111111111"; var maskedCC = "411111******1111"; var filter = new StreamLogMaskingFilter(new List <PayloadMaskingRule> { new XmlPayloadMaskingRule("xmlField", new Dictionary <string, string> { { "oski", "http://oski.io/my_custom_ns" } }, new PayloadFieldMaskingRule[] { new PayloadFieldMaskingRule { Path = "/root/node1/node1Child1/@node1Child1Attr" }, new PayloadFieldMaskingRule { Path = "/root/node1/node1Child1/text()" }, new PayloadFieldMaskingRule { Path = "/root/node1/node1Child2/text()" }, new PayloadFieldMaskingRule { Path = "/root/node1/node1Child3/text()" }, new PayloadFieldMaskingRule { Path = "/root/oski:node2/text()" }, new PayloadFieldMaskingRule { Path = "/root/nodeCC/text()", Mask = Masks.CreditCardMask } }) }); var xml = string.Format(@"<?xml version=""1.0"" encoding=""utf-8""?> <root> <node1> <node1Child1 node1Child1Attr="" attr_value ""> ab </node1Child1> <node1Child2> abcd </node1Child2> <node1Child3> abcde </node1Child3> </node1> <node2 xmlns=""http://oski.io/my_custom_ns"">uvwxyz</node2> <nodeCC>{0}</nodeCC> <node3>pqrst</node3> </root>", cc); apiLog.TrySetValue("xmlField", new Payload(xml)); apiLog.TrySetValue("xmlFieldNotToBeMasked", new Payload(xml)); var masked = filter.Apply(apiLog); var fields = masked.GetFields(); var maskedXmlField = (fields.First(x => x.Key == "xmlField").Value as Payload).GetString(); var maskedXmlFieldNoToBeMasked = (fields.First(x => x.Key == "xmlFieldNotToBeMasked").Value as Payload).GetString(); Assert.Equal(string.Format(Regex.Replace(Regex.Replace(@"<?xml version=""1.0"" encoding=""utf-8""?> <root> <node1> <node1Child1 node1Child1Attr=""a********e"">**</node1Child1> <node1Child2>a***</node1Child2> <node1Child3>a***e</node1Child3> </node1> <node2 xmlns=""http://oski.io/my_custom_ns"">u****z</node2> <nodeCC>{0}</nodeCC> <node3>pqrst</node3> </root>", @"\t|\n|\r", ""), @">\s*<", "><"), maskedCC), maskedXmlField); Assert.Equal(maskedXmlFieldNoToBeMasked, xml); }