Skip to content

Commit b792232

Browse files
authored
Use correct raw UID version for UID2 UIDOperatorVerticleTest and rename identityV3Enabled to rawUidV3Enabled (#1190)
* Use correct raw UID version for UID2's UIDOperatorVerticleTest * renamed the variable/method useIdentityV3/identityV3Enabled to useRawUidV3/rawUidV3Enabled to be up to date with latest terminlogies * Improved TokenEncodingTest#testAdvertisingTokenEncodings to tests all combo's of raw UID and ad token versions
1 parent 1b72e55 commit b792232

File tree

4 files changed

+34
-22
lines changed

4 files changed

+34
-22
lines changed

src/main/java/com/uid2/operator/service/UIDOperatorService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ public class UIDOperatorService implements IUIDOperatorService {
4747

4848
private final OperatorIdentity operatorIdentity;
4949
private final TokenVersion refreshTokenVersion;
50-
private final boolean identityV3Enabled;
50+
// if we use Raw UID v3 format for the raw UID2/EUIDs generated in this operator
51+
private final boolean rawUidV3Enabled;
5152

5253
private final Handler<Boolean> saltRetrievalResponseHandler;
5354

@@ -90,7 +91,7 @@ public UIDOperatorService(JsonObject config, IOptOutStore optOutStore, ISaltProv
9091
}
9192

9293
this.refreshTokenVersion = TokenVersion.V3;
93-
this.identityV3Enabled = config.getBoolean("identity_v3", false);
94+
this.rawUidV3Enabled = config.getBoolean("identity_v3", false);
9495
}
9596

9697
@Override
@@ -230,7 +231,7 @@ private MappedIdentity getAdvertisingId(UserIdentity firstLevelHashIdentity, Ins
230231
final SaltEntry rotatingSalt = getSaltProviderSnapshot(asOf).getRotatingSalt(firstLevelHashIdentity.id);
231232

232233
return new MappedIdentity(
233-
this.identityV3Enabled
234+
this.rawUidV3Enabled
234235
? TokenUtils.getAdvertisingIdV3(firstLevelHashIdentity.identityScope, firstLevelHashIdentity.identityType, firstLevelHashIdentity.id, rotatingSalt.getSalt())
235236
: TokenUtils.getAdvertisingIdV2(firstLevelHashIdentity.id, rotatingSalt.getSalt()),
236237
rotatingSalt.getHashedId());

src/test/java/com/uid2/operator/EUIDOperatorVerticleTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public EUIDOperatorVerticleTest() throws IOException {
2121
@Override
2222
protected IdentityScope getIdentityScope() { return IdentityScope.EUID; }
2323
@Override
24+
protected boolean useRawUidV3() { return true; }
25+
@Override
2426
protected void addAdditionalTokenGenerateParams(JsonObject payload) {
2527
if (payload != null && !payload.containsKey("tcf_consent_string")) {
2628
payload.put("tcf_consent_string", "CPehNtWPehNtWABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA");

src/test/java/com/uid2/operator/TokenEncodingTest.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import io.vertx.core.json.JsonObject;
1717
import org.junit.Assert;
1818
import org.junit.jupiter.params.ParameterizedTest;
19+
import org.junit.jupiter.params.provider.CsvSource;
1920
import org.junit.jupiter.params.provider.EnumSource;
2021

2122
import java.time.Instant;
@@ -86,15 +87,23 @@ public void testRefreshTokenEncoding(TokenVersion tokenVersion) {
8687
}
8788

8889
@ParameterizedTest
89-
@EnumSource(TokenVersion.class)
90-
public void testAdvertisingTokenEncodings(TokenVersion tokenVersion) {
90+
@CsvSource({"false, V4", //same as current UID2 prod (as at 2024-12-10)
91+
"true, V4", //same as current EUID prod (as at 2024-12-10)
92+
//the following combinations aren't used in any UID2/EUID environments but just testing them regardless
93+
"false, V3",
94+
"true, V3",
95+
"false, V2",
96+
"true, V2",
97+
}
98+
)
99+
public void testAdvertisingTokenEncodings(boolean useRawUIDv3, TokenVersion adTokenVersion) {
91100
final EncryptedTokenEncoder encoder = new EncryptedTokenEncoder(this.keyManager);
92101
final Instant now = EncodingUtils.NowUTCMillis();
93102

94-
final byte[] rawUid = UIDOperatorVerticleTest.getRawUid(IdentityType.Email, "[email protected]", IdentityScope.UID2, tokenVersion != TokenVersion.V2);
103+
final byte[] rawUid = UIDOperatorVerticleTest.getRawUid(IdentityType.Email, "[email protected]", IdentityScope.UID2, useRawUIDv3);
95104

96105
final AdvertisingToken token = new AdvertisingToken(
97-
tokenVersion,
106+
adTokenVersion,
98107
now,
99108
now.plusSeconds(60),
100109
new OperatorIdentity(101, OperatorType.Service, 102, 103),
@@ -103,9 +112,9 @@ public void testAdvertisingTokenEncodings(TokenVersion tokenVersion) {
103112
);
104113

105114
final byte[] encodedBytes = encoder.encode(token, now);
106-
final AdvertisingToken decoded = encoder.decodeAdvertisingToken(EncryptedTokenEncoder.bytesToBase64Token(encodedBytes, tokenVersion));
115+
final AdvertisingToken decoded = encoder.decodeAdvertisingToken(EncryptedTokenEncoder.bytesToBase64Token(encodedBytes, adTokenVersion));
107116

108-
assertEquals(tokenVersion, decoded.version);
117+
assertEquals(adTokenVersion, decoded.version);
109118
assertEquals(token.createdAt, decoded.createdAt);
110119
assertEquals(token.expiresAt, decoded.expiresAt);
111120
assertTrue(token.userIdentity.matches(decoded.userIdentity));
@@ -114,7 +123,7 @@ public void testAdvertisingTokenEncodings(TokenVersion tokenVersion) {
114123
assertEquals(token.publisherIdentity.siteId, decoded.publisherIdentity.siteId);
115124

116125
Buffer b = Buffer.buffer(encodedBytes);
117-
int keyId = b.getInt(tokenVersion == TokenVersion.V2 ? 1 : 2); //TODO - extract master key from token should be a helper function
126+
int keyId = b.getInt(adTokenVersion == TokenVersion.V2 ? 1 : 2); //TODO - extract master key from token should be a helper function
118127
assertEquals(Data.MasterKeySiteId, keyManager.getSiteIdFromKeyId(keyId));
119128
}
120129
}

src/test/java/com/uid2/operator/UIDOperatorVerticleTest.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import com.uid2.operator.util.Tuple;
1414
import com.uid2.operator.vertx.OperatorShutdownHandler;
1515
import com.uid2.operator.vertx.UIDOperatorVerticle;
16-
import com.uid2.operator.vertx.ClientInputValidationException;
1716
import com.uid2.shared.Utils;
1817
import com.uid2.shared.auth.ClientKey;
1918
import com.uid2.shared.auth.Keyset;
@@ -27,9 +26,7 @@
2726
import com.uid2.shared.secret.KeyHasher;
2827
import com.uid2.shared.store.*;
2928
import com.uid2.shared.store.reader.RotatingKeysetProvider;
30-
import io.micrometer.core.instrument.Counter;
3129
import io.micrometer.core.instrument.Metrics;
32-
import io.micrometer.core.instrument.search.MeterNotFoundException;
3330
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
3431
import io.vertx.core.AsyncResult;
3532
import io.vertx.core.Future;
@@ -158,7 +155,7 @@ private void setupConfig(JsonObject config) {
158155
config.put(Const.Config.SharingTokenExpiryProp, 60 * 60 * 24 * 30);
159156

160157
config.put("identity_scope", getIdentityScope().toString());
161-
config.put("identity_v3", useIdentityV3());
158+
config.put("identity_v3", useRawUidV3());
162159
config.put("client_side_token_generate", true);
163160
config.put("key_sharing_endpoint_provide_app_names", true);
164161
config.put("client_side_token_generate_log_invalid_http_origins", true);
@@ -622,23 +619,23 @@ private void assertTokenStatusMetrics(Integer siteId, TokenResponseStatsCollecto
622619
}
623620

624621
private byte[] getAdvertisingIdFromIdentity(IdentityType identityType, String identityString, String firstLevelSalt, String rotatingSalt) {
625-
return getRawUid(identityType, identityString, firstLevelSalt, rotatingSalt, getIdentityScope(), useIdentityV3());
622+
return getRawUid(identityType, identityString, firstLevelSalt, rotatingSalt, getIdentityScope(), useRawUidV3());
626623
}
627624

628-
private static byte[] getRawUid(IdentityType identityType, String identityString, String firstLevelSalt, String rotatingSalt, IdentityScope identityScope, boolean useIdentityV3) {
629-
return !useIdentityV3
625+
private static byte[] getRawUid(IdentityType identityType, String identityString, String firstLevelSalt, String rotatingSalt, IdentityScope identityScope, boolean useRawUidV3) {
626+
return !useRawUidV3
630627
? TokenUtils.getAdvertisingIdV2FromIdentity(identityString, firstLevelSalt, rotatingSalt)
631628
: TokenUtils.getAdvertisingIdV3FromIdentity(identityScope, identityType, identityString, firstLevelSalt, rotatingSalt);
632629
}
633630

634-
public static byte[] getRawUid(IdentityType identityType, String identityString, IdentityScope identityScope, boolean useIdentityV3) {
635-
return !useIdentityV3
631+
public static byte[] getRawUid(IdentityType identityType, String identityString, IdentityScope identityScope, boolean useRawUidV3) {
632+
return !useRawUidV3
636633
? TokenUtils.getAdvertisingIdV2FromIdentity(identityString, firstLevelSalt, rotatingSalt123.getSalt())
637634
: TokenUtils.getAdvertisingIdV3FromIdentity(identityScope, identityType, identityString, firstLevelSalt, rotatingSalt123.getSalt());
638635
}
639636

640637
private byte[] getAdvertisingIdFromIdentityHash(IdentityType identityType, String identityString, String firstLevelSalt, String rotatingSalt) {
641-
return !useIdentityV3()
638+
return !useRawUidV3()
642639
? TokenUtils.getAdvertisingIdV2FromIdentityHash(identityString, firstLevelSalt, rotatingSalt)
643640
: TokenUtils.getAdvertisingIdV3FromIdentityHash(getIdentityScope(), identityType, identityString, firstLevelSalt, rotatingSalt);
644641
}
@@ -665,7 +662,7 @@ private JsonObject setupIdentityMapServiceLinkTest() {
665662

666663
protected TokenVersion getTokenVersion() {return TokenVersion.V4;}
667664

668-
final boolean useIdentityV3() { return getTokenVersion() != TokenVersion.V2; }
665+
protected boolean useRawUidV3() { return false; }
669666
protected IdentityScope getIdentityScope() { return IdentityScope.UID2; }
670667
protected void addAdditionalTokenGenerateParams(JsonObject payload) {}
671668

@@ -816,7 +813,10 @@ private AdvertisingToken validateAndGetToken(EncryptedTokenEncoder encoder, Json
816813
final String advertisingTokenString = body.getString("advertising_token");
817814
validateAdvertisingToken(advertisingTokenString, getTokenVersion(), getIdentityScope(), identityType);
818815
AdvertisingToken advertisingToken = encoder.decodeAdvertisingToken(advertisingTokenString);
819-
if (getTokenVersion() == TokenVersion.V4) {
816+
817+
// without useIdentityV3() the assert will be trigger as there's no IdentityType in v4 token generated with
818+
// a raw UID v2 as old raw UID format doesn't store the identity type (and scope)
819+
if (useRawUidV3() && getTokenVersion() == TokenVersion.V4) {
820820
assertEquals(identityType, advertisingToken.userIdentity.identityType);
821821
}
822822
return advertisingToken;

0 commit comments

Comments
 (0)