Add device limiters
This commit is contained in:
parent
2f85cd214e
commit
519f982604
|
@ -41,6 +41,20 @@ public class RateLimitsConfiguration {
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private RateLimitConfiguration messages = new RateLimitConfiguration(60, 60);
|
private RateLimitConfiguration messages = new RateLimitConfiguration(60, 60);
|
||||||
|
|
||||||
|
@JsonProperty
|
||||||
|
private RateLimitConfiguration allocateDevice = new RateLimitConfiguration(2, 1.0 / 2.0);
|
||||||
|
|
||||||
|
@JsonProperty
|
||||||
|
private RateLimitConfiguration verifyDevice = new RateLimitConfiguration(2, 2);
|
||||||
|
|
||||||
|
public RateLimitConfiguration getAllocateDevice() {
|
||||||
|
return allocateDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RateLimitConfiguration getVerifyDevice() {
|
||||||
|
return verifyDevice;
|
||||||
|
}
|
||||||
|
|
||||||
public RateLimitConfiguration getMessages() {
|
public RateLimitConfiguration getMessages() {
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ public class DeviceController {
|
||||||
public VerificationCode createDeviceToken(@Auth Account account)
|
public VerificationCode createDeviceToken(@Auth Account account)
|
||||||
throws RateLimitExceededException
|
throws RateLimitExceededException
|
||||||
{
|
{
|
||||||
rateLimiters.getVerifyLimiter().validate(account.getNumber()); //TODO: New limiter?
|
rateLimiters.getAllocateDeviceLimiter().validate(account.getNumber());
|
||||||
|
|
||||||
VerificationCode verificationCode = generateVerificationCode();
|
VerificationCode verificationCode = generateVerificationCode();
|
||||||
pendingDevices.store(account.getNumber(), verificationCode.getVerificationCode());
|
pendingDevices.store(account.getNumber(), verificationCode.getVerificationCode());
|
||||||
|
@ -96,7 +96,7 @@ public class DeviceController {
|
||||||
String number = header.getNumber();
|
String number = header.getNumber();
|
||||||
String password = header.getPassword();
|
String password = header.getPassword();
|
||||||
|
|
||||||
rateLimiters.getVerifyLimiter().validate(number); //TODO: New limiter?
|
rateLimiters.getVerifyDeviceLimiter().validate(number);
|
||||||
|
|
||||||
Optional<String> storedVerificationCode = pendingDevices.getCodeForNumber(number);
|
Optional<String> storedVerificationCode = pendingDevices.getCodeForNumber(number);
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,9 @@ public class RateLimiters {
|
||||||
private final RateLimiter preKeysLimiter;
|
private final RateLimiter preKeysLimiter;
|
||||||
private final RateLimiter messagesLimiter;
|
private final RateLimiter messagesLimiter;
|
||||||
|
|
||||||
|
private final RateLimiter allocateDeviceLimiter;
|
||||||
|
private final RateLimiter verifyDeviceLimiter;
|
||||||
|
|
||||||
public RateLimiters(RateLimitsConfiguration config, MemcachedClient memcachedClient) {
|
public RateLimiters(RateLimitsConfiguration config, MemcachedClient memcachedClient) {
|
||||||
this.smsDestinationLimiter = new RateLimiter(memcachedClient, "smsDestination",
|
this.smsDestinationLimiter = new RateLimiter(memcachedClient, "smsDestination",
|
||||||
config.getSmsDestination().getBucketSize(),
|
config.getSmsDestination().getBucketSize(),
|
||||||
|
@ -60,6 +63,22 @@ public class RateLimiters {
|
||||||
config.getMessages().getBucketSize(),
|
config.getMessages().getBucketSize(),
|
||||||
config.getMessages().getLeakRatePerMinute());
|
config.getMessages().getLeakRatePerMinute());
|
||||||
|
|
||||||
|
this.allocateDeviceLimiter = new RateLimiter(memcachedClient, "allocateDevice",
|
||||||
|
config.getAllocateDevice().getBucketSize(),
|
||||||
|
config.getAllocateDevice().getLeakRatePerMinute());
|
||||||
|
|
||||||
|
this.verifyDeviceLimiter = new RateLimiter(memcachedClient, "verifyDevice",
|
||||||
|
config.getVerifyDevice().getBucketSize(),
|
||||||
|
config.getVerifyDevice().getLeakRatePerMinute());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public RateLimiter getAllocateDeviceLimiter() {
|
||||||
|
return allocateDeviceLimiter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RateLimiter getVerifyDeviceLimiter() {
|
||||||
|
return verifyDeviceLimiter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RateLimiter getMessagesLimiter() {
|
public RateLimiter getMessagesLimiter() {
|
||||||
|
|
Loading…
Reference in New Issue