diff --git a/pom.xml b/pom.xml index da02b78c0..fcd218bee 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.uid2 uid2-operator - 5.66.29 + 5.66.24-alpha-317-SNAPSHOT UTF-8 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);