Revert "Temporarily disable registration abuse system"
This reverts commit 22ef058cb6
.
This commit is contained in:
parent
46c800b8b7
commit
24ea6a9f1d
|
@ -540,62 +540,61 @@ 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);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @Test
|
assertThat(response.getStatus()).isEqualTo(402);
|
||||||
// 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());
|
|
||||||
// }
|
|
||||||
|
|
||||||
// @Test
|
verify(abusiveHostRules).getAbusiveHostRulesFor(eq(ABUSIVE_HOST));
|
||||||
// public void testSendAbusiveHostWithInvalidCaptcha() {
|
verifyNoMoreInteractions(smsSender);
|
||||||
// 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 testSendRateLimitedHostAutoBlock() {
|
public void testSendAbusiveHostWithValidCaptcha() throws IOException {
|
||||||
// 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()
|
.queryParam("captcha", VALID_CAPTCHA_TOKEN)
|
||||||
// .header("X-Forwarded-For", RATE_LIMITED_IP_HOST)
|
.request()
|
||||||
// .get();
|
.header("X-Forwarded-For", ABUSIVE_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
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
// 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
|
verifyNoMoreInteractions(abusiveHostRules);
|
||||||
// public void testSendRateLimitedHostNoAutoBlock() {
|
verify(recaptchaClient).verify(eq(VALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST));
|
||||||
// Response response =
|
verify(smsSender).deliverSmsVerification(eq(SENDER), eq(Optional.empty()), anyString());
|
||||||
// resources.getJerseyTest()
|
}
|
||||||
// .target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
|
||||||
// .request()
|
@Test
|
||||||
// .header("X-Forwarded-For", RATE_LIMITED_HOST2)
|
public void testSendAbusiveHostWithInvalidCaptcha() {
|
||||||
// .get();
|
Response response =
|
||||||
//
|
resources.getJerseyTest()
|
||||||
// assertThat(response.getStatus()).isEqualTo(402);
|
.target(String.format("/v1/accounts/sms/code/%s", SENDER))
|
||||||
//
|
.queryParam("captcha", INVALID_CAPTCHA_TOKEN)
|
||||||
// verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_HOST2));
|
.request()
|
||||||
// verifyNoMoreInteractions(abusiveHostRules);
|
.header("X-Forwarded-For", ABUSIVE_HOST)
|
||||||
//
|
.get();
|
||||||
// verifyNoMoreInteractions(recaptchaClient);
|
|
||||||
// verifyNoMoreInteractions(smsSender);
|
assertThat(response.getStatus()).isEqualTo(402);
|
||||||
// }
|
|
||||||
|
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