You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2015/03/22 14:38:41 UTC
maven-wagon git commit: [WAGON-427] added support for IPv6 Submitted
by: genadi-hp Applied with little style modifications
Repository: maven-wagon
Updated Branches:
refs/heads/master 327947eb0 -> 479f7bea6
[WAGON-427] added support for IPv6
Submitted by: genadi-hp
Applied with little style modifications
Project: http://git-wip-us.apache.org/repos/asf/maven-wagon/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-wagon/commit/479f7bea
Tree: http://git-wip-us.apache.org/repos/asf/maven-wagon/tree/479f7bea
Diff: http://git-wip-us.apache.org/repos/asf/maven-wagon/diff/479f7bea
Branch: refs/heads/master
Commit: 479f7bea6ff1f315bf3372e3f9eb7a9ef88e3e52
Parents: 327947e
Author: Hervé Boutemy <hb...@apache.org>
Authored: Sun Mar 22 14:38:37 2015 +0100
Committer: Hervé Boutemy <hb...@apache.org>
Committed: Sun Mar 22 14:38:37 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/maven/wagon/PathUtils.java | 33 +++++-----
.../maven/wagon/repository/Repository.java | 21 +++++-
.../org/apache/maven/wagon/PathUtilsTest.java | 69 ++++++++++++++------
.../maven/wagon/repository/RepositoryTest.java | 56 ++++++++++++++++
4 files changed, 140 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/479f7bea/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java
----------------------------------------------------------------------
diff --git a/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java b/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java
index 32180ce..e77e03a 100644
--- a/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java
+++ b/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java
@@ -33,7 +33,7 @@ public final class PathUtils
private PathUtils()
{
}
-
+
/**
* Returns the directory path portion of a file specification string.
* Matches the equally named unix command.
@@ -135,14 +135,12 @@ public final class PathUtils
{
String authorization = authorization( url );
int index = authorization.indexOf( '@' );
- if ( index >= 0 )
- {
- return authorization.substring( index + 1 );
- }
- else
- {
- return authorization;
- }
+ String host = ( index >= 0 ) ? authorization.substring( index + 1 ) : authorization;
+ // In case we have IPv6 in the host portion of url
+ // we have to remove brackets '[' and ']'
+ return ( ( host.charAt( 0 ) == '[' ) && ( host.charAt( host.length() - 1 ) == ']' ) )
+ ? host.substring( 1, host.length() - 1 )
+ : host;
}
/**
@@ -185,14 +183,7 @@ public final class PathUtils
pos = host.indexOf( '@' );
- if ( pos > 0 )
- {
- pos = host.indexOf( ':', pos );
- }
- else
- {
- pos = host.indexOf( ":" );
- }
+ pos = ( pos > 0 ) ? endOfHostPosition( host, pos ) : endOfHostPosition( host, 0 );
if ( pos > 0 )
{
@@ -201,6 +192,14 @@ public final class PathUtils
return host;
}
+ private static int endOfHostPosition( String host, int pos )
+ {
+ // if this is IPv6 then it will be in IPv6 Literal Addresses in URL's format
+ // see: http://www.ietf.org/rfc/rfc2732.txt
+ int endOfIPv6Pos = host.indexOf( ']', pos );
+ return ( endOfIPv6Pos > 0 ) ? endOfIPv6Pos + 1 : host.indexOf( ":", pos );
+ }
+
/**
* /**
* Return the protocol name.
http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/479f7bea/wagon-provider-api/src/main/java/org/apache/maven/wagon/repository/Repository.java
----------------------------------------------------------------------
diff --git a/wagon-provider-api/src/main/java/org/apache/maven/wagon/repository/Repository.java b/wagon-provider-api/src/main/java/org/apache/maven/wagon/repository/Repository.java
index 6c9ce8d..b28dd1a 100644
--- a/wagon-provider-api/src/main/java/org/apache/maven/wagon/repository/Repository.java
+++ b/wagon-provider-api/src/main/java/org/apache/maven/wagon/repository/Repository.java
@@ -182,7 +182,16 @@ public class Repository
sb.append( "://" );
- sb.append( host );
+ if ( isIPv6Address() )
+ {
+ // If this is IPv6 then we have to surround it
+ // with brackets '[' and ']'
+ sb.append( "[" ).append( getHost() ).append( "]" );
+ }
+ else
+ {
+ sb.append( getHost() );
+ }
if ( port != WagonConstants.UNKNOWN_PORT )
{
@@ -196,6 +205,16 @@ public class Repository
return sb.toString();
}
+ /**
+ * Checks whtther provided url contains IPv6 format in host portion
+ *
+ * @return true if provide host part is of IPv6 format
+ */
+ private boolean isIPv6Address()
+ {
+ return getHost().contains( ":" );
+ }
+
public String getHost()
{
if ( host == null )
http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/479f7bea/wagon-provider-api/src/test/java/org/apache/maven/wagon/PathUtilsTest.java
----------------------------------------------------------------------
diff --git a/wagon-provider-api/src/test/java/org/apache/maven/wagon/PathUtilsTest.java b/wagon-provider-api/src/test/java/org/apache/maven/wagon/PathUtilsTest.java
index 48c5bd4..0f09202 100644
--- a/wagon-provider-api/src/test/java/org/apache/maven/wagon/PathUtilsTest.java
+++ b/wagon-provider-api/src/test/java/org/apache/maven/wagon/PathUtilsTest.java
@@ -154,7 +154,7 @@ public class PathUtilsTest
public void testFileBasedir()
{
// see http://www.mozilla.org/quality/networking/testing/filetests.html
-
+
// strict forms
assertEquals( "c:/temp", PathUtils.basedir( "file:///c|/temp" ) );
assertEquals( "localhost", PathUtils.host( "file:///c|/temp" ) );
@@ -255,26 +255,53 @@ public class PathUtilsTest
public void testIpV4()
{
- assertUrl( "http://127.0.0.1",
- "http", null, null, "127.0.0.1", -1, "/" );
- assertUrl( "http://127.0.0.1:8080",
- "http", null, null, "127.0.0.1", 8080, "/" );
- assertUrl( "http://127.0.0.1/oo/rest/users",
- "http", null, null, "127.0.0.1", -1, "/oo/rest/users" );
- assertUrl( "http://127.0.0.1:8080/oo/rest/users",
- "http", null, null, "127.0.0.1", 8080, "/oo/rest/users" );
-
- assertUrl( "http://user:password@127.0.0.1",
- "http", "user", "password", "127.0.0.1", -1, "/" );
- assertUrl( "http://user:password@127.0.0.1:8080",
- "http", "user", "password", "127.0.0.1", 8080, "/" );
- assertUrl( "http://user:password@127.0.0.1/oo/rest/users",
- "http", "user", "password", "127.0.0.1", -1, "/oo/rest/users" );
- assertUrl( "http://user:password@127.0.0.1:8080/oo/rest/users",
- "http", "user", "password", "127.0.0.1", 8080, "/oo/rest/users" );
-
- assertUrl( "scm:svn:http://user:password@127.0.0.1:8080/oo/rest/users",
- "scm", "user", "password", "127.0.0.1", 8080, "/oo/rest/users" );
+ assertUrl( "http://127.0.0.1", "http", null, null, "127.0.0.1", -1, "/" );
+ assertUrl( "http://127.0.0.1:8080", "http", null, null, "127.0.0.1", 8080, "/" );
+ assertUrl( "http://127.0.0.1/oo/rest/users", "http", null, null, "127.0.0.1", -1, "/oo/rest/users" );
+ assertUrl( "http://127.0.0.1:8080/oo/rest/users", "http", null, null, "127.0.0.1", 8080, "/oo/rest/users" );
+
+ assertUrl( "http://user:password@127.0.0.1", "http", "user", "password", "127.0.0.1", -1, "/" );
+ assertUrl( "http://user:password@127.0.0.1:8080", "http", "user", "password", "127.0.0.1", 8080, "/" );
+ assertUrl( "http://user:password@127.0.0.1/oo/rest/users", "http", "user", "password", "127.0.0.1", -1,
+ "/oo/rest/users" );
+ assertUrl( "http://user:password@127.0.0.1:8080/oo/rest/users", "http", "user", "password", "127.0.0.1", 8080,
+ "/oo/rest/users" );
+
+ assertUrl( "scm:svn:http://user:password@127.0.0.1:8080/oo/rest/users", "scm", "user", "password", "127.0.0.1",
+ 8080, "/oo/rest/users" );
+ }
+
+ public void testIPv6()
+ {
+ assertUrl( "http://user:password@[fff:::1]:7891/oo/rest/users", "http", "user", "password", "fff:::1", 7891,
+ "/oo/rest/users" );
+ assertUrl( "http://[fff:::1]:7891/oo/rest/users", "http", null, null, "fff:::1", 7891, "/oo/rest/users" );
+ assertUrl( "http://user:password@[fff:::1]/oo/rest/users", "http", "user", "password", "fff:::1", -1,
+ "/oo/rest/users" );
+ assertUrl( "http://user:password@[fff:::1]:7891", "http", "user", "password", "fff:::1", 7891, "/" );
+
+ assertUrl( "http://user:password@[fff:000::222:1111]:7891/oo/rest/users", "http", "user", "password",
+ "fff:000::222:1111", 7891, "/oo/rest/users" );
+ assertUrl( "http://[fff:000::222:1111]:7891/oo/rest/users", "http", null, null, "fff:000::222:1111", 7891,
+ "/oo/rest/users" );
+ assertUrl( "http://user:password@[fff:000::222:1111]/oo/rest/users", "http", "user", "password",
+ "fff:000::222:1111", -1, "/oo/rest/users" );
+ assertUrl( "http://user:password@[fff:000::222:1111]:7891", "http", "user", "password", "fff:000::222:1111",
+ 7891, "/" );
+
+ assertUrl( "http://user:password@16.60.56.58:7891/oo/rest/users", "http", "user", "password", "16.60.56.58",
+ 7891, "/oo/rest/users" );
+ assertUrl( "http://16.60.56.58:7891/oo/rest/users", "http", null, null, "16.60.56.58", 7891, "/oo/rest/users" );
+ assertUrl( "http://user:password@16.60.56.58/oo/rest/users", "http", "user", "password", "16.60.56.58", -1,
+ "/oo/rest/users" );
+ assertUrl( "http://user:password@16.60.56.58:7891", "http", "user", "password", "16.60.56.58", 7891, "/" );
+
+ assertUrl( "http://user:password@16.60.56.58:7891/oo/rest/users", "http", "user", "password", "16.60.56.58",
+ 7891, "/oo/rest/users" );
+ assertUrl( "http://16.60.56.58:7891/oo/rest/users", "http", null, null, "16.60.56.58", 7891, "/oo/rest/users" );
+ assertUrl( "http://user:password@16.60.56.58/oo/rest/users", "http", "user", "password", "16.60.56.58", -1,
+ "/oo/rest/users" );
+ assertUrl( "http://user:password@16.60.56.58:7891", "http", "user", "password", "16.60.56.58", 7891, "/" );
}
private void assertUrl( String url, String protocol, String user, String password, String host, int port,
http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/479f7bea/wagon-provider-api/src/test/java/org/apache/maven/wagon/repository/RepositoryTest.java
----------------------------------------------------------------------
diff --git a/wagon-provider-api/src/test/java/org/apache/maven/wagon/repository/RepositoryTest.java b/wagon-provider-api/src/test/java/org/apache/maven/wagon/repository/RepositoryTest.java
index 2495728..bb85df0 100644
--- a/wagon-provider-api/src/test/java/org/apache/maven/wagon/repository/RepositoryTest.java
+++ b/wagon-provider-api/src/test/java/org/apache/maven/wagon/repository/RepositoryTest.java
@@ -105,4 +105,60 @@ public class RepositoryTest
assertEquals( "http://www.ibiblio.org", repository.getUrl() );
}
+
+ public void testIPv6()
+ {
+ assertRepository( "http://user:password@[fff:::1]:7891/oo/rest/users", "http://[fff:::1]:7891/oo/rest/users",
+ "/oo/rest/users", "user", "password", "fff:::1", 7891 );
+ assertRepository( "http://[fff:::1]:7891/oo/rest/users", "http://[fff:::1]:7891/oo/rest/users",
+ "/oo/rest/users", null, null, "fff:::1", 7891 );
+ assertRepository( "http://user:password@[fff:::1]/oo/rest/users", "http://[fff:::1]/oo/rest/users",
+ "/oo/rest/users", "user", "password", "fff:::1", -1 );
+ assertRepository( "http://user:password@[fff:::1]:7891", "http://[fff:::1]:7891", "/", "user", "password",
+ "fff:::1", 7891 );
+
+ assertRepository( "http://user:password@[fff:000::222:1111]:7891/oo/rest/users",
+ "http://[fff:000::222:1111]:7891/oo/rest/users", "/oo/rest/users", "user", "password",
+ "fff:000::222:1111", 7891 );
+ assertRepository( "http://[fff:000::222:1111]:7891/oo/rest/users",
+ "http://[fff:000::222:1111]:7891/oo/rest/users", "/oo/rest/users", null, null,
+ "fff:000::222:1111", 7891 );
+ assertRepository( "http://user:password@[fff:000::222:1111]/oo/rest/users",
+ "http://[fff:000::222:1111]/oo/rest/users", "/oo/rest/users", "user", "password",
+ "fff:000::222:1111", -1 );
+ assertRepository( "http://user:password@[fff:000::222:1111]:7891", "http://[fff:000::222:1111]:7891", "/",
+ "user", "password", "fff:000::222:1111", 7891 );
+
+ assertRepository( "http://user:password@16.60.56.58:7891/oo/rest/users",
+ "http://16.60.56.58:7891/oo/rest/users", "/oo/rest/users", "user", "password", "16.60.56.58",
+ 7891 );
+ assertRepository( "http://16.60.56.58:7891/oo/rest/users", "http://16.60.56.58:7891/oo/rest/users",
+ "/oo/rest/users", null, null, "16.60.56.58", 7891 );
+ assertRepository( "http://user:password@16.60.56.58/oo/rest/users", "http://16.60.56.58/oo/rest/users",
+ "/oo/rest/users", "user", "password", "16.60.56.58", -1 );
+ assertRepository( "http://user:password@16.60.56.58:7891", "http://16.60.56.58:7891", "/", "user", "password",
+ "16.60.56.58", 7891 );
+
+ assertRepository( "http://user:password@16.60.56.58:7891/oo/rest/users",
+ "http://16.60.56.58:7891/oo/rest/users", "/oo/rest/users", "user", "password", "16.60.56.58",
+ 7891 );
+ assertRepository( "http://16.60.56.58:7891/oo/rest/users", "http://16.60.56.58:7891/oo/rest/users",
+ "/oo/rest/users", null, null, "16.60.56.58", 7891 );
+ assertRepository( "http://user:password@16.60.56.58/oo/rest/users", "http://16.60.56.58/oo/rest/users",
+ "/oo/rest/users", "user", "password", "16.60.56.58", -1 );
+ assertRepository( "http://user:password@16.60.56.58:7891", "http://16.60.56.58:7891", "/", "user", "password",
+ "16.60.56.58", 7891 );
+ }
+
+ private void assertRepository( String url, String repoUrl, String baseDir, String user, String password,
+ String host, int port )
+ {
+ Repository repo = new Repository( String.valueOf( System.currentTimeMillis() ), url );
+ assertEquals( repoUrl, repo.getUrl() );
+ assertEquals( baseDir, repo.getBasedir() );
+ assertEquals( host, repo.getHost() );
+ assertEquals( user, repo.getUsername() );
+ assertEquals( password, repo.getPassword() );
+ assertEquals( port, repo.getPort() );
+ }
}