Skip to content

Commit 5ee2589

Browse files
Merge pull request #313 from IABTechLab/wzh-uid2-3575-encrypted-scoped-store-reader-change-without-knowing-siteId
Wzh uid2 3575 encrypted scoped store reader change without knowing site
2 parents 58d8c0e + 4533ab2 commit 5ee2589

File tree

7 files changed

+24
-17
lines changed

7 files changed

+24
-17
lines changed

src/main/java/com/uid2/shared/Const.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public static class Config {
7575
public static final String EnforceJwtProp = "enforceJwt";
7676
public static final String MaaServerBaseUrlProp = "maa_server_base_url";
7777
public static final String SaltsExpiredShutdownHours = "salts_expired_shutdown_hours";
78+
public static final String encryptionSupportVersion = "encryption_support_version";
7879
}
7980

8081
public static class Http {

src/main/java/com/uid2/shared/store/EncryptedScopedStoreReader.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@
2323
public class EncryptedScopedStoreReader<T> extends ScopedStoreReader<T> {
2424
private static final Logger LOGGER = LoggerFactory.getLogger(EncryptedScopedStoreReader.class);
2525

26-
private final int siteId;
2726
private final RotatingS3KeyProvider s3KeyProvider;
2827

29-
public EncryptedScopedStoreReader(DownloadCloudStorage fileStreamProvider, EncryptedScope scope, Parser<T> parser, String dataTypeName, RotatingS3KeyProvider s3KeyProvider) {
28+
public EncryptedScopedStoreReader(DownloadCloudStorage fileStreamProvider, StoreScope scope, Parser<T> parser, String dataTypeName, RotatingS3KeyProvider s3KeyProvider) {
3029
super(fileStreamProvider, scope, parser, dataTypeName);
31-
this.siteId = scope.getId();
3230
this.s3KeyProvider = s3KeyProvider;
3331
}
3432

@@ -54,19 +52,17 @@ protected String getDecryptedContent(String encryptedContent) throws Exception {
5452
JsonObject json = new JsonObject(encryptedContent);
5553
int keyId = json.getInteger("key_id");
5654
String encryptedPayload = json.getString("encrypted_payload");
57-
5855
Map<Integer, S3Key> s3Keys = s3KeyProvider.getAll();
5956
S3Key decryptionKey = null;
60-
6157
for (S3Key key : s3Keys.values()) {
62-
if (key.getSiteId() == siteId && key.getId() == keyId) {
58+
if (key.getId() == keyId) {
6359
decryptionKey = key;
6460
break;
6561
}
6662
}
6763

6864
if (decryptionKey == null) {
69-
throw new IllegalStateException("No matching S3 key found for decryption for site ID: " + siteId + " and key ID: " + keyId);
65+
throw new IllegalStateException("No matching S3 key found for decryption for key ID: " + keyId);
7066
}
7167

7268
byte[] secret = Base64.getDecoder().decode(decryptionKey.getSecret());

src/main/java/com/uid2/shared/store/reader/RotatingClientKeyProvider.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
import com.uid2.shared.auth.IAuthorizable;
66
import com.uid2.shared.cloud.DownloadCloudStorage;
77
import com.uid2.shared.store.CloudPath;
8+
import com.uid2.shared.store.EncryptedScopedStoreReader;
89
import com.uid2.shared.store.IClientKeyProvider;
910
import com.uid2.shared.store.ScopedStoreReader;
1011
import com.uid2.shared.store.parser.ClientParser;
12+
import com.uid2.shared.store.scope.EncryptedScope;
1113
import com.uid2.shared.store.scope.StoreScope;
1214
import io.vertx.core.json.JsonObject;
1315

@@ -47,6 +49,11 @@ public RotatingClientKeyProvider(DownloadCloudStorage fileStreamProvider, StoreS
4749
this.authorizableStore = new AuthorizableStore<>(ClientKey.class);
4850
}
4951

52+
public RotatingClientKeyProvider(DownloadCloudStorage fileStreamProvider, StoreScope scope, RotatingS3KeyProvider s3KeyProvider) {
53+
this.reader = new EncryptedScopedStoreReader<>(fileStreamProvider, scope, new ClientParser(), "auth keys", s3KeyProvider);
54+
this.authorizableStore = new AuthorizableStore<>(ClientKey.class);
55+
}
56+
5057
@Override
5158
public JsonObject getMetadata() throws Exception {
5259
return reader.getMetadata();

src/main/java/com/uid2/shared/store/reader/RotatingKeysetKeyStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public RotatingKeysetKeyStore(DownloadCloudStorage fileStreamProvider, StoreScop
2222
this.reader = new ScopedStoreReader<>(fileStreamProvider, scope, new KeysetKeyParser(), "keyset_keys");
2323
}
2424

25-
public RotatingKeysetKeyStore(DownloadCloudStorage fileStreamProvider, EncryptedScope scope, RotatingS3KeyProvider s3KeyProvider) {
25+
public RotatingKeysetKeyStore(DownloadCloudStorage fileStreamProvider, StoreScope scope, RotatingS3KeyProvider s3KeyProvider) {
2626
this.reader = new EncryptedScopedStoreReader<>(fileStreamProvider, scope, new KeysetKeyParser(), "keyset_keys", s3KeyProvider);
2727
}
2828

src/main/java/com/uid2/shared/store/reader/RotatingKeysetProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public RotatingKeysetProvider(DownloadCloudStorage fileStreamProvider, StoreScop
2121
this.reader = new ScopedStoreReader<>(fileStreamProvider, scope, new KeysetParser(), "keysets");
2222
}
2323

24-
public RotatingKeysetProvider(DownloadCloudStorage fileStreamProvider, EncryptedScope scope, RotatingS3KeyProvider s3KeyProvider) {
24+
public RotatingKeysetProvider(DownloadCloudStorage fileStreamProvider, StoreScope scope, RotatingS3KeyProvider s3KeyProvider) {
2525
this.reader = new EncryptedScopedStoreReader<>(fileStreamProvider,scope,new KeysetParser(),"keysets",s3KeyProvider);
2626
}
2727

src/main/java/com/uid2/shared/store/reader/RotatingS3KeyProvider.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.uid2.shared.store.scope.StoreScope;
88
import com.uid2.shared.model.S3Key;
99
import io.vertx.core.json.JsonObject;
10+
1011
import java.util.Set;
1112
import java.util.HashSet;
1213
import java.util.Map;
@@ -16,8 +17,10 @@
1617
import java.util.Collection;
1718
import java.util.Comparator;
1819
import java.util.stream.Collectors;
20+
1921
import org.slf4j.Logger;
2022
import org.slf4j.LoggerFactory;
23+
2124
import java.time.Instant;
2225

2326
public class RotatingS3KeyProvider implements StoreReader<Map<Integer, S3Key>> {
@@ -62,9 +65,9 @@ public void updateSiteToKeysMapping() {
6265
Map<Integer, S3Key> allKeys = getAll();
6366
siteToKeysMap.clear();
6467
allKeys.values().forEach(key ->
65-
this.siteToKeysMap
66-
.computeIfAbsent(key.getSiteId(), k -> new ArrayList<>())
67-
.add(key)
68+
this.siteToKeysMap
69+
.computeIfAbsent(key.getSiteId(), k -> new ArrayList<>())
70+
.add(key)
6871
);
6972
LOGGER.info("Updated site-to-keys mapping for {} sites", siteToKeysMap.size());
7073
}
@@ -90,15 +93,15 @@ public List<S3Key> getKeys(int siteId) {
9093
public Collection<S3Key> getKeysForSite(Integer siteId) {
9194
Map<Integer, S3Key> allKeys = getAll();
9295
return allKeys.values().stream()
93-
.filter(key -> key.getSiteId()==(siteId))
96+
.filter(key -> key.getSiteId() == (siteId))
9497
.collect(Collectors.toList());
9598
}
9699

97-
public S3Key getEncryptionKeyForSite(Integer siteId) {
100+
public S3Key getEncryptionKeyForSite(Integer siteId) {
98101
//get the youngest activated key
99102
Collection<S3Key> keys = getKeysForSite(siteId);
100-
long now = Instant.now().getEpochSecond();
101-
if (keys.isEmpty()) {
103+
long now = Instant.now().getEpochSecond();
104+
if (keys.isEmpty()) {
102105
throw new IllegalStateException("No S3 keys available for encryption for site ID: " + siteId);
103106
}
104107
return keys.stream()

src/main/java/com/uid2/shared/store/reader/RotatingSiteStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public RotatingSiteStore(DownloadCloudStorage fileStreamProvider, StoreScope sco
2323
this.reader = new ScopedStoreReader<>(fileStreamProvider, scope, new SiteParser(), "sites");
2424
}
2525

26-
public RotatingSiteStore(DownloadCloudStorage fileStreamProvider, EncryptedScope scope, RotatingS3KeyProvider s3KeyProvider) {
26+
public RotatingSiteStore(DownloadCloudStorage fileStreamProvider, StoreScope scope, RotatingS3KeyProvider s3KeyProvider) {
2727
this.reader = new EncryptedScopedStoreReader<>(fileStreamProvider, scope, new SiteParser(), "sites", s3KeyProvider);
2828
}
2929

0 commit comments

Comments
 (0)