diff --git a/pom.xml b/pom.xml index 4ae9367e5..6b7a9b74a 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,6 @@ 1.3.7 2.9.6 - 1.5.12 UTF-8 diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java index ab27504e5..a53b1507c 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java +++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java @@ -118,15 +118,15 @@ public class KeysController { throw new WebApplicationException(Response.Status.UNAUTHORIZED); } - if (account.isPresent()) { - rateLimiters.getPreKeysLimiter().validate(account.get().getNumber() + "__" + number + "." + deviceId); - } - Optional target = accounts.get(number); OptionalAccess.verify(account, accessKey, target, deviceId); assert(target.isPresent()); + if (account.isPresent()) { + rateLimiters.getPreKeysLimiter().validate(account.get().getNumber() + "__" + number + "." + deviceId); + } + Optional> targetKeys = getLocalKeys(target.get(), deviceId); List devices = new LinkedList<>(); diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java index 8766e3b7f..ce9317554 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java +++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java @@ -16,6 +16,9 @@ */ package org.whispersystems.textsecuregcm.controllers; +import com.codahale.metrics.Meter; +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.SharedMetricRegistries; import com.codahale.metrics.annotation.Timed; import com.google.protobuf.ByteString; import org.slf4j.Logger; @@ -41,6 +44,7 @@ import org.whispersystems.textsecuregcm.storage.AccountsManager; import org.whispersystems.textsecuregcm.storage.Device; import org.whispersystems.textsecuregcm.storage.MessagesManager; import org.whispersystems.textsecuregcm.util.Base64; +import org.whispersystems.textsecuregcm.util.Constants; import org.whispersystems.textsecuregcm.util.Util; import org.whispersystems.textsecuregcm.websocket.WebSocketConnection; @@ -64,13 +68,17 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; +import static com.codahale.metrics.MetricRegistry.name; import io.dropwizard.auth.Auth; @SuppressWarnings("OptionalUsedAsFieldOrParameterType") @Path("/v1/messages") public class MessageController { - private final Logger logger = LoggerFactory.getLogger(MessageController.class); + private final Logger logger = LoggerFactory.getLogger(MessageController.class); + private final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); + private final Meter unidentifiedMeter = metricRegistry.meter(name(getClass(), "delivery", "unidentified")); + private final Meter identifiedMeter = metricRegistry.meter(name(getClass(), "delivery", "identified" )); private final RateLimiters rateLimiters; private final PushSender pushSender; @@ -113,6 +121,12 @@ public class MessageController { rateLimiters.getMessagesLimiter().validate(source.get().getNumber() + "__" + destinationName); } + if (source.isPresent() && !source.get().getNumber().equals(destinationName)) { + identifiedMeter.mark(); + } else { + unidentifiedMeter.mark(); + } + try { boolean isSyncMessage = source.isPresent() && source.get().getNumber().equals(destinationName); @@ -122,6 +136,8 @@ public class MessageController { else destination = source; OptionalAccess.verify(source, accessKey, destination); + assert(destination.isPresent()); + validateCompleteDeviceList(destination.get(), messages.getMessages(), isSyncMessage); validateRegistrationIds(destination.get(), messages.getMessages());