Skip to content

Commit 245768a

Browse files
Fix unbounded path label
1 parent b9edd9f commit 245768a

File tree

4 files changed

+44
-20
lines changed

4 files changed

+44
-20
lines changed

src/main/java/com/uid2/optout/Main.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.uid2.optout;
22

3-
import com.uid2.optout.vertx.OptOutLogProducer;
4-
import com.uid2.optout.vertx.OptOutServiceVerticle;
5-
import com.uid2.optout.vertx.PartnerConfigMonitor;
6-
import com.uid2.optout.vertx.PartnerConfigMonitorV2;
3+
import com.uid2.optout.vertx.*;
74
import com.uid2.shared.ApplicationVersion;
85
import com.uid2.shared.Utils;
96
import com.uid2.shared.attest.AttestationResponseHandler;
@@ -223,7 +220,8 @@ private static void setupMetrics(MicrometerMetricsOptions metricOptions) {
223220
.meterFilter(new PrometheusRenameFilter())
224221
.meterFilter(MeterFilter.replaceTagValues(Label.HTTP_PATH.toString(), actualPath -> {
225222
try {
226-
return HttpUtils.normalizePath(actualPath).split("\\?")[0];
223+
String normalized = HttpUtils.normalizePath(actualPath).split("\\?")[0];
224+
return Endpoints.pathSet().contains(normalized) ? normalized : "/unknown";
227225
} catch (IllegalArgumentException e) {
228226
return actualPath;
229227
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.uid2.optout.vertx;
2+
3+
import java.util.Set;
4+
import java.util.stream.Collectors;
5+
import java.util.stream.Stream;
6+
7+
public enum Endpoints {
8+
OPS_HEALTHCHECK("/ops/healthcheck"),
9+
OPTOUT_REFRESH("/optout/refresh"),
10+
OPTOUT_WRITE("/optout/write"),
11+
OPTOUT_REPLICATE("/optout/replicate"),
12+
OPTOUT_PARTNER_MOCK("/optout/partner_mock");
13+
private final String path;
14+
15+
Endpoints(final String path) {
16+
this.path = path;
17+
}
18+
19+
public static Set<String> pathSet() {
20+
return Stream.of(Endpoints.values()).map(Endpoints::toString).collect(Collectors.toSet());
21+
}
22+
23+
@Override
24+
public String toString() {
25+
return path;
26+
}
27+
}

src/main/java/com/uid2/optout/vertx/OptOutServiceVerticle.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,11 @@
3939
import java.util.concurrent.atomic.AtomicReference;
4040
import java.util.stream.Collectors;
4141

42+
import static com.uid2.optout.vertx.Endpoints.*;
43+
4244
public class OptOutServiceVerticle extends AbstractVerticle {
4345
public static final String IDENTITY_HASH = "identity_hash";
4446
public static final String ADVERTISING_ID = "advertising_id";
45-
public static final String REFRESH_METHOD = "/optout/refresh";
46-
public static final String WRITE_METHOD = "/optout/write";
47-
public static final String REPLICATE_METHOD = "/optout/replicate";
48-
public static final String HEALTHCHECK_METHOD = "/ops/healthcheck";
49-
public static final String OPTOUT_PARTNER_MOCK_METHOD = "/optout/partner_mock";
5047

5148
private static final Logger LOGGER = LoggerFactory.getLogger(OptOutServiceVerticle.class);
5249
private final HealthComponent healthComponent = HealthManager.instance.registerComponent("http-server");
@@ -168,18 +165,18 @@ private Router createRouter() {
168165
.allowedHeader("Access-Control-Allow-Headers")
169166
.allowedHeader("Content-Type"));
170167

171-
router.route(WRITE_METHOD)
168+
router.route(Endpoints.OPTOUT_WRITE.toString())
172169
.handler(internalAuth.handle(this::handleWrite));
173-
router.route(REPLICATE_METHOD)
170+
router.route(Endpoints.OPTOUT_REPLICATE.toString())
174171
.handler(auth.handle(this::handleReplicate, Role.OPTOUT));
175-
router.route(REFRESH_METHOD)
172+
router.route(Endpoints.OPTOUT_REFRESH.toString())
176173
.handler(auth.handle(attest.handle(this::handleRefresh, Role.OPERATOR), Role.OPERATOR));
177-
router.get(HEALTHCHECK_METHOD)
174+
router.get(Endpoints.OPS_HEALTHCHECK.toString())
178175
.handler(this::handleHealthCheck);
179176

180177
if (this.enableOptOutPartnerMock) {
181178
final OperatorKey loopbackClient = new OperatorKey("", "", "loopback", "loopback", "loopback", 0, false, "");
182-
router.route(OPTOUT_PARTNER_MOCK_METHOD).handler(auth.loopbackOnly(this::handleOptOutPartnerMock, loopbackClient));
179+
router.route(Endpoints.OPTOUT_PARTNER_MOCK.toString()).handler(auth.loopbackOnly(this::handleOptOutPartnerMock, loopbackClient));
183180
}
184181

185182
//// if enabled, this would add handler for exposing prometheus metrics

src/test/java/com/uid2/optout/vertx/OptOutServiceVerticleTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.ArrayList;
2424
import java.util.List;
2525

26+
import static com.uid2.optout.vertx.Endpoints.OPTOUT_WRITE;
27+
2628
@RunWith(VertxUnitRunner.class)
2729
public class OptOutServiceVerticleTest {
2830
private static final String INTERNAL_TEST_KEY = "test-operator-key";
@@ -92,7 +94,7 @@ public void writeId_expect200(TestContext context) {
9294

9395
@Test
9496
public void getHealthCheck_expectOK(TestContext context) {
95-
verifyStatus(context, OptOutServiceVerticle.HEALTHCHECK_METHOD, 200);
97+
verifyStatus(context, Endpoints.OPS_HEALTHCHECK.toString(), 200);
9698
}
9799

98100
@Test
@@ -139,7 +141,7 @@ public void replicate_expect200(TestContext context) {
139141
public void testQuorumClient_expectSuccess(TestContext context) {
140142
String[] uris = new String[3];
141143
for (int i = 0; i < 3; ++i) {
142-
uris[i] = String.format("http://127.0.0.1:%d%s", Const.Port.ServicePortForOptOut, OptOutServiceVerticle.WRITE_METHOD);
144+
uris[i] = String.format("http://127.0.0.1:%d%s", Const.Port.ServicePortForOptOut, Endpoints.OPTOUT_WRITE);
143145
}
144146

145147
QuorumWebClient quorumClient = new QuorumWebClient(vertx, uris);
@@ -155,7 +157,7 @@ public void testQuorumClient_expectSuccess(TestContext context) {
155157
public void testQuorumClient1Failure_expectSuccess(TestContext context) {
156158
String[] uris = new String[3];
157159
for (int i = 0; i < 2; ++i) {
158-
uris[i] = String.format("http://127.0.0.1:%d%s", Const.Port.ServicePortForOptOut, OptOutServiceVerticle.WRITE_METHOD);
160+
uris[i] = String.format("http://127.0.0.1:%d%s", Const.Port.ServicePortForOptOut, Endpoints.OPTOUT_WRITE);
159161
}
160162
uris[2] = "http://httpstat.us/404";
161163

@@ -201,7 +203,7 @@ private String writeQuery(byte[] identityHash, byte[] advertisingId) {
201203
}
202204

203205
private String writeQuery(String identityHashB64, String advertisingIdB64) {
204-
return String.format("%s?%s=%s&%s=%s", OptOutServiceVerticle.WRITE_METHOD,
206+
return String.format("%s?%s=%s&%s=%s", Endpoints.OPTOUT_WRITE,
205207
OptOutServiceVerticle.IDENTITY_HASH,
206208
identityHashB64,
207209
OptOutServiceVerticle.ADVERTISING_ID,
@@ -214,7 +216,7 @@ private String replicateQuery(long id) {
214216
}
215217

216218
private String replicateQuery(String identityHashB64, String advertisingIdB64) {
217-
return String.format("%s?%s=%s&%s=%s", OptOutServiceVerticle.REPLICATE_METHOD,
219+
return String.format("%s?%s=%s&%s=%s", Endpoints.OPTOUT_REPLICATE,
218220
OptOutServiceVerticle.IDENTITY_HASH,
219221
identityHashB64,
220222
OptOutServiceVerticle.ADVERTISING_ID,

0 commit comments

Comments
 (0)