From e07c521288e05fbf23b29581d7220199df1890df Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Mon, 24 Oct 2016 10:11:56 -0700 Subject: [PATCH] Limit voice calls daily as well // FREEBIE --- .../configuration/RateLimitsConfiguration.java | 7 +++++++ .../textsecuregcm/controllers/AccountController.java | 1 + .../textsecuregcm/limits/RateLimiters.java | 9 +++++++++ 3 files changed, 17 insertions(+) diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java b/src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java index b0cc3dae6..b11d0eb5d 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java +++ b/src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java @@ -26,6 +26,9 @@ public class RateLimitsConfiguration { @JsonProperty private RateLimitConfiguration voiceDestination = new RateLimitConfiguration(2, 1.0 / 2.0); + @JsonProperty + private RateLimitConfiguration voiceDestinationDaily = new RateLimitConfiguration(10, 10.0 / (24.0 * 60.0)); + @JsonProperty private RateLimitConfiguration verifyNumber = new RateLimitConfiguration(2, 2); @@ -79,6 +82,10 @@ public class RateLimitsConfiguration { return voiceDestination; } + public RateLimitConfiguration getVoiceDestinationDaily() { + return voiceDestinationDaily; + } + public RateLimitConfiguration getVerifyNumber() { return verifyNumber; } diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java index 76f7486b0..365d6962d 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -128,6 +128,7 @@ public class AccountController { break; case "voice": rateLimiters.getVoiceDestinationLimiter().validate(number); + rateLimiters.getVoiceDestinationDailyLimiter().validate(number); break; default: throw new WebApplicationException(Response.status(422).build()); diff --git a/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java b/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java index 3efb9e2a7..9bbc4182f 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java +++ b/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java @@ -25,6 +25,7 @@ public class RateLimiters { private final RateLimiter smsDestinationLimiter; private final RateLimiter voiceDestinationLimiter; + private final RateLimiter voiceDestinationDailyLimiter; private final RateLimiter verifyLimiter; private final RateLimiter attachmentLimiter; @@ -44,6 +45,10 @@ public class RateLimiters { config.getVoiceDestination().getBucketSize(), config.getVoiceDestination().getLeakRatePerMinute()); + this.voiceDestinationDailyLimiter = new RateLimiter(cacheClient, "voxDestinationDaily", + config.getVoiceDestinationDaily().getBucketSize(), + config.getVoiceDestinationDaily().getLeakRatePerMinute()); + this.verifyLimiter = new RateLimiter(cacheClient, "verify", config.getVerifyNumber().getBucketSize(), config.getVerifyNumber().getLeakRatePerMinute()); @@ -106,6 +111,10 @@ public class RateLimiters { return voiceDestinationLimiter; } + public RateLimiter getVoiceDestinationDailyLimiter() { + return voiceDestinationDailyLimiter; + } + public RateLimiter getVerifyLimiter() { return verifyLimiter; }