From acdf37561f130a2585f327a3f160c920cb8c0e21 Mon Sep 17 00:00:00 2001 From: Ravi Khadiwala Date: Thu, 8 Aug 2024 16:28:01 -0500 Subject: [PATCH] Count requests that supply auth to boost endpoints --- .../controllers/SubscriptionController.java | 41 +++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java index cb876c36c..9c9b0c121 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/SubscriptionController.java @@ -130,6 +130,9 @@ public class SubscriptionController { private static final String INVALID_ACCEPT_LANGUAGE_COUNTER_NAME = MetricsUtil.name(SubscriptionController.class, "invalidAcceptLanguage"); private static final String RECEIPT_ISSUED_COUNTER_NAME = MetricsUtil.name(SubscriptionController.class, "receiptIssued"); + private static final String AUTHENTICATED_BOOST_OPERATION_COUNTER_NAME = + MetricsUtil.name(SubscriptionController.class, "authenticatedBoostOperation"); + public static final String OPERATION_TAG_NAME = "operation"; private static final String PROCESSOR_TAG_NAME = "processor"; private static final String TYPE_TAG_NAME = "type"; private static final String SUBSCRIPTION_TYPE_TAG_NAME = "subscriptionType"; @@ -656,9 +659,17 @@ public class SubscriptionController { @Path("/boost/create") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public CompletableFuture createBoostPaymentIntent(@NotNull @Valid CreateBoostRequest request, + public CompletableFuture createBoostPaymentIntent( + @ReadOnly @Auth Optional authenticatedAccount, + @NotNull @Valid CreateBoostRequest request, @HeaderParam(HttpHeaders.USER_AGENT) final String userAgent) { + if (authenticatedAccount.isPresent()) { + Metrics.counter(AUTHENTICATED_BOOST_OPERATION_COUNTER_NAME, Tags.of( + UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(OPERATION_TAG_NAME, "boost/create"))).increment(); + } + return CompletableFuture.runAsync(() -> { if (request.level == null) { request.level = oneTimeDonationConfiguration.boost().level(); @@ -720,9 +731,18 @@ public class SubscriptionController { @Path("/boost/paypal/create") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public CompletableFuture createPayPalBoost(@NotNull @Valid CreatePayPalBoostRequest request, + public CompletableFuture createPayPalBoost( + @ReadOnly @Auth Optional authenticatedAccount, + @NotNull @Valid CreatePayPalBoostRequest request, + @HeaderParam(HttpHeaders.USER_AGENT) final String userAgent, @Context ContainerRequestContext containerRequestContext) { + if (authenticatedAccount.isPresent()) { + Metrics.counter(AUTHENTICATED_BOOST_OPERATION_COUNTER_NAME, Tags.of( + UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(OPERATION_TAG_NAME, "boost/paypal/create"))).increment(); + } + return CompletableFuture.runAsync(() -> { if (request.level == null) { request.level = oneTimeDonationConfiguration.boost().level(); @@ -762,9 +782,17 @@ public class SubscriptionController { @Path("/boost/paypal/confirm") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public CompletableFuture confirmPayPalBoost(@NotNull @Valid ConfirmPayPalBoostRequest request, + public CompletableFuture confirmPayPalBoost( + @ReadOnly @Auth Optional authenticatedAccount, + @NotNull @Valid ConfirmPayPalBoostRequest request, @HeaderParam(HttpHeaders.USER_AGENT) final String userAgent) { + if (authenticatedAccount.isPresent()) { + Metrics.counter(AUTHENTICATED_BOOST_OPERATION_COUNTER_NAME, Tags.of( + UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(OPERATION_TAG_NAME, "boost/paypal/confirm"))).increment(); + } + return CompletableFuture.runAsync(() -> { if (request.level == null) { request.level = oneTimeDonationConfiguration.boost().level(); @@ -801,9 +829,16 @@ public class SubscriptionController { @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public CompletableFuture createBoostReceiptCredentials( + @ReadOnly @Auth Optional authenticatedAccount, @NotNull @Valid final CreateBoostReceiptCredentialsRequest request, @HeaderParam(HttpHeaders.USER_AGENT) final String userAgent) { + if (authenticatedAccount.isPresent()) { + Metrics.counter(AUTHENTICATED_BOOST_OPERATION_COUNTER_NAME, Tags.of( + UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(OPERATION_TAG_NAME, "boost/receipt_credentials"))).increment(); + } + final SubscriptionProcessorManager manager = getManagerForProcessor(request.processor); return manager.getPaymentDetails(request.paymentIntentId)