Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import com.uid2.shared.store.reader.RotatingCloudEncryptionKeyProvider;
import com.uid2.shared.store.scope.StoreScope;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;

import static com.uid2.shared.util.CloudEncryptionHelpers.decryptInputStream;

Expand All @@ -21,6 +23,8 @@ public EncryptedRotatingSaltProvider(DownloadCloudStorage fileStreamProvider, Ro
@Override
protected SaltEntry[] readInputStream(InputStream inputStream, SaltFileParser saltFileParser, Integer size) throws IOException {
String decrypted = decryptInputStream(inputStream, cloudEncryptionKeyProvider, "salts");
return saltFileParser.parseFile(decrypted, size);
try (BufferedReader reader = new BufferedReader(new StringReader(decrypted))) {
return saltFileParser.parseLines(reader, size);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,7 @@ private SaltSnapshot loadSnapshot(JsonObject spec, String firstLevelSalt, SaltFi

protected SaltEntry[] readInputStream(InputStream inputStream, SaltFileParser saltFileParser, Integer size) throws IOException {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
String[] saltFileLines = reader.lines().toArray(String[]::new);
return saltFileParser.parseFileLines(saltFileLines, size);
return saltFileParser.parseLines(reader, size);
}
}

Expand Down
14 changes: 14 additions & 0 deletions src/main/java/com/uid2/shared/store/salt/SaltFileParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,27 @@

import com.uid2.shared.model.SaltEntry;

import java.io.BufferedReader;
import java.io.IOException;

public class SaltFileParser {
private final IdHashingScheme idHashingScheme;

public SaltFileParser(IdHashingScheme idHashingScheme) {
this.idHashingScheme = idHashingScheme;
}

public SaltEntry[] parseLines(BufferedReader reader, Integer size) throws IOException {
SaltEntry[] entries = new SaltEntry[size];
int lineNumber = 0;
String line;
while ((line = reader.readLine()) != null) {
entries[lineNumber] = parseLine(line, lineNumber);
lineNumber++;
}
return entries;
}

public SaltEntry[] parseFile(String saltFileContent, Integer size) {
var lines = saltFileContent.split("\n");
return parseFileLines(lines, size);
Expand Down
15 changes: 15 additions & 0 deletions src/test/java/com/uid2/shared/store/salt/SaltFileParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import com.uid2.shared.model.SaltEntry.KeyMaterial;
import org.junit.jupiter.api.Test;

import java.io.BufferedReader;
import java.io.StringReader;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

class SaltFileParserTest {
Expand All @@ -17,6 +20,18 @@ class SaltFileParserTest {
private final String hashed4 = hashingScheme.encode(4);
private final String hashed5 = hashingScheme.encode(5);

@Test
void parseLinesMatchesParseFile() throws Exception {
var file = """
1,100,salt1,1000,old_salt1,10,key_1,key_salt_1,100,old_key_1,old_key_1_salt
2,200,salt2,2000,old_salt2,20,key_2,key_salt_2,200,old_key_2,old_key_2_salt
""";
SaltEntry[] viaParseFile = parser.parseFile(file, 2);
SaltEntry[] viaParseLines = parser.parseLines(new BufferedReader(new StringReader(file)), 2);

assertThat(viaParseLines).isEqualTo(viaParseFile);
}

@Test
void parsesSaltFileWithAllFields() {
var file = """
Expand Down
Loading