From 628a112b386826caaf0acb33e96c77df36f58f8a Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Thu, 18 Aug 2022 13:02:37 -0500 Subject: [PATCH] Include country code for verify failure --- .../textsecuregcm/sms/TwilioSmsSender.java | 14 +++++++++----- .../textsecuregcm/sms/TwilioVerifySender.java | 16 ++++++++++------ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java index 6c1fa3427..e3bbb2221 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java @@ -133,7 +133,8 @@ public class TwilioSmsSender { smsMeter.mark(); return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) - .thenApply(this::parseResponse).handle(this::processResponse); + .thenApply(this::parseResponse) + .handle((response, throwable) -> processResponse(response, throwable, destination)); } private String getBodyFormatString(@Nonnull String destination, @Nullable String clientType) { @@ -198,26 +199,29 @@ public class TwilioSmsSender { voxMeter.mark(); return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) - .thenApply(this::parseResponse) - .handle(this::processResponse); + .thenApply(this::parseResponse) + .handle((response, throwable) -> processResponse(response, throwable, destination)); } private String getRandom(Random random, List elements) { return elements.get(random.nextInt(elements.size())); } - private boolean processResponse(TwilioResponse response, Throwable throwable) { + private boolean processResponse(TwilioResponse response, Throwable throwable, String destination) { if (response != null && response.isSuccess()) { priceMeter.mark((long) (response.successResponse.price * 1000)); return true; } else if (response != null && response.isFailure()) { - logger.debug("Twilio request failed: " + response.failureResponse.status + "(code " + response.failureResponse.code + "), " + response.failureResponse.message); Metrics.counter(FAILED_REQUEST_COUNTER_NAME, SERVICE_NAME_TAG, "classic", STATUS_CODE_TAG_NAME, String.valueOf(response.failureResponse.status), ERROR_CODE_TAG_NAME, String.valueOf(response.failureResponse.code)).increment(); + logger.info("Failed with code={}, country={}", + response.failureResponse.code, + Util.getCountryCode(destination)); + return false; } else if (throwable != null) { logger.info("Twilio request failed", throwable); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioVerifySender.java b/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioVerifySender.java index a57ceb4dd..797857e97 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioVerifySender.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioVerifySender.java @@ -19,7 +19,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; -import java.util.function.BiFunction; import javax.annotation.Nullable; import javax.validation.constraints.NotEmpty; import org.slf4j.Logger; @@ -113,7 +112,7 @@ class TwilioVerifySender { return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(this::parseResponse) - .handle(this::extractVerifySid); + .handle((response, throwable) -> extractVerifySid(response, throwable, destination)); } private Optional findBestLocale(List priorityList) { @@ -138,18 +137,19 @@ class TwilioVerifySender { } } - CompletableFuture> deliverVoxVerificationWithVerify(String destination, String verificationCode, - List languageRanges) { + CompletableFuture> deliverVoxVerificationWithVerify(String destination, + String verificationCode, List languageRanges) { HttpRequest request = buildVerifyRequest("call", destination, verificationCode, findBestLocale(languageRanges), Optional.empty()); return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(this::parseResponse) - .handle(this::extractVerifySid); + .handle((response, throwable) -> extractVerifySid(response, throwable, destination)); } - private Optional extractVerifySid(TwilioVerifyResponse twilioVerifyResponse, Throwable throwable) { + private Optional extractVerifySid(TwilioVerifyResponse twilioVerifyResponse, Throwable throwable, + String destination) { if (throwable != null) { logger.warn("Failed to send Twilio request", throwable); @@ -162,6 +162,10 @@ class TwilioVerifySender { TwilioSmsSender.STATUS_CODE_TAG_NAME, String.valueOf(twilioVerifyResponse.failureResponse.status), TwilioSmsSender.ERROR_CODE_TAG_NAME, String.valueOf(twilioVerifyResponse.failureResponse.code)).increment(); + logger.info("Failed with code={}, country={}", + twilioVerifyResponse.failureResponse.code, + Util.getCountryCode(destination)); + return Optional.empty(); }