예제 #1
0
        private void RunOperation(ObfuscationInfo obfuscationOperation, StatusInformation status = null)
        {
            IEnumerable <string> originData = null;

            DataPersistence.ConnectionString = obfuscationOperation.Destination.ConnectionString;
            var       dataSet            = DataPersistence.GetTableData(obfuscationOperation);
            DataTable scrambledDataTable = null;

            switch (obfuscationOperation.Origin.DataSourceType)
            {
            case DataSourceType.CSV:
                originData = GetSourceData(obfuscationOperation);
                break;

            case DataSourceType.DNIGenerator:
                originData = DniNie.GenerateDNI(dataSet.Tables[0].Rows.Count);
                break;

            case DataSourceType.NIEGenerator:
                originData = DniNie.GenerateNIE(dataSet.Tables[0].Rows.Count);
                break;

            case DataSourceType.NIFGenerator:
                originData = DniNie.GenerateNIF(dataSet.Tables[0].Rows.Count);
                break;

            case DataSourceType.Scramble:
                scrambledDataTable = ScrambleDataSet(obfuscationOperation.Destination, dataSet);
                break;

            default:
                originData = new List <string>();
                break;
            }

            if (status == null)
            {
                status = new StatusInformation();
            }

            if (obfuscationOperation.Origin.DataSourceType == DataSourceType.Scramble)
            {
                UpdateDataSet(dataSet, scrambledDataTable, obfuscationOperation);
            }
            else
            {
                UpdateDataset(dataSet, originData, obfuscationOperation.Destination.Columns[0].Name);
            }

            status.Message = $"...Saving obfuscation on {obfuscationOperation.Destination.Name}";
            StatusChanged?.Invoke(status, null);
            DataPersistence.PersistOfuscation(obfuscationOperation, dataSet);
        }
예제 #2
0
        private IEnumerable <string> GetSourceData(ObfuscationInfo obfuscationOperation)
        {
            if (obfuscationOperation.Origin.DataSourceType != DataSourceType.CSV)
            {
                return(null);
            }

            var csvFile = new CsvFile();

            csvFile.ReadFile(obfuscationOperation.Origin.DataSourceName);
            var columnContent = csvFile.GetContent(obfuscationOperation.Origin.ColumnIndex);

            return(columnContent);
        }
        private string AddOrderClauseToQuery(ObfuscationInfo obfuscationOperation, string sqlQuery)
        {
            var orderByClause = string.Empty;

            foreach (var columnInfo in obfuscationOperation.Destination.Columns.Where(c => c.IsGroupColumn))
            {
                orderByClause += $", " + columnInfo.Name;
            }
            if (orderByClause.Length > 0)
            {
                sqlQuery += " ORDER BY " + orderByClause.Substring(1);
            }

            return(sqlQuery);
        }
        public DataSet GetTableData(ObfuscationInfo obfuscationOperation)
        {
            var sqlQuery = $"SELECT * FROM {obfuscationOperation.Destination.Name}";

            sqlQuery = AddOrderClauseToQuery(obfuscationOperation, sqlQuery);

            OpenConnection();

            DataSet dataSet        = new DataSet();
            var     sqlDataAdapter = new SqlDataAdapter(sqlQuery, _connection);

            sqlDataAdapter.Fill(dataSet);

            CloseConnection();

            return(dataSet);
        }
예제 #5
0
        public void Setup()
        {
            var testDataTable = "TestDataTable";
            var testColumn    = new DataColumn
            {
                ColumnName  = "TestDataColumn",
                DataType    = typeof(string),
                AllowDBNull = true,
                MaxLength   = 50,
            };

            _obfuscationOperation = new ObfuscationInfo
            {
                Origin = new DataSourceInformation
                {
                    DataSourceName = "TestDataSource",
                    DataSourceType = DataSourceType.DNIGenerator,
                    ColumnIndex    = 0,
                    HasHeaders     = false,
                },
                Destination = new DbTableInfo
                {
                    Name             = testDataTable,
                    ConnectionString = "test connection string",
                    Columns          = new List <DbColumnInfo>
                    {
                        new DbColumnInfo
                        {
                            Name               = testColumn.ColumnName,
                            Index              = 0,
                            DataType           = "string",
                            CharacterMaxLength = testColumn.MaxLength,
                            IsNullable         = testColumn.AllowDBNull,
                            IsGroupColumn      = false
                        }
                    }
                }
            };

            _dataSet = new DataSet();

            var table = _dataSet.Tables.Add(testDataTable);

            table.Columns.Add(testColumn);
        }
