Skip to content

Commit 1044bba

Browse files
committed
feat: SP-2487 Implement path obfuscation
1 parent 0ec8201 commit 1044bba

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

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

Lines changed: 10 additions & 1 deletion
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,8 +392,16 @@ 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+
397+
if (obfuscate) {
398+
scanFileResults = scanFileResults.stream().map(s -> {
399+
String originalFilePath = winnowing.getRealFilePathFor(s.getFilePath()).toString();
400+
return s.withFilePath(originalFilePath);
401+
}).collect(Collectors.toList());
402+
}
403+
394404
if (settings.getBom() != null) {
395-
List<ScanFileResult> scanFileResults = JsonUtils.toScanFileResults(results);
396405
List <ScanFileResult> newScanFileResults = this.postProcessor.process(scanFileResults, this.settings.getBom());
397406
return JsonUtils.toRawJsonString(newScanFileResults);
398407
}

src/main/java/com/scanoss/Winnowing.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import lombok.*;
2929
import lombok.extern.slf4j.Slf4j;
3030
import org.apache.commons.codec.digest.DigestUtils;
31+
import org.apache.commons.io.FilenameUtils;
3132
import org.apache.tika.Tika;
3233
import org.apache.tika.mime.MediaType;
3334
import org.apache.tika.mime.MediaTypeRegistry;
@@ -37,6 +38,7 @@
3738
import java.io.IOException;
3839
import java.nio.charset.Charset;
3940
import java.nio.file.Files;
41+
import java.nio.file.Path;
4042
import java.util.*;
4143
import java.util.zip.CRC32C;
4244
import java.util.zip.Checksum;
@@ -69,6 +71,12 @@ public class Winnowing {
6971
@Builder.Default
7072
private int snippetLimit = MAX_LONG_LINE_CHARS; // Enable limiting of size of a single line of snippet generation
7173

74+
private Map<String, Path> obfuscationMap;
75+
76+
public Path getRealFilePathFor(String obfuscatedPath) {
77+
return obfuscationMap.get(obfuscatedPath);
78+
}
79+
7280
/**
7381
* Calculate the WFP (fingerprint) for the given file
7482
*
@@ -112,7 +120,14 @@ public String wfpForContents(@NonNull String filename, Boolean binFile, byte[] c
112120
char[] fileContents = (new String(contents, Charset.defaultCharset())).toCharArray();
113121
String fileMD5 = DigestUtils.md5Hex(contents);
114122
StringBuilder wfpBuilder = new StringBuilder();
115-
// TODO add obfuscation of the filename here
123+
124+
if (obfuscate) {
125+
String extension = FilenameUtils.getExtension(filename);
126+
String obfuscatedPath = obfuscationMap.size() + "." + extension;
127+
this.obfuscationMap.put(obfuscatedPath, Path.of(filename));
128+
filename = obfuscatedPath;
129+
}
130+
116131
wfpBuilder.append(String.format("file=%s,%d,%s\n", fileMD5, contents.length, filename));
117132
if (binFile || this.skipSnippets || this.skipSnippets(filename, fileContents)) {
118133
return wfpBuilder.toString();

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
}

0 commit comments

Comments
 (0)