コード例 #1
0
        public void T01_Mask_CSV_Test()
        {
            var config = MaskConfig.ReadConfig(utility.TestInstanceConfigfile);
            //Console.WriteLine($"Config: InputFile = {config.InputFile}");
            //Console.WriteLine($"Config: OutputFile = {config.OutputFile}");
            var masker = new DataMasking(config);

            masker.Mask();

            Assert.True(File.Exists(config.OutputFile));
            var contents = new List <string>(File.ReadLines(config.OutputFile));

            Assert.Equal(5, contents.Count);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: dandraka/Zoro
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine(@"Usage: Zoro.exe <path to config file>");
                Console.WriteLine(@"E.g. Zoro.exe c:\temp\mask.xml");
                Console.WriteLine(@"Sample config file:");
                Console.WriteLine("<?xml version=\"1.0\"?>");
                Console.WriteLine("<MaskConfig xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">");
                Console.WriteLine(@"  <FieldMasks>");
                Console.WriteLine(@"    <FieldMask>");
                Console.WriteLine(@"      <FieldName>Name</FieldName>");
                Console.WriteLine(@"      <MaskType>Similar</MaskType>");
                Console.WriteLine(@"    </FieldMask>");
                Console.WriteLine(@"    <FieldMask>");
                Console.WriteLine(@"      <FieldName>MainPhone</FieldName>");
                Console.WriteLine(@"      <MaskType>Similar</MaskType>");
                Console.WriteLine(@"      <RegExMatch>^(\+\d\d)?(.*)$</RegExMatch>");
                Console.WriteLine(@"      <RegExGroupToReplace>2</RegExGroupToReplace>");
                Console.WriteLine(@"    </FieldMask>");
                Console.WriteLine(@"    <FieldMask>");
                Console.WriteLine(@"      <FieldName>Fax</FieldName>");
                Console.WriteLine(@"      <MaskType>Asterisk</MaskType>");
                Console.WriteLine(@"      <Asterisk>9</Asterisk>");
                Console.WriteLine(@"      <RegExMatch>^(\+\d\d)?(.*)$</RegExMatch>");
                Console.WriteLine(@"      <RegExGroupToReplace>2</RegExGroupToReplace>");
                Console.WriteLine(@"    </FieldMask>");
                Console.WriteLine(@"    <FieldMask>");
                Console.WriteLine(@"      <FieldName>BankAccount</FieldName>");
                Console.WriteLine(@"      <MaskType>Asterisk</MaskType>");
                Console.WriteLine(@"      <Asterisk>9</Asterisk>");
                Console.WriteLine(@"    </FieldMask>");
                Console.WriteLine(@"    <FieldMask>");
                Console.WriteLine(@"      <FieldName>Street</FieldName>");
                Console.WriteLine(@"      <MaskType>List</MaskType>");
                Console.WriteLine(@"      <ListOfPossibleReplacements>");
                Console.WriteLine(@"        <Replacement Selector=""Country=Netherlands"" List=""Nootdorpstraat,Nolensstraat,Statensingel"" />");
                Console.WriteLine(@"        <Replacement Selector=""Country=Germany"" List=""Bahnhofstraße,Freigaße,Hauptstraße"" />");
                Console.WriteLine(@"        <Replacement Selector=""Country=France"" List=""Rue Nationale,Boulevard Vauban,Rue des Stations"" />");
                Console.WriteLine(@"        <Replacement Selector="""" List=""Bedford Gardens,Sheffield Terrace,Kensington Palace Gardens"" />");
                Console.WriteLine(@"      </ListOfPossibleReplacements>");
                Console.WriteLine(@"    </FieldMask>");
                Console.WriteLine(@"  </FieldMasks>");
                Console.WriteLine(@"  <InputFile>C:\\temp\\Zorotests\\data.csv</InputFile>");
                Console.WriteLine(@"  <OutputFile>C:\\temp\\Zorotests\\maskeddata.csv</OutputFile>");
                Console.WriteLine(@"  <Delimiter>;</Delimiter>");
                Console.WriteLine(@"</MaskConfig>");

                return;
            }

            // cross platform
            configfile = Path.GetFullPath(args[0]
                                          .Replace('/', Path.DirectorySeparatorChar)
                                          .Replace('\\', Path.DirectorySeparatorChar));

            if (!File.Exists(configfile))
            {
                Console.WriteLine($"WARNING: Config file {configfile} was not found, exiting.");
                Console.WriteLine(@"Usage: Zoro.exe <path to config file>");
                return;
            }

            try
            {
                var config = MaskConfig.ReadConfig(configfile);
                var masker = new DataMasking(config);
                masker.Mask();
            }
            catch (Exception ex)
            {
                Console.WriteLine("An error occured:");
                Console.WriteLine("{0}: {1}\r\n{2}", ex.GetType(), ex.Message, ex.StackTrace);
            }
        }
コード例 #3
0
ファイル: MaskConfig_Tests.cs プロジェクト: dandraka/Zoro
        public void T01_Save_Read_Config_Test()
        {
            var config = new MaskConfig()
            {
                InputFile        = Path.Combine(utility.TestInstanceDir, "data2.csv"),
                OutputFile       = Path.Combine(utility.TestInstanceDir, "maskeddata2.csv"),
                DataSource       = DataSource.CsvFile,
                ConnectionString = "(none)",
                SqlSelect        = "(none)"
            };

            string[] fields = new[]
            {
                "BIRTHDAY", "BANKACCOUNTNR", "FINANCIALINSTITUTE", "BANKZIPNR", "STREET1", "LAND",
                "ZIP1", "STREET2", "ZIP2", "STREET3", "ZIP3", "PHONEID1", "PHONEFIELDSTR1", "PHONEID2",
                "PHONEFIELDSTR2", "PHONEID3", "PHONEFIELDSTR3", "PHONEID4", "PHONEFIELDSTR4", "PHONEID5",
                "PHONEFIELDSTR5", "PHONEID6", "PHONEFIELDSTR6", "PHONEID7", "PHONEFIELDSTR7", "PHONEID8",
                "PHONEFIELDSTR8", "PHONEID9", "PHONEFIELDSTR9", "PHONEID10", "PHONEFIELDSTR10", "MAILFIELDSTR1",
                "MAILFIELDSTR2", "MAILFIELDSTR3", "MAILFIELDSTR4", "GWIBAN", "GWBIC", "GWTRADEREGISTER", "WCM_KURZNA",
                "ART_STREET_EXPORT", "ART_NAME_EXPORT", "ART_ZIP_EXPORT", "ART_CHRISTIANNAME_EXPORT"
            };
            string[] nameFields = new[]
            {
                "NAME", "CHRISTIANNAME"
            };
            string[] zipFields = new[]
            {
                "ZIP1", "ZIP2", "ZIP3"
            };


            foreach (string field in fields.Where(x => !nameFields.Contains(x) && !zipFields.Contains(x)))
            {
                config.FieldMasks.Add(new FieldMask()
                {
                    FieldName = field, MaskType = MaskType.Similar
                });
            }

            foreach (string field in nameFields)
            {
                config.FieldMasks.Add(new FieldMask()
                {
                    FieldName = field,
                    MaskType  = MaskType.List,
                    ListOfPossibleReplacements = new List <Replacement>()
                    {
                        new Replacement()
                        {
                            Selector = "GWGENDER=weiblich", ReplacementList = "Kerry,Laura"
                        },
                        new Replacement()
                        {
                            Selector = "", ReplacementList = "Nick,John,Papadopoulos,Smith"
                        }
                    }
                });
            }

            foreach (string field in zipFields)
            {
                config.FieldMasks.Add(new FieldMask()
                {
                    FieldName        = field,
                    MaskType         = MaskType.Query,
                    QueryReplacement = new QueryReplacement()
                    {
                        Query         = "SELECT postcode, country FROM postcode",
                        ValueDbField  = "postcode",
                        GroupDbField  = "country",
                        SelectorField = "LAND"
                    }
                });
            }

            testConfigFile = Path.Combine(utility.TestInstanceDir, $"config_{Guid.NewGuid()}.xml");
            MaskConfig.SaveConfig(testConfigFile, config);

            // test writing
            Assert.True(File.Exists(utility.TestInstanceConfigfile));

            // test reading
            var config2 = MaskConfig.ReadConfig(testConfigFile);

            //Console.WriteLine($"Config: InputFile = {config2.InputFile}");
            //Console.WriteLine($"Config: OutputFile = {config2.OutputFile}");
            Assert.Equal(45, config2.FieldMasks.Count);
        }
コード例 #4
0
ファイル: MaskConfig_Tests.cs プロジェクト: dandraka/Zoro
        public void T02_Read_Config_Test()
        {
            var config = MaskConfig.ReadConfig(utility.TestInstanceConfigfile);

            Assert.Equal(2, config.FieldMasks.Count);
        }