From b36155cdded06c8fab5d32b3a34396b6813b66f5 Mon Sep 17 00:00:00 2001 From: sean wibisono Date: Mon, 2 Mar 2026 13:28:28 +1100 Subject: [PATCH 1/4] add boolean in MappedIdentity to enable calculating previousAdvertisingId --- src/main/java/com/uid2/operator/model/MapRequest.java | 10 ++++++++++ .../java/com/uid2/operator/model/MappedIdentity.java | 7 +++++++ .../com/uid2/operator/service/UIDOperatorService.java | 10 ++++++++-- .../com/uid2/operator/vertx/UIDOperatorVerticle.java | 3 ++- .../java/com/uid2/operator/UIDOperatorServiceTest.java | 6 +++--- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/uid2/operator/model/MapRequest.java b/src/main/java/com/uid2/operator/model/MapRequest.java index 1d70c7ba3..afeb2020c 100644 --- a/src/main/java/com/uid2/operator/model/MapRequest.java +++ b/src/main/java/com/uid2/operator/model/MapRequest.java @@ -6,13 +6,23 @@ public final class MapRequest { public final UserIdentity userIdentity; public final Instant asOf; public final IdentityEnvironment identityEnvironment; + public final boolean includePreviousAdvertisingId; public MapRequest( UserIdentity userIdentity, Instant asOf, IdentityEnvironment identityEnvironment) { + this(userIdentity, asOf, identityEnvironment, true); + } + + public MapRequest( + UserIdentity userIdentity, + Instant asOf, + IdentityEnvironment identityEnvironment, + boolean includePreviousAdvertisingId) { this.userIdentity = userIdentity; this.asOf = asOf; this.identityEnvironment = identityEnvironment; + this.includePreviousAdvertisingId = includePreviousAdvertisingId; } } diff --git a/src/main/java/com/uid2/operator/model/MappedIdentity.java b/src/main/java/com/uid2/operator/model/MappedIdentity.java index df669c171..fd894f3f3 100644 --- a/src/main/java/com/uid2/operator/model/MappedIdentity.java +++ b/src/main/java/com/uid2/operator/model/MappedIdentity.java @@ -4,6 +4,13 @@ public class MappedIdentity { public static final MappedIdentity LogoutIdentity = new MappedIdentity(new byte[33], "", null, null); public final byte[] advertisingId; public final String bucketId; + /** + * The advertising ID computed using the previous rotating salt, or {@code null} if: + * + */ public final byte[] previousAdvertisingId; public final Long refreshFrom; diff --git a/src/main/java/com/uid2/operator/service/UIDOperatorService.java b/src/main/java/com/uid2/operator/service/UIDOperatorService.java index 9662dc59d..20531778c 100644 --- a/src/main/java/com/uid2/operator/service/UIDOperatorService.java +++ b/src/main/java/com/uid2/operator/service/UIDOperatorService.java @@ -156,7 +156,7 @@ public MappedIdentity mapIdentity(MapRequest request) { if (getGlobalOptOutResult(firstLevelHashIdentity, false).isOptedOut()) { return MappedIdentity.LogoutIdentity; } else { - return getMappedIdentity(firstLevelHashIdentity, request.asOf, request.identityEnvironment); + return getMappedIdentity(firstLevelHashIdentity, request.asOf, request.identityEnvironment, request.includePreviousAdvertisingId); } } @@ -248,9 +248,15 @@ private byte[] getFirstLevelHash(byte[] identityHash, Instant asOf) { } private MappedIdentity getMappedIdentity(UserIdentity firstLevelHashIdentity, Instant asOf, IdentityEnvironment env) { + return getMappedIdentity(firstLevelHashIdentity, asOf, env, false); + } + + private MappedIdentity getMappedIdentity(UserIdentity firstLevelHashIdentity, Instant asOf, IdentityEnvironment env, boolean includePreviousAdvertisingId) { final SaltEntry rotatingSalt = getSaltProviderSnapshot(asOf).getRotatingSalt(firstLevelHashIdentity.id); final byte[] advertisingId = getAdvertisingId(firstLevelHashIdentity, rotatingSalt.currentSalt(), rotatingSalt.currentKeySalt(), env); - final byte[] previousAdvertisingId = getPreviousAdvertisingId(firstLevelHashIdentity, rotatingSalt, asOf, env); + final byte[] previousAdvertisingId = includePreviousAdvertisingId + ? getPreviousAdvertisingId(firstLevelHashIdentity, rotatingSalt, asOf, env) + : null; final long refreshFrom = getRefreshFrom(rotatingSalt, asOf); return new MappedIdentity( diff --git a/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java b/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java index 503ac9ace..a4c4ebdac 100644 --- a/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java +++ b/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java @@ -1114,7 +1114,8 @@ private JsonObject handleIdentityMapCommon(RoutingContext rc, InputUtil.InputVal new MapRequest( input.toUserIdentity(this.identityScope, 0, now), now, - env)); + env, + false)); // v2 does not use previousAdvertisingId if (mappedIdentity.isOptedOut()) { final JsonObject resp = new JsonObject(); diff --git a/src/test/java/com/uid2/operator/UIDOperatorServiceTest.java b/src/test/java/com/uid2/operator/UIDOperatorServiceTest.java index 8356ffac2..1a572697a 100644 --- a/src/test/java/com/uid2/operator/UIDOperatorServiceTest.java +++ b/src/test/java/com/uid2/operator/UIDOperatorServiceTest.java @@ -835,7 +835,7 @@ void testMappedIdentityWithPreviousSaltReturnsPreviousUid() { var email = "test@uid.com"; InputUtil.InputVal emailInput = generateInputVal(TestIdentityInputType.Email, email); - MapRequest mapRequest = new MapRequest(emailInput.toUserIdentity(IdentityScope.UID2, 0, this.now), now, IdentityEnvironment.TEST); + MapRequest mapRequest = new MapRequest(emailInput.toUserIdentity(IdentityScope.UID2, 0, this.now), now, IdentityEnvironment.TEST); MappedIdentity mappedIdentity = uid2Service.mapIdentity(mapRequest); @@ -858,7 +858,7 @@ void testMappedIdentityWithOutdatedPreviousSaltReturnsNoPreviousUid(long extraMs var email = "test@uid.com"; InputUtil.InputVal emailInput = generateInputVal(TestIdentityInputType.Email, email); - MapRequest mapRequest = new MapRequest(emailInput.toUserIdentity(IdentityScope.UID2, 0, this.now), now, IdentityEnvironment.TEST); + MapRequest mapRequest = new MapRequest(emailInput.toUserIdentity(IdentityScope.UID2, 0, this.now), now, IdentityEnvironment.TEST); MappedIdentity mappedIdentity = uid2Service.mapIdentity(mapRequest); var expectedCurrentUID = UIDOperatorVerticleTest.getRawUid(IdentityScope.UID2, IdentityType.Email, email, FIRST_LEVEL_SALT, salt.currentSalt(), uid2Config.getBoolean(IdentityV3Prop)); @@ -878,7 +878,7 @@ void testMappedIdentityWithNoPreviousSaltReturnsNoPreviousUid() { var email = "test@uid.com"; InputUtil.InputVal emailInput = generateInputVal(TestIdentityInputType.Email, email); - MapRequest mapRequest = new MapRequest(emailInput.toUserIdentity(IdentityScope.UID2, 0, this.now), now, IdentityEnvironment.TEST); + MapRequest mapRequest = new MapRequest(emailInput.toUserIdentity(IdentityScope.UID2, 0, this.now), now, IdentityEnvironment.TEST); MappedIdentity mappedIdentity = uid2Service.mapIdentity(mapRequest); From 1d8818c2a99aa77ebe7b305a0cf003115fd0334f Mon Sep 17 00:00:00 2001 From: Release Workflow Date: Mon, 2 Mar 2026 03:52:02 +0000 Subject: [PATCH 2/4] [CI Pipeline] Released Snapshot version: 5.66.22-alpha-315-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index baeb256a4..cab4038a4 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.uid2 uid2-operator - 5.66.21 + 5.66.22-alpha-315-SNAPSHOT UTF-8 From a83a00e128c475436f9dab64336a1c8a8938f9ed Mon Sep 17 00:00:00 2001 From: Release Workflow Date: Mon, 2 Mar 2026 05:46:59 +0000 Subject: [PATCH 3/4] [CI Pipeline] Released Snapshot version: 5.66.23-alpha-316-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 321c49da3..73a821407 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.uid2 uid2-operator - 5.66.22-alpha-315-SNAPSHOT + 5.66.23-alpha-316-SNAPSHOT UTF-8 From 25933487f8b7399fb795bfcdda7848ff3bfdbd4e Mon Sep 17 00:00:00 2001 From: Release Workflow Date: Mon, 2 Mar 2026 07:04:16 +0000 Subject: [PATCH 4/4] [CI Pipeline] Released Snapshot version: 5.66.24-alpha-317-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 73a821407..fcd218bee 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.uid2 uid2-operator - 5.66.23-alpha-316-SNAPSHOT + 5.66.24-alpha-317-SNAPSHOT UTF-8