Skip to content

Commit 5682bcc

Browse files
committed
feat(SP-2487): implement path deobfuscation on Scanner class
1 parent 4e09f94 commit 5682bcc

3 files changed

Lines changed: 49 additions & 2 deletions

File tree

src/main/java/com/scanoss/Scanner.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import java.util.concurrent.Executors;
5050
import java.util.concurrent.Future;
5151
import java.util.function.Predicate;
52+
import java.util.stream.Collectors;
5253

5354
import static com.scanoss.ScanossConstants.*;
5455

@@ -391,12 +392,28 @@ public List<String> scanFileList(@NonNull String folder, @NonNull List<String> f
391392
* @return Processed results, either modified based on BOM or original results if no BOM exists
392393
*/
393394
private List<String> postProcessResults(List<String> results) {
395+
List<ScanFileResult> scanFileResults = JsonUtils.toScanFileResults(results);
396+
List<ScanFileResult> deobfuscatedScanFileResults = deobfuscateResults(scanFileResults);
397+
394398
if (settings.getBom() != null) {
395-
List<ScanFileResult> scanFileResults = JsonUtils.toScanFileResults(results);
396-
List <ScanFileResult> newScanFileResults = this.postProcessor.process(scanFileResults, this.settings.getBom());
399+
List <ScanFileResult> newScanFileResults = this.postProcessor.process(deobfuscatedScanFileResults, this.settings.getBom());
397400
return JsonUtils.toRawJsonString(newScanFileResults);
398401
}
399402
return results;
400403
}
401404

405+
/**
406+
* Deobfuscate the file paths in a list of ScanFileResult.
407+
*
408+
* @param scanFileResults List of ScanFileResult to be deobfuscated
409+
* @return List of ScanFileResult with deobfuscated file paths
410+
*/
411+
public List<ScanFileResult> deobfuscateResults(@NonNull List<ScanFileResult> scanFileResults) {
412+
if (!obfuscate) {
413+
return scanFileResults; // Return the original results if obfuscation is disabled
414+
}
415+
return scanFileResults.stream()
416+
.map(result -> result.withFilePath(winnowing.deobfuscateFilePath(result.getFilePath())))
417+
.collect(Collectors.toList());
418+
}
402419
}

src/main/java/com/scanoss/dto/ScanFileResult.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
package com.scanoss.dto;
2424

2525
import lombok.Data;
26+
import lombok.With;
2627

2728
import java.util.List;
2829

@@ -31,6 +32,7 @@
3132
*/
3233
@Data
3334
public class ScanFileResult {
35+
@With
3436
private final String filePath;
3537
private final List<ScanFileDetails> fileDetails;
3638
}

src/test/java/com/scanoss/TestScanner.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.scanoss.exceptions.ScannerException;
2626
import com.scanoss.filters.FilterConfig;
2727
import com.scanoss.settings.ScanossSettings;
28+
import com.scanoss.utils.JsonUtils;
2829
import lombok.extern.slf4j.Slf4j;
2930
import org.junit.Before;
3031
import org.junit.Test;
@@ -219,6 +220,33 @@ public void TestScannerScanFileListPositive() {
219220
log.info("Finished {} -->", methodName);
220221
}
221222

223+
@Test
224+
public void TestScannerScanFileListPositiveWithObfuscation() {
225+
String methodName = new Object() {
226+
}.getClass().getEnclosingMethod().getName();
227+
log.info("<-- Starting {}", methodName);
228+
229+
Scanner scanner = Scanner.builder().obfuscate(true).build();
230+
231+
List<String> fileList = Arrays.asList(
232+
"src/test/java/com/scanoss/TestScanner.java",
233+
"src/test/java/com/scanoss/TestWinnowing.java",
234+
".github/workflows/publish.yml",
235+
".gitignore",
236+
"tmp/.gitignore"
237+
);
238+
String folder = ".";
239+
List<String> results = scanner.scanFileList(folder, fileList);
240+
241+
assertNotNull("Should've gotten a response", results);
242+
assertFalse("Scan results should not be empty", results.isEmpty());
243+
assertEquals("Should've only gotten two results",2, results.size());
244+
log.info("Received {} results", results.size());
245+
log.info("Res Data: {}", results);
246+
247+
log.info("Finished {} -->", methodName);
248+
}
249+
222250
@Test
223251
public void TestScannerScanFileListNegative() {
224252
String methodName = new Object() {

0 commit comments

Comments
 (0)