[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,

Reply via email to