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); }
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); }
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); }
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(); }
public ObfuscationParser(ObfuscationInfo obfuscationOperation) { this.Origin = obfuscationOperation.Origin; this.Destination = obfuscationOperation.Destination; }