Skip to content

Commit 83cec23

Browse files
authored
UID2-5211 Add disable_optout_token feature flag (#1605)
* Add disable_optout_token feature flag * Add comment for removing the FF test * Remove disable_optout_token param from private operator configs
1 parent cfb3bdc commit 83cec23

File tree

9 files changed

+67
-7
lines changed

9 files changed

+67
-7
lines changed

conf/docker-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@
4545
"format": "json"
4646
},
4747
"config_scan_period_ms": 5000
48-
}
48+
},
49+
"disable_optout_token": false
4950
}

conf/integ-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
"url": "http://localhost:8088/operator/config"
2222
},
2323
"config_scan_period_ms": 300000
24-
}
24+
},
25+
"disable_optout_token": false
2526
}

conf/local-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,6 @@
4444
"format": "json"
4545
},
4646
"config_scan_period_ms": 5000
47-
}
47+
},
48+
"disable_optout_token": false
4849
}

conf/local-e2e-docker-public-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,6 @@
4040
"url": "http://core:8088/operator/config"
4141
},
4242
"config_scan_period_ms": 300000
43-
}
43+
},
44+
"disable_optout_token": false
4445
}

conf/local-e2e-public-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,6 @@
4646
"url": "http://localhost:8088/operator/config"
4747
},
4848
"config_scan_period_ms": 300000
49-
}
49+
},
50+
"disable_optout_token": false
5051
}

conf/validator-latest-e2e-docker-public-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,6 @@
3939
"url": "http://core:8088/operator/config"
4040
},
4141
"config_scan_period_ms": 300000
42-
}
42+
},
43+
"disable_optout_token": false
4344
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,6 @@ public class Config extends com.uid2.shared.Const.Config {
3232

3333
public static final String ConfigScanPeriodMsProp = "config_scan_period_ms";
3434
public static final String IdentityV3Prop = "identity_v3";
35+
public static final String DisableOptoutTokenProp = "disable_optout_token";
3536
}
3637
}

