From db5f75406cc00da25eea3355e634a43181587b69 Mon Sep 17 00:00:00 2001 From: Mark Chaney Date: Sun, 25 Aug 2024 23:56:43 -0400 Subject: [PATCH] prune sensitive data from failed_import_rows data --- packages/actions/src/Imports/ImportColumn.php | 14 +++++++++++++ .../actions/src/Imports/Jobs/ImportCsv.php | 21 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/actions/src/Imports/ImportColumn.php b/packages/actions/src/Imports/ImportColumn.php index 4518dc54b3..eaddbb002f 100644 --- a/packages/actions/src/Imports/ImportColumn.php +++ b/packages/actions/src/Imports/ImportColumn.php @@ -78,6 +78,8 @@ class ImportColumn extends Component protected string | Htmlable | Closure | null $helperText = null; + protected bool | Closure $isSensitive = false; + final public function __construct(string $name) { $this->name($name); @@ -606,4 +608,16 @@ class ImportColumn extends Component default => parent::resolveDefaultClosureDependencyForEvaluationByType($parameterType), }; } + + public function sensitive(bool | Closure $condition = true): static + { + $this->isSensitive = $condition; + + return $this; + } + + public function isSensitive(): bool + { + return (bool) $this->evaluate($this->isSensitive); + } } diff --git a/packages/actions/src/Imports/Jobs/ImportCsv.php b/packages/actions/src/Imports/Jobs/ImportCsv.php index 43424b779a..7a96eb4c43 100644 --- a/packages/actions/src/Imports/Jobs/ImportCsv.php +++ b/packages/actions/src/Imports/Jobs/ImportCsv.php @@ -143,11 +143,30 @@ class ImportCsv implements ShouldQueue { $failedRow = app(FailedImportRow::class); $failedRow->import()->associate($this->import); - $failedRow->data = $data; + $failedRow->data = $this->filterSensitiveData($data, $this->columnMap); + $failedRow->validation_error = $validationError; $failedRow->save(); } + protected function filterSensitiveData(array $data, array $columnMap): array + { + $sensitiveColumns = []; + + foreach ($this->importer->getColumns() as $column) { + if ($column->isSensitive()) { + $csvHeader = $columnMap[$column->getName()] ?? null; + if ($csvHeader !== null) { + $sensitiveColumns[] = $csvHeader; + } + } + } + + return array_filter($data, function ($key) use ($sensitiveColumns) { + return ! in_array($key, $sensitiveColumns, true); + }, ARRAY_FILTER_USE_KEY); + } + protected function utf8Encode(mixed $value): mixed { if (is_array($value)) {