[SCM-707] Maven SCM should encode username and password in URL
Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/b41cf6dd Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/b41cf6dd Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/b41cf6dd Branch: refs/heads/master Commit: b41cf6dd237bf437d5e087a0a299319f86c9e921 Parents: 498b6a5 Author: rfscholte <rfscho...@apache.org> Authored: Fri Apr 5 23:54:14 2013 +0200 Committer: rfscholte <rfscho...@apache.org> Committed: Fri Apr 5 23:54:14 2013 +0200 ---------------------------------------------------------------------- .../git/repository/GitScmProviderRepository.java | 25 +++++++++++++- .../repository/GitScmProviderRepositoryTest.java | 25 +++++++++++--- 2 files changed, 42 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-scm/blob/b41cf6dd/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java ---------------------------------------------------------------------- diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java index 869134c..230735e 100644 --- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java @@ -23,6 +23,8 @@ import org.apache.maven.scm.ScmException; import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -279,11 +281,30 @@ public class GitScmProviderRepository if ( userName != null && userName.length() > 0 ) { - urlSb.append( userName ); + try + { + urlSb.append( URLEncoder.encode( userName, "UTF-8" ) ); + } + catch ( UnsupportedEncodingException e ) + { + // Quite impossible... + // Otherwise throw a RTE, since this method is also used by toString() + e.printStackTrace(); + } if ( password != null && password.length() > 0 ) { - urlSb.append( ':' ).append( password ); + urlSb.append( ':' ); + try + { + urlSb.append( URLEncoder.encode( password, "UTF-8" ) ); + } + catch ( UnsupportedEncodingException e ) + { + // Quite impossible... + // Otherwise throw a RTE, since this method is also used by toString() + e.printStackTrace(); + } } urlSb.append( '@' ); http://git-wip-us.apache.org/repos/asf/maven-scm/blob/b41cf6dd/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java ---------------------------------------------------------------------- diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java index ab3e772..c5fd6aa 100644 --- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java @@ -178,6 +178,19 @@ public class GitScmProviderRepositoryTest null, "ssh://g...@github.com/360-Innovations/FJPAQuery.git", null, "git", null, "github.com", 0, null); } + // For SCM-707 + public void testSpecialCharacters() + throws Exception + { + testUrl( "scm:git:http://gitrepos.apache.org", "@_&_:_?_#_%20", "password", null, "http://gitrepos.apache.org", null, + "http://%40_%26_%3A_%3F_%23_%2520:passw...@gitrepos.apache.org", null, + "gitrepos.apache.org", 0, null ); + + testUrl( "scm:git:http://gitrepos.apache.org", "username", "@_&_:_?_#_%20", null, "http://gitrepos.apache.org", null, + "http://username:%40_%26_%3a_%3f_%23_%2...@gitrepos.apache.org", null, + "gitrepos.apache.org", 0, null ); + + } public void testLegalGitPortUrl() throws Exception @@ -253,14 +266,14 @@ public class GitScmProviderRepositoryTest } - private GitScmProviderRepository testUrl(String scmUrl, String username, String password, String expectedToString, - String expectedFetchUrl, String expectedPushUrl, - String expectedUser, String expectedPassword, + private GitScmProviderRepository testUrl(String scmUrl, String username, String password, + String expectedScmRepositoryToString, String expectedScmRepositoryFetchUrl, + String expectedScmProviderRepositoryToString, String expectedScmProviderRepositoryFetchUrl, String expectedPushUrl, String expectedHost, int expectedPort, String expectedPath) throws Exception, ScmRepositoryException { - ScmRepository repository = testScmRepository( scmUrl, expectedToString, expectedFetchUrl ); + ScmRepository repository = testScmRepository( scmUrl, expectedScmRepositoryToString, expectedScmRepositoryFetchUrl ); GitScmProviderRepository providerRepository = (GitScmProviderRepository) repository.getProviderRepository(); @@ -268,8 +281,8 @@ public class GitScmProviderRepositoryTest providerRepository.setPassword( password ); - return testScmProviderRepository( expectedToString, expectedFetchUrl, expectedPushUrl, expectedUser, - expectedPassword, expectedHost, expectedPort, providerRepository ); + return testScmProviderRepository( expectedScmProviderRepositoryToString, expectedScmProviderRepositoryFetchUrl, expectedPushUrl, username, + password, expectedHost, expectedPort, providerRepository ); } private GitScmProviderRepository testScmProviderRepository( String expectedToString, String expectedFetchUrl,