diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java index 921274552..22b1feb05 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java @@ -138,18 +138,7 @@ public class DirectoryController { public Response getTokenPresence(@Auth Account account, @PathParam("token") String token) throws RateLimitExceededException { - rateLimiters.getContactsLimiter().validate(account.getNumber()); - - try { - Optional contact = directory.get(decodeToken(token)); - - if (contact.isPresent()) return Response.ok().entity(contact.get()).build(); - else return Response.status(404).build(); - - } catch (IOException e) { - logger.info("Bad token", e); - return Response.status(404).build(); - } + return Response.status(429).build(); } @Timed @@ -157,37 +146,12 @@ public class DirectoryController { @Path("/tokens") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - public ClientContacts getContactIntersection(@Auth Account account, + public Response getContactIntersection(@Auth Account account, @HeaderParam("X-Forwarded-For") String forwardedFor, @Valid ClientContactTokens contacts) throws RateLimitExceededException { - String requester = Arrays.stream(forwardedFor.split(",")) - .map(String::trim) - .reduce((a, b) -> b) - .orElseThrow(); - - if (Stream.of(FRONTED_REGIONS).noneMatch(region -> account.getNumber().startsWith(region))) { - rateLimiters.getContactsIpLimiter().validate(requester); - } - - rateLimiters.getContactsLimiter().validate(account.getNumber(), contacts.getContacts().size()); - contactsHistogram.update(contacts.getContacts().size()); - contactsMeter.mark(contacts.getContacts().size()); - - try { - List tokens = new LinkedList<>(); - - for (String encodedContact : contacts.getContacts()) { - tokens.add(decodeToken(encodedContact)); - } - - List intersection = directory.get(tokens); - return new ClientContacts(intersection); - } catch (IOException e) { - logger.info("Bad token", e); - throw new WebApplicationException(Response.status(400).build()); - } + return Response.status(429).build(); } private byte[] decodeToken(String encoded) throws IOException { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java index 791141dbe..d049e8e1a 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java @@ -190,9 +190,6 @@ public class DirectoryControllerTest { .put(Entity.entity(new ClientContactTokens(tokens), MediaType.APPLICATION_JSON_TYPE)); - assertThat(response.getStatus()).isEqualTo(200); - assertThat(response.readEntity(ClientContactTokens.class).getContacts()).isEqualTo(expectedResponse); - - verify(ipLimiter).validate("1.1.1.1"); + assertThat(response.getStatus()).isEqualTo(429); } }