src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public class UIDOperatorVerticle extends AbstractVerticle {
100100
private final Clock clock;
101101
private final boolean allowLegacyAPI;
102102
private final boolean identityV3Enabled;
103+
private final boolean disableOptoutToken;
103104
protected IUIDOperatorService idService;
104105
private final Map<String, DistributionSummary> _identityMapMetricSummaries = new HashMap<>();
105106
private final Map<Tuple.Tuple2<String, Boolean>, DistributionSummary> _refreshDurationMetricSummaries = new HashMap<>();
@@ -185,6 +186,7 @@ public UIDOperatorVerticle(IConfigService configService,
185186
this.optOutStatusMaxRequestSize = config.getInteger(Const.Config.OptOutStatusMaxRequestSize, 5000);
186187
this.allowLegacyAPI = config.getBoolean(Const.Config.AllowLegacyAPIProp, true);
187188
this.identityV3Enabled = config.getBoolean(IdentityV3Prop, false);
189+
this.disableOptoutToken = config.getBoolean(DisableOptoutTokenProp, false);
188190
}
189191

190192
@Override
@@ -1087,7 +1089,7 @@ private void handleTokenGenerateV2(RoutingContext rc) {
10871089
identityExpiresAfter);
10881090

10891091
if (t.isEmptyToken()) {
1090-
if (optoutCheckPolicy.getItem1() == OptoutCheckPolicy.DoNotRespect) { // only legacy can use this policy
1092+
if (optoutCheckPolicy.getItem1() == OptoutCheckPolicy.DoNotRespect && !this.disableOptoutToken) { // only legacy can use this policy
10911093
final InputUtil.InputVal optOutTokenInput = input.getIdentityType() == IdentityType.Email
10921094
? InputUtil.InputVal.validEmail(OptOutTokenIdentityForEmail, OptOutTokenIdentityForEmail)
10931095
: InputUtil.InputVal.validPhone(OptOutTokenIdentityForPhone, OptOutTokenIdentityForPhone);

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

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ public void deployVerticle(Vertx vertx, VertxTestContext testContext, TestInfo t
129129
when(this.secureLinkValidatorService.validateRequest(any(RoutingContext.class), any(JsonObject.class), any(Role.class))).thenReturn(true);
130130

131131
setupConfig(config);
132+
// TODO: Remove this when we remove tokenGenerateOptOutTokenWithDisableOptoutTokenFF test
133+
if(testInfo.getTestMethod().isPresent() &&
134+
testInfo.getTestMethod().get().getName().equals("tokenGenerateOptOutTokenWithDisableOptoutTokenFF")) {
135+
config.put(Const.Config.DisableOptoutTokenProp, true);
136+
}
132137
if(testInfo.getDisplayName().equals("cstgNoPhoneSupport(Vertx, VertxTestContext)")) {
133138
config.put("enable_phone_support", false);
134139
}
@@ -165,6 +170,7 @@ private void setupConfig(JsonObject config) {
165170
config.put(Const.Config.AllowClockSkewSecondsProp, 3600);
166171
config.put(Const.Config.OptOutStatusApiEnabled, true);
167172
config.put(Const.Config.OptOutStatusMaxRequestSize, optOutStatusMaxRequestSize);
173+
config.put(Const.Config.DisableOptoutTokenProp, false);
168174
}
169175

170176
private static byte[] makeAesKey(String prefix) {
@@ -1207,6 +1213,51 @@ void tokenGenerateOptOutToken(String policyParameterKey, String identity, Identi
12071213
});
12081214
}
12091215

1216+
@ParameterizedTest // TODO: remove test after optout check phase 3
1217+
@CsvSource({"policy,[email protected],Email",
1218+
"policy,+01234567890,Phone",
1219+
"optout_check,[email protected],Email",
1220+
"optout_check,+01234567890,Phone"})
1221+
void tokenGenerateOptOutTokenWithDisableOptoutTokenFF(String policyParameterKey, String identity, IdentityType identityType,
1222+
Vertx vertx, VertxTestContext testContext) {
1223+
ClientKey oldClientKey = new ClientKey(
1224+
null,
1225+
null,
1226+
Utils.toBase64String(clientSecret),
1227+
"test-contact",
1228+
newClientCreationDateTime.minusSeconds(5),
1229+
Set.of(Role.GENERATOR),
1230+
201,
1231+
null
1232+
);
1233+
when(clientKeyProvider.get(any())).thenReturn(oldClientKey);
1234+
when(clientKeyProvider.getClientKey(any())).thenReturn(oldClientKey);
1235+
when(clientKeyProvider.getOldestClientKey(201)).thenReturn(oldClientKey);
1236+
when(this.optOutStore.getLatestEntry(any())).thenReturn(Instant.now());
1237+
setupSalts();
1238+
setupKeys();
1239+
1240+
JsonObject v2Payload = new JsonObject();
1241+
v2Payload.put(identityType.name().toLowerCase(), identity);
1242+
v2Payload.put(policyParameterKey, OptoutCheckPolicy.DoNotRespect.policy);
1243+
1244+
sendTokenGenerate("v2", vertx,
1245+
"", v2Payload, 200,
1246+
json -> {
1247+
assertEquals("optout", json.getString("status"));
1248+
1249+
decodeV2RefreshToken(json);
1250+
1251+
assertTokenStatusMetrics(
1252+
201,
1253+
TokenResponseStatsCollector.Endpoint.GenerateV2,
1254+
TokenResponseStatsCollector.ResponseStatus.OptOut,
1255+
TokenResponseStatsCollector.PlatformType.Other);
1256+
1257+
testContext.completeNow();
1258+
});
1259+
}
1260+
12101261
@ParameterizedTest
12111262
@ValueSource(strings = {"v1", "v2"})
12121263
void tokenGenerateForEmail(String apiVersion, Vertx vertx, VertxTestContext testContext) {

0 commit comments

Comments
 (0)