コード例 #1
0
        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()));
        }
コード例 #2
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }