From 08182e41f618d1e3817ae15be896a78ccc61d881 Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Wed, 6 Sep 2017 00:56:27 +0200 Subject: [PATCH] Fix null address --- .../fr/xephi/authme/listener/OnJoinVerifier.java | 5 +++-- .../fr/xephi/authme/listener/PlayerListener.java | 2 +- .../xephi/authme/listener/OnJoinVerifierTest.java | 15 ++++++--------- .../xephi/authme/listener/PlayerListenerTest.java | 12 ++++++++++-- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java b/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java index 922e87bcd..1a7bc577d 100644 --- a/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java +++ b/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java @@ -169,14 +169,15 @@ public class OnJoinVerifier implements Reloadable { * Checks that the player's country is admitted. * * @param player the player + * @param address the player address * @param isAuthAvailable whether or not the user is registered * @throws FailedVerificationException if the verification fails */ - public void checkPlayerCountry(Player player, boolean isAuthAvailable) throws FailedVerificationException { + public void checkPlayerCountry(Player player, String address, boolean isAuthAvailable) throws FailedVerificationException { if ((!isAuthAvailable || settings.getProperty(ProtectionSettings.ENABLE_PROTECTION_REGISTERED)) && settings.getProperty(ProtectionSettings.ENABLE_PROTECTION) && !permissionsManager.hasPermission(player, PlayerStatePermission.BYPASS_COUNTRY_CHECK) - && !validationService.isCountryAdmitted(player.getAddress().getAddress().getHostAddress())) { + && !validationService.isCountryAdmitted(address)) { throw new FailedVerificationException(MessageKey.COUNTRY_BANNED_ERROR); } } diff --git a/src/main/java/fr/xephi/authme/listener/PlayerListener.java b/src/main/java/fr/xephi/authme/listener/PlayerListener.java index eebe5b0e6..e77bf0cb4 100644 --- a/src/main/java/fr/xephi/authme/listener/PlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/PlayerListener.java @@ -222,7 +222,7 @@ public class PlayerListener implements Listener { onJoinVerifier.checkKickNonRegistered(isAuthAvailable); onJoinVerifier.checkAntibot(player, isAuthAvailable); onJoinVerifier.checkNameCasing(player, auth); - onJoinVerifier.checkPlayerCountry(player, isAuthAvailable); + onJoinVerifier.checkPlayerCountry(player, event.getAddress().getHostAddress(), isAuthAvailable); } catch (FailedVerificationException e) { event.setKickMessage(m.retrieveSingle(e.getReason(), e.getArgs())); event.setResult(PlayerLoginEvent.Result.KICK_OTHER); diff --git a/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java b/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java index 0cd8fa83b..4aa7acce0 100644 --- a/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java +++ b/src/test/java/fr/xephi/authme/listener/OnJoinVerifierTest.java @@ -440,17 +440,17 @@ public class OnJoinVerifierTest { @Test public void shouldNotCheckCountry() throws FailedVerificationException { Player player = newPlayerWithName("david"); - TestHelper.mockPlayerIp(player, "127.0.0.1"); + String ip = "127.0.0.1"; // protection setting disabled given(settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)).willReturn(false); given(settings.getProperty(ProtectionSettings.ENABLE_PROTECTION_REGISTERED)).willReturn(true); - onJoinVerifier.checkPlayerCountry(player, false); + onJoinVerifier.checkPlayerCountry(player, ip, false); verifyZeroInteractions(validationService); // protection for registered players disabled given(settings.getProperty(ProtectionSettings.ENABLE_PROTECTION_REGISTERED)).willReturn(false); - onJoinVerifier.checkPlayerCountry(player, true); + onJoinVerifier.checkPlayerCountry(player, ip, true); verifyZeroInteractions(validationService); } @@ -459,12 +459,11 @@ public class OnJoinVerifierTest { // given String ip = "192.168.0.1"; Player player = newPlayerWithName("lucas"); - TestHelper.mockPlayerIp(player, ip); given(settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)).willReturn(true); given(validationService.isCountryAdmitted(ip)).willReturn(true); // when - onJoinVerifier.checkPlayerCountry(player, false); + onJoinVerifier.checkPlayerCountry(player, ip, false); // then verify(validationService).isCountryAdmitted(ip); @@ -475,13 +474,12 @@ public class OnJoinVerifierTest { // given String ip = "192.168.10.24"; Player player = newPlayerWithName("gabriel"); - TestHelper.mockPlayerIp(player, ip); given(settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)).willReturn(true); given(settings.getProperty(ProtectionSettings.ENABLE_PROTECTION_REGISTERED)).willReturn(true); given(validationService.isCountryAdmitted(ip)).willReturn(true); // when - onJoinVerifier.checkPlayerCountry(player, true); + onJoinVerifier.checkPlayerCountry(player, ip, true); // then verify(validationService).isCountryAdmitted(ip); @@ -492,7 +490,6 @@ public class OnJoinVerifierTest { // given String ip = "192.168.40.0"; Player player = newPlayerWithName("bob"); - TestHelper.mockPlayerIp(player, ip); given(settings.getProperty(ProtectionSettings.ENABLE_PROTECTION)).willReturn(true); given(validationService.isCountryAdmitted(ip)).willReturn(false); @@ -500,7 +497,7 @@ public class OnJoinVerifierTest { expectValidationExceptionWith(MessageKey.COUNTRY_BANNED_ERROR); // when - onJoinVerifier.checkPlayerCountry(player, false); + onJoinVerifier.checkPlayerCountry(player, ip, false); } private static Player newPlayerWithName(String name) { diff --git a/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java b/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java index 36785c555..fe8014f33 100644 --- a/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java +++ b/src/test/java/fr/xephi/authme/listener/PlayerListenerTest.java @@ -47,6 +47,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; @@ -558,8 +559,9 @@ public class PlayerListenerTest { // given String name = "someone"; Player player = mockPlayerWithName(name); + String ip = "12.34.56.78"; - PlayerLoginEvent event = spy(new PlayerLoginEvent(player, "", null)); + PlayerLoginEvent event = spy(new PlayerLoginEvent(player, "", mockAddrWithIp(ip))); given(validationService.isUnrestricted(name)).willReturn(false); given(onJoinVerifier.refusePlayerForFullServer(event)).willReturn(false); PlayerAuth auth = PlayerAuth.builder().name(name).build(); @@ -576,7 +578,7 @@ public class PlayerListenerTest { verify(onJoinVerifier).checkAntibot(player, true); verify(onJoinVerifier).checkKickNonRegistered(true); verify(onJoinVerifier).checkNameCasing(player, auth); - verify(onJoinVerifier).checkPlayerCountry(player, true); + verify(onJoinVerifier).checkPlayerCountry(player, "", true); verify(teleportationService).teleportOnJoin(player); verifyNoModifyingCalls(event); } @@ -883,4 +885,10 @@ public class PlayerListenerTest { verify(event, atLeast(0)).getAddress(); verifyNoMoreInteractions(event); } + + private static InetAddress mockAddrWithIp(String ip) { + InetAddress addr = mock(InetAddress.class); + given(addr.getHostAddress()).willReturn(ip); + return addr; + } }