Temporarily disable registration abuse system
This commit is contained in:
parent
adcdb19c88
commit
22ef058cb6
|
@ -536,61 +536,62 @@ public class AccountController {
|
||||||
Optional<String> pushChallenge)
|
Optional<String> pushChallenge)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (captchaToken.isPresent()) {
|
|
||||||
boolean validToken = recaptchaClient.verify(captchaToken.get(), requester);
|
|
||||||
|
|
||||||
if (validToken) {
|
|
||||||
captchaSuccessMeter.mark();
|
|
||||||
return new CaptchaRequirement(false, false);
|
|
||||||
} else {
|
|
||||||
captchaFailureMeter.mark();
|
|
||||||
return new CaptchaRequirement(true, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pushChallenge.isPresent()) {
|
|
||||||
Optional<String> storedPushChallenge = storedVerificationCode.map(StoredVerificationCode::getPushCode);
|
|
||||||
|
|
||||||
if (!pushChallenge.get().equals(storedPushChallenge.orElse(null))) {
|
|
||||||
return new CaptchaRequirement(true, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<AbusiveHostRule> abuseRules = abusiveHostRules.getAbusiveHostRulesFor(requester);
|
|
||||||
|
|
||||||
for (AbusiveHostRule abuseRule : abuseRules) {
|
|
||||||
if (abuseRule.isBlocked()) {
|
|
||||||
logger.info("Blocked host: " + transport + ", " + number + ", " + requester + " (" + forwardedFor + ")");
|
|
||||||
blockedHostMeter.mark();
|
|
||||||
return new CaptchaRequirement(true, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!abuseRule.getRegions().isEmpty()) {
|
|
||||||
if (abuseRule.getRegions().stream().noneMatch(number::startsWith)) {
|
|
||||||
logger.info("Restricted host: " + transport + ", " + number + ", " + requester + " (" + forwardedFor + ")");
|
|
||||||
filteredHostMeter.mark();
|
|
||||||
return new CaptchaRequirement(true, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
rateLimiters.getSmsVoiceIpLimiter().validate(requester);
|
|
||||||
} catch (RateLimitExceededException e) {
|
|
||||||
logger.info("Rate limited exceeded: " + transport + ", " + number + ", " + requester + " (" + forwardedFor + ")");
|
|
||||||
rateLimitedHostMeter.mark();
|
|
||||||
return new CaptchaRequirement(true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
rateLimiters.getSmsVoicePrefixLimiter().validate(Util.getNumberPrefix(number));
|
|
||||||
} catch (RateLimitExceededException e) {
|
|
||||||
logger.info("Prefix rate limit exceeded: " + transport + ", " + number + ", (" + forwardedFor + ")");
|
|
||||||
rateLimitedPrefixMeter.mark();
|
|
||||||
return new CaptchaRequirement(true, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CaptchaRequirement(false, false);
|
return new CaptchaRequirement(false, false);
|
||||||
|
// if (captchaToken.isPresent()) {
|
||||||
|
// boolean validToken = recaptchaClient.verify(captchaToken.get(), requester);
|
||||||
|
//
|
||||||
|
// if (validToken) {
|
||||||
|
// captchaSuccessMeter.mark();
|
||||||
|
// return new CaptchaRequirement(false, false);
|
||||||
|
// } else {
|
||||||
|
// captchaFailureMeter.mark();
|
||||||
|
// return new CaptchaRequirement(true, false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (pushChallenge.isPresent()) {
|
||||||
|
// Optional<String> storedPushChallenge = storedVerificationCode.map(StoredVerificationCode::getPushCode);
|
||||||
|
//
|
||||||
|
// if (!pushChallenge.get().equals(storedPushChallenge.orElse(null))) {
|
||||||
|
// return new CaptchaRequirement(true, false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// List<AbusiveHostRule> abuseRules = abusiveHostRules.getAbusiveHostRulesFor(requester);
|
||||||
|
//
|
||||||
|
// for (AbusiveHostRule abuseRule : abuseRules) {
|
||||||
|
// if (abuseRule.isBlocked()) {
|
||||||
|
// logger.info("Blocked host: " + transport + ", " + number + ", " + requester + " (" + forwardedFor + ")");
|
||||||
|
// blockedHostMeter.mark();
|
||||||
|
// return new CaptchaRequirement(true, false);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (!abuseRule.getRegions().isEmpty()) {
|
||||||
|
// if (abuseRule.getRegions().stream().noneMatch(number::startsWith)) {
|
||||||
|
// logger.info("Restricted host: " + transport + ", " + number + ", " + requester + " (" + forwardedFor + ")");
|
||||||
|
// filteredHostMeter.mark();
|
||||||
|
// return new CaptchaRequirement(true, false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
// rateLimiters.getSmsVoiceIpLimiter().validate(requester);
|
||||||
|
// } catch (RateLimitExceededException e) {
|
||||||
|
// logger.info("Rate limited exceeded: " + transport + ", " + number + ", " + requester + " (" + forwardedFor + ")");
|
||||||
|
// rateLimitedHostMeter.mark();
|
||||||
|
// return new CaptchaRequirement(true, true);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
// rateLimiters.getSmsVoicePrefixLimiter().validate(Util.getNumberPrefix(number));
|
||||||
|
// } catch (RateLimitExceededException e) {
|
||||||
|
// logger.info("Prefix rate limit exceeded: " + transport + ", " + number + ", (" + forwardedFor + ")");
|
||||||
|
// rateLimitedPrefixMeter.mark();
|
||||||
|
// return new CaptchaRequirement(true, true);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return new CaptchaRequirement(false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Timed
|
@Timed
|
||||||
|
|
|
@ -275,7 +275,7 @@ public class AccountControllerTest {
|
||||||
assertThat(response.getStatus()).isEqualTo(200);
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
|
||||||
verify(smsSender).deliverSmsVerification(eq(SENDER), eq(Optional.empty()), anyString());
|
verify(smsSender).deliverSmsVerification(eq(SENDER), eq(Optional.empty()), anyString());
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(NICE_HOST));
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(NICE_HOST));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -291,24 +291,24 @@ public class AccountControllerTest {
|
||||||
assertThat(response.getStatus()).isEqualTo(200);
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
|
||||||
verify(smsSender).deliverSmsVerification(eq(SENDER_PREAUTH), eq(Optional.empty()), anyString());
|
verify(smsSender).deliverSmsVerification(eq(SENDER_PREAUTH), eq(Optional.empty()), anyString());
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(NICE_HOST));
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(NICE_HOST));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
// @Test
|
||||||
public void testSendCodeWithInvalidPreauth() throws Exception {
|
// public void testSendCodeWithInvalidPreauth() throws Exception {
|
||||||
Response response =
|
// Response response =
|
||||||
resources.getJerseyTest()
|
// resources.getJerseyTest()
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER_PREAUTH))
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER_PREAUTH))
|
||||||
.queryParam("challenge", "invalidchallenge")
|
// .queryParam("challenge", "invalidchallenge")
|
||||||
.request()
|
// .request()
|
||||||
.header("X-Forwarded-For", NICE_HOST)
|
// .header("X-Forwarded-For", NICE_HOST)
|
||||||
.get();
|
// .get();
|
||||||
|
//
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
|
//
|
||||||
verifyNoMoreInteractions(smsSender);
|
// verifyNoMoreInteractions(smsSender);
|
||||||
verifyNoMoreInteractions(abusiveHostRules);
|
// verifyNoMoreInteractions(abusiveHostRules);
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendCodeWithNoPreauth() throws Exception {
|
public void testSendCodeWithNoPreauth() throws Exception {
|
||||||
|
@ -322,7 +322,7 @@ public class AccountControllerTest {
|
||||||
assertThat(response.getStatus()).isEqualTo(200);
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
|
||||||
verify(smsSender).deliverSmsVerification(eq(SENDER_PREAUTH), eq(Optional.empty()), anyString());
|
verify(smsSender).deliverSmsVerification(eq(SENDER_PREAUTH), eq(Optional.empty()), anyString());
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(NICE_HOST));
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(NICE_HOST));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -356,144 +356,144 @@ public class AccountControllerTest {
|
||||||
verify(smsSender).deliverSmsVerification(eq(SENDER), eq(Optional.of("android-ng")), anyString());
|
verify(smsSender).deliverSmsVerification(eq(SENDER), eq(Optional.of("android-ng")), anyString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
// @Test
|
||||||
public void testSendAbusiveHost() {
|
// public void testSendAbusiveHost() {
|
||||||
Response response =
|
// Response response =
|
||||||
resources.getJerseyTest()
|
// resources.getJerseyTest()
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
.request()
|
// .request()
|
||||||
.header("X-Forwarded-For", ABUSIVE_HOST)
|
// .header("X-Forwarded-For", ABUSIVE_HOST)
|
||||||
.get();
|
// .get();
|
||||||
|
//
|
||||||
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
|
//
|
||||||
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(ABUSIVE_HOST));
|
||||||
|
// verifyNoMoreInteractions(smsSender);
|
||||||
|
// }
|
||||||
|
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
// @Test
|
||||||
|
// public void testSendAbusiveHostWithValidCaptcha() throws IOException {
|
||||||
|
// Response response =
|
||||||
|
// resources.getJerseyTest()
|
||||||
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
|
// .queryParam("captcha", VALID_CAPTCHA_TOKEN)
|
||||||
|
// .request()
|
||||||
|
// .header("X-Forwarded-For", ABUSIVE_HOST)
|
||||||
|
// .get();
|
||||||
|
//
|
||||||
|
// assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
//
|
||||||
|
// verifyNoMoreInteractions(abusiveHostRules);
|
||||||
|
// verify(recaptchaClient).verify(eq(VALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST));
|
||||||
|
// verify(smsSender).deliverSmsVerification(eq(SENDER), eq(Optional.empty()), anyString());
|
||||||
|
// }
|
||||||
|
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(ABUSIVE_HOST));
|
// @Test
|
||||||
verifyNoMoreInteractions(smsSender);
|
// public void testSendAbusiveHostWithInvalidCaptcha() {
|
||||||
}
|
// Response response =
|
||||||
|
// resources.getJerseyTest()
|
||||||
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
|
// .queryParam("captcha", INVALID_CAPTCHA_TOKEN)
|
||||||
|
// .request()
|
||||||
|
// .header("X-Forwarded-For", ABUSIVE_HOST)
|
||||||
|
// .get();
|
||||||
|
//
|
||||||
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
|
//
|
||||||
|
// verifyNoMoreInteractions(abusiveHostRules);
|
||||||
|
// verify(recaptchaClient).verify(eq(INVALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST));
|
||||||
|
// verifyNoMoreInteractions(smsSender);
|
||||||
|
// }
|
||||||
|
|
||||||
@Test
|
// @Test
|
||||||
public void testSendAbusiveHostWithValidCaptcha() throws IOException {
|
// public void testSendRateLimitedHostAutoBlock() {
|
||||||
Response response =
|
// Response response =
|
||||||
resources.getJerseyTest()
|
// resources.getJerseyTest()
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
.queryParam("captcha", VALID_CAPTCHA_TOKEN)
|
// .request()
|
||||||
.request()
|
// .header("X-Forwarded-For", RATE_LIMITED_IP_HOST)
|
||||||
.header("X-Forwarded-For", ABUSIVE_HOST)
|
// .get();
|
||||||
.get();
|
//
|
||||||
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
|
//
|
||||||
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_IP_HOST));
|
||||||
|
// verify(abusiveHostRules).setBlockedHost(eq(RATE_LIMITED_IP_HOST), eq("Auto-Block"));
|
||||||
|
// verifyNoMoreInteractions(abusiveHostRules);
|
||||||
|
//
|
||||||
|
// verifyNoMoreInteractions(recaptchaClient);
|
||||||
|
// verifyNoMoreInteractions(smsSender);
|
||||||
|
// }
|
||||||
|
|
||||||
assertThat(response.getStatus()).isEqualTo(200);
|
// @Test
|
||||||
|
// public void testSendRateLimitedPrefixAutoBlock() {
|
||||||
|
// Response response =
|
||||||
|
// resources.getJerseyTest()
|
||||||
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER_OVER_PREFIX))
|
||||||
|
// .request()
|
||||||
|
// .header("X-Forwarded-For", RATE_LIMITED_PREFIX_HOST)
|
||||||
|
// .get();
|
||||||
|
//
|
||||||
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
|
//
|
||||||
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_PREFIX_HOST));
|
||||||
|
// verify(abusiveHostRules).setBlockedHost(eq(RATE_LIMITED_PREFIX_HOST), eq("Auto-Block"));
|
||||||
|
// verifyNoMoreInteractions(abusiveHostRules);
|
||||||
|
//
|
||||||
|
// verifyNoMoreInteractions(recaptchaClient);
|
||||||
|
// verifyNoMoreInteractions(smsSender);
|
||||||
|
// }
|
||||||
|
|
||||||
verifyNoMoreInteractions(abusiveHostRules);
|
// @Test
|
||||||
verify(recaptchaClient).verify(eq(VALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST));
|
// public void testSendRateLimitedHostNoAutoBlock() {
|
||||||
verify(smsSender).deliverSmsVerification(eq(SENDER), eq(Optional.empty()), anyString());
|
// Response response =
|
||||||
}
|
// resources.getJerseyTest()
|
||||||
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
@Test
|
// .request()
|
||||||
public void testSendAbusiveHostWithInvalidCaptcha() {
|
// .header("X-Forwarded-For", RATE_LIMITED_HOST2)
|
||||||
Response response =
|
// .get();
|
||||||
resources.getJerseyTest()
|
//
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
.queryParam("captcha", INVALID_CAPTCHA_TOKEN)
|
//
|
||||||
.request()
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_HOST2));
|
||||||
.header("X-Forwarded-For", ABUSIVE_HOST)
|
// verifyNoMoreInteractions(abusiveHostRules);
|
||||||
.get();
|
//
|
||||||
|
// verifyNoMoreInteractions(recaptchaClient);
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
// verifyNoMoreInteractions(smsSender);
|
||||||
|
// }
|
||||||
verifyNoMoreInteractions(abusiveHostRules);
|
|
||||||
verify(recaptchaClient).verify(eq(INVALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST));
|
|
||||||
verifyNoMoreInteractions(smsSender);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSendRateLimitedHostAutoBlock() {
|
|
||||||
Response response =
|
|
||||||
resources.getJerseyTest()
|
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
|
||||||
.request()
|
|
||||||
.header("X-Forwarded-For", RATE_LIMITED_IP_HOST)
|
|
||||||
.get();
|
|
||||||
|
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
|
||||||
|
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_IP_HOST));
|
|
||||||
verify(abusiveHostRules).setBlockedHost(eq(RATE_LIMITED_IP_HOST), eq("Auto-Block"));
|
|
||||||
verifyNoMoreInteractions(abusiveHostRules);
|
|
||||||
|
|
||||||
verifyNoMoreInteractions(recaptchaClient);
|
|
||||||
verifyNoMoreInteractions(smsSender);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSendRateLimitedPrefixAutoBlock() {
|
|
||||||
Response response =
|
|
||||||
resources.getJerseyTest()
|
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER_OVER_PREFIX))
|
|
||||||
.request()
|
|
||||||
.header("X-Forwarded-For", RATE_LIMITED_PREFIX_HOST)
|
|
||||||
.get();
|
|
||||||
|
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
|
||||||
|
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_PREFIX_HOST));
|
|
||||||
verify(abusiveHostRules).setBlockedHost(eq(RATE_LIMITED_PREFIX_HOST), eq("Auto-Block"));
|
|
||||||
verifyNoMoreInteractions(abusiveHostRules);
|
|
||||||
|
|
||||||
verifyNoMoreInteractions(recaptchaClient);
|
|
||||||
verifyNoMoreInteractions(smsSender);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSendRateLimitedHostNoAutoBlock() {
|
|
||||||
Response response =
|
|
||||||
resources.getJerseyTest()
|
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
|
||||||
.request()
|
|
||||||
.header("X-Forwarded-For", RATE_LIMITED_HOST2)
|
|
||||||
.get();
|
|
||||||
|
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
|
||||||
|
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_HOST2));
|
|
||||||
verifyNoMoreInteractions(abusiveHostRules);
|
|
||||||
|
|
||||||
verifyNoMoreInteractions(recaptchaClient);
|
|
||||||
verifyNoMoreInteractions(smsSender);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
// @Test
|
||||||
public void testSendMultipleHost() {
|
// public void testSendMultipleHost() {
|
||||||
Response response =
|
// Response response =
|
||||||
resources.getJerseyTest()
|
// resources.getJerseyTest()
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
.request()
|
// .request()
|
||||||
.header("X-Forwarded-For", NICE_HOST + ", " + ABUSIVE_HOST)
|
// .header("X-Forwarded-For", NICE_HOST + ", " + ABUSIVE_HOST)
|
||||||
.get();
|
// .get();
|
||||||
|
//
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
|
//
|
||||||
verify(abusiveHostRules, times(1)).getAbusiveHostRulesFor(eq(ABUSIVE_HOST));
|
// verify(abusiveHostRules, times(1)).getAbusiveHostRulesFor(eq(ABUSIVE_HOST));
|
||||||
|
//
|
||||||
verifyNoMoreInteractions(abusiveHostRules);
|
// verifyNoMoreInteractions(abusiveHostRules);
|
||||||
verifyNoMoreInteractions(smsSender);
|
// verifyNoMoreInteractions(smsSender);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
@Test
|
// @Test
|
||||||
public void testSendRestrictedHostOut() {
|
// public void testSendRestrictedHostOut() {
|
||||||
Response response =
|
// Response response =
|
||||||
resources.getJerseyTest()
|
// resources.getJerseyTest()
|
||||||
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
.request()
|
// .request()
|
||||||
.header("X-Forwarded-For", RESTRICTED_HOST)
|
// .header("X-Forwarded-For", RESTRICTED_HOST)
|
||||||
.get();
|
// .get();
|
||||||
|
//
|
||||||
assertThat(response.getStatus()).isEqualTo(402);
|
// assertThat(response.getStatus()).isEqualTo(402);
|
||||||
|
//
|
||||||
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RESTRICTED_HOST));
|
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RESTRICTED_HOST));
|
||||||
verifyNoMoreInteractions(smsSender);
|
// verifyNoMoreInteractions(smsSender);
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendRestrictedIn() throws Exception {
|
public void testSendRestrictedIn() throws Exception {
|
||||||
|
|
Loading…
Reference in New Issue