예제 #6
0
        private DataSet UpdateDataSet(DataSet dataSet, DataTable scrambledDataTable, ObfuscationInfo obfuscationOperation)
        {
            var tableToUpdate   = dataSet.Tables[scrambledDataTable.TableName];
            var totalRows       = tableToUpdate.Rows.Count;
            var columnsToUpdate = obfuscationOperation.Destination.Columns.Where(c => !c.IsGroupColumn);

            for (int i = 0; i < totalRows; i++)
            {
                var rowToUpdate  = tableToUpdate.Rows[i];
                var scrambledRow = scrambledDataTable.Rows[i];

                foreach (var column in columnsToUpdate)
                {
                    rowToUpdate[column.Index] = scrambledRow[column.Index];
                }
            }

            return(dataSet);
        }
        public void PersistOfuscation(ObfuscationInfo obfuscationOperation, DataSet dataSet)
        {
            OpenConnection();

            var idColumns   = GetIdentityColumns(obfuscationOperation.Destination.Name);
            var updateQuery = $"UPDATE {obfuscationOperation.Destination.Name} SET ";

            foreach (var valueColumn in obfuscationOperation.Destination.Columns.Where(c => !c.IsGroupColumn))
            {
                updateQuery += $", {valueColumn.Name}=@param_{valueColumn.Name}";
            }

            updateQuery  = updateQuery.Replace("SET ,", "SET");
            updateQuery += " WHERE";

            foreach (var valueColumn in obfuscationOperation.Destination.Columns.Where(c => !c.IsGroupColumn))
            {
                updateQuery += $" AND {valueColumn.Name}=@param_old_{valueColumn.Name}";
            }

            foreach (var groupColumn in obfuscationOperation.Destination.Columns.Where(gc => gc.IsGroupColumn))
            {
                updateQuery += $" AND {groupColumn.Name}=@param_group_{groupColumn.Name}";
            }

            foreach (var idColumn in idColumns)
            {
                updateQuery += $" AND {idColumn}=@param_id_{idColumn}";
            }

            updateQuery = updateQuery.Replace("WHERE AND", "WHERE");

            foreach (DataRow row in dataSet.Tables[0].Rows)
            {
                var updateCommand = _connection.CreateCommand();
                updateCommand.CommandType = CommandType.Text;
                updateCommand.CommandText = updateQuery;

                foreach (var valueColumn in obfuscationOperation.Destination.Columns.Where(c => !c.IsGroupColumn))
                {
                    updateCommand.Parameters.AddWithValue($"param_{valueColumn.Name}", row[valueColumn.Name]);
                }

                foreach (var valueColumn in obfuscationOperation.Destination.Columns.Where(c => !c.IsGroupColumn))
                {
                    updateCommand.Parameters.AddWithValue($"param_old_{valueColumn.Name}", row[valueColumn.Name, DataRowVersion.Original]);
                }

                foreach (var groupColumn in obfuscationOperation.Destination.Columns.Where(gc => gc.IsGroupColumn))
                {
                    updateCommand.Parameters.AddWithValue($"param_group_{groupColumn.Name}", row[groupColumn.Name]);
                }

                foreach (var idColumn in idColumns)
                {
                    updateCommand.Parameters.AddWithValue($"param_id_{idColumn}", row[idColumn]);
                }

                updateCommand.ExecuteNonQuery();
            }

            CloseConnection();
        }
예제 #8
0
 public ObfuscationParser(ObfuscationInfo obfuscationOperation)
 {
     this.Origin      = obfuscationOperation.Origin;
     this.Destination = obfuscationOperation.Destination;
 }