Add IPv6 support for isLocal checks (#1592)

* Add IPv6 support for isLocal checks

* Replace magic values like 127.0.0.1 and use our utility
* Support for IPv6 local adresses in IPv6 only or dual stack environments
    * Loopback [::1]
    * Site-Local fc00::/7
    * Link-local fe80::/10

* Introduce extra method for loopback addresses

* Use public IP for passMaxLogin check

* Use non-local IP addresses in test after change in verification
This commit is contained in:
games647
2018-07-04 02:05:17 +02:00
committed by Gabriele C
parent fc07ad3df1
commit 0227cb3f74
6 changed files with 104 additions and 30 deletions
@@ -3,8 +3,8 @@ package fr.xephi.authme.util;
import fr.xephi.authme.TestHelper;
import org.junit.Test;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
/**
* Test for {@link InternetProtocolUtils}
@@ -13,14 +13,44 @@ public class InternetProtocolUtilsTest {
@Test
public void shouldCheckLocalAddress() {
// loopback
assertThat(InternetProtocolUtils.isLocalAddress("localhost"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("127.0.0.1"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("::1"), equalTo(true));
// site local
assertThat(InternetProtocolUtils.isLocalAddress("10.0.0.1"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("172.0.0.1"), equalTo(false));
assertThat(InternetProtocolUtils.isLocalAddress("172.16.0.1"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("192.168.0.1"), equalTo(true));
// deprecated site-local
// ref: https://en.wikipedia.org/wiki/IPv6_address#Default_address_selection
assertThat(InternetProtocolUtils.isLocalAddress("fec0::"), equalTo(true));
// unique site-local (not deprecated!)
// ref: https://en.wikipedia.org/wiki/Unique_local_address
assertThat(InternetProtocolUtils.isLocalAddress("fde4:8dba:82e1::"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("fc00::"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("fe00::"), equalTo(false));
// link local
assertThat(InternetProtocolUtils.isLocalAddress("169.254.0.64"), equalTo(true));
assertThat(InternetProtocolUtils.isLocalAddress("FE80:0000:0000:0000:C800:0EFF:FE74:0008"), equalTo(true));
// public
assertThat(InternetProtocolUtils.isLocalAddress("94.32.34.5"), equalTo(false));
}
@Test
public void testIsLoopback() {
// loopback
assertThat(InternetProtocolUtils.isLoopbackAddress("localhost"), equalTo(true));
assertThat(InternetProtocolUtils.isLoopbackAddress("127.0.0.1"), equalTo(true));
assertThat(InternetProtocolUtils.isLoopbackAddress("::1"), equalTo(true));
}
@Test
public void shouldHavePrivateConstructor() {
// given / when / then