You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ol...@apache.org on 2008/08/26 23:23:44 UTC
svn commit: r689234 - in /continuum/trunk:
continuum-commons/src/main/java/org/apache/maven/continuum/configuration/
continuum-commons/src/main/java/org/apache/maven/continuum/utils/
continuum-commons/src/test/java/org/apache/maven/continuum/configurat...
Author: olamy
Date: Tue Aug 26 14:23:43 2008
New Revision: 689234
URL: http://svn.apache.org/viewvc?rev=689234&view=rev
Log:
[CONTINUUM-1489] replace use of MungedHttpsURL with commons-httpclient
remove use of MungedHttpsURL to extract username/password from urls
Added:
continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/URLUserInfo.java (with props)
Modified:
continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java
continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/ContinuumUrlValidator.java
continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/configuration/ConfigurationServiceTest.java
continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/utils/ContinuumUrlValidatorTest.java
continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataAction.java
continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/project/builder/AbstractContinuumProjectBuilder.java
continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataTest.java
Modified: continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java?rev=689234&r1=689233&r2=689234&view=diff
==============================================================================
--- continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java (original)
+++ continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java Tue Aug 26 14:23:43 2008
@@ -152,6 +152,9 @@
generalConfiguration.setBaseUrl( url );
}
+ /**
+ * @see org.apache.maven.continuum.configuration.ConfigurationService#getBuildOutputDirectory()
+ */
public File getBuildOutputDirectory()
{
File buildOutputDirectory = generalConfiguration.getBuildOutputDirectory();
Modified: continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/ContinuumUrlValidator.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/ContinuumUrlValidator.java?rev=689234&r1=689233&r2=689234&view=diff
==============================================================================
--- continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/ContinuumUrlValidator.java (original)
+++ continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/ContinuumUrlValidator.java Tue Aug 26 14:23:43 2008
@@ -19,17 +19,19 @@
* under the License.
*/
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
+import org.apache.commons.lang.StringUtils;
import org.apache.oro.text.perl.Perl5Util;
import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.configuration.PlexusConfigurationException;
import org.codehaus.plexus.formica.validation.AbstractValidator;
import org.codehaus.plexus.formica.validation.util.Flags;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Configurable;
-import org.codehaus.plexus.util.StringUtils;
/**
* @author <a href="mailto:olamy@apache.org">olamy</a>
@@ -223,7 +225,7 @@
return true;
}
- value = replace( value, " ", "%20" );
+ value = StringUtils.replace( value, " ", "%20" );
Perl5Util matchUrlPat = new Perl5Util();
Perl5Util matchAsciiPat = new Perl5Util();
@@ -432,7 +434,7 @@
}
String extra = authorityMatcher.group( PARSE_AUTHORITY_EXTRA );
- if ( !isBlankOrNull( extra ) )
+ if ( !StringUtils.isBlank( extra ) )
{
return false;
}
@@ -521,31 +523,48 @@
}
return count;
}
-
- private static boolean isBlankOrNull( String value )
- {
- return ( ( value == null ) || ( value.trim().length() == 0 ) );
- }
-
- public static String replace( String text, String repl, String with )
+
+ /**
+ * @param url
+ * @return URLUserInfo cannot be null
+ * @throws URISyntaxException
+ */
+ public URLUserInfo extractURLUserInfo( String url )
+ throws URISyntaxException
{
- if ( text == null || repl == null || with == null || repl.length() == 0 )
- {
- return text;
- }
+ URI uri = new URI( url );
+ // can contains user:password
+ String userInfoRaw = uri.getUserInfo();
+ URLUserInfo urlUserInfo = new URLUserInfo();
- StringBuffer buf = new StringBuffer( text.length() );
- int start = 0, end = 0;
- while ( ( end = text.indexOf( repl, start ) ) != -1 )
+ if ( !StringUtils.isEmpty( userInfoRaw ) )
{
- buf.append( text.substring( start, end ) ).append( with );
- start = end + repl.length();
+ int index = userInfoRaw.indexOf( ':' );
+ if ( index >= 0 )
+ {
+ urlUserInfo.setUsername( userInfoRaw.substring( 0, index ) );
+ urlUserInfo.setPassword( userInfoRaw.substring( index + 1, userInfoRaw.length() ) );
+ }
+ else
+ {
+ urlUserInfo.setUsername( userInfoRaw );
+ }
}
-
- buf.append( text.substring( start ) );
- return buf.toString();
+ return urlUserInfo;
}
+
+ /**
+ * remove auth from an url
+ * @param url
+ * @return https://username:password@svn.apache.org/repos -> https://svn.apache.org/repos
+ */
+ /*
+ public String removeURLUserInfo(String url)
+ {
+
+ }*/
+
public void configure( PlexusConfiguration plexusConfiguration )
throws PlexusConfigurationException
{
Added: continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/URLUserInfo.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/URLUserInfo.java?rev=689234&view=auto
==============================================================================
--- continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/URLUserInfo.java (added)
+++ continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/URLUserInfo.java Tue Aug 26 14:23:43 2008
@@ -0,0 +1,62 @@
+package org.apache.maven.continuum.utils;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @version $Id$
+ * @since 1.2
+ */
+public class URLUserInfo
+{
+
+ private String username;
+
+ private String password;
+
+ /**
+ *
+ */
+ public URLUserInfo()
+ {
+ //
+ }
+
+ public String getUsername()
+ {
+ return username;
+ }
+
+ public void setUsername( String username )
+ {
+ this.username = username;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword( String password )
+ {
+ this.password = password;
+ }
+
+}
Propchange: continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/URLUserInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/trunk/continuum-commons/src/main/java/org/apache/maven/continuum/utils/URLUserInfo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Revision Id
Modified: continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/configuration/ConfigurationServiceTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/configuration/ConfigurationServiceTest.java?rev=689234&r1=689233&r2=689234&view=diff
==============================================================================
--- continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/configuration/ConfigurationServiceTest.java (original)
+++ continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/configuration/ConfigurationServiceTest.java Tue Aug 26 14:23:43 2008
@@ -60,10 +60,11 @@
assertNotNull( service.getUrl() );
assertEquals( "http://test", service.getUrl() );
- log.info( service.getFile( "myBuildOutputDir" ).getAbsolutePath() );
- log.info( service.getBuildOutputDirectory().getAbsolutePath() );
- assertEquals( service.getFile( "myBuildOutputDir" ).getAbsolutePath(),
- service.getBuildOutputDirectory().getAbsolutePath() );
+ log.info( "myBuildOutputDir " + new File( getBasedir(), "target/myBuildOutputDir" ).getAbsolutePath() );
+
+ log.info( "getBuildOutputDirectory " + service.getBuildOutputDirectory().getAbsolutePath() );
+ assertEquals( new File( getBasedir(), "target/myBuildOutputDir" ).getAbsolutePath(), service
+ .getBuildOutputDirectory().getAbsolutePath() );
}
public void testConfigurationService()
Modified: continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/utils/ContinuumUrlValidatorTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/utils/ContinuumUrlValidatorTest.java?rev=689234&r1=689233&r2=689234&view=diff
==============================================================================
--- continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/utils/ContinuumUrlValidatorTest.java (original)
+++ continuum/trunk/continuum-commons/src/test/java/org/apache/maven/continuum/utils/ContinuumUrlValidatorTest.java Tue Aug 26 14:23:43 2008
@@ -141,4 +141,34 @@
assertTrue( getContinuumUrlValidator().validate( rootPom.toURL().toExternalForm() ) );
}
+
+ public void testExtractUserNamePwd()
+ throws Exception
+ {
+ ContinuumUrlValidator continuumUrlValidator = new ContinuumUrlValidator();
+ URLUserInfo usrInfo = continuumUrlValidator
+ .extractURLUserInfo( "https://username:password@svn.apache.org/repos/asf/continuum/trunk/pom.xml" );
+ assertEquals( "username", usrInfo.getUsername() );
+ assertEquals( "password", usrInfo.getPassword() );
+ }
+
+ public void testExtractUserNameEmptyPwd()
+ throws Exception
+ {
+ ContinuumUrlValidator continuumUrlValidator = new ContinuumUrlValidator();
+ URLUserInfo usrInfo = continuumUrlValidator
+ .extractURLUserInfo( "https://username@svn.apache.org/repos/asf/continuum/trunk/pom.xml" );
+ assertEquals( "username", usrInfo.getUsername() );
+ assertNull( usrInfo.getPassword() );
+ }
+
+ public void testExtractEmptyUserNameEmptyPwd()
+ throws Exception
+ {
+ ContinuumUrlValidator continuumUrlValidator = new ContinuumUrlValidator();
+ URLUserInfo usrInfo = continuumUrlValidator
+ .extractURLUserInfo( "https://svn.apache.org/repos/asf/continuum/trunk/pom.xml" );
+ assertNull( usrInfo.getUsername() );
+ assertNull( usrInfo.getPassword() );
+ }
}
Modified: continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataAction.java?rev=689234&r1=689233&r2=689234&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataAction.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataAction.java Tue Aug 26 14:23:43 2008
@@ -19,6 +19,12 @@
* under the License.
*/
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Map;
+
import org.apache.maven.continuum.ContinuumException;
import org.apache.maven.continuum.execution.maven.m2.SettingsConfigurationException;
import org.apache.maven.continuum.model.project.BuildDefinitionTemplate;
@@ -27,17 +33,13 @@
import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
import org.apache.maven.continuum.project.builder.manager.ContinuumProjectBuilderManager;
import org.apache.maven.continuum.project.builder.manager.ContinuumProjectBuilderManagerException;
+import org.apache.maven.continuum.utils.ContinuumUrlValidator;
+import org.apache.maven.continuum.utils.URLUserInfo;
import org.apache.maven.settings.MavenSettingsBuilder;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.Settings;
-import org.codehaus.plexus.formica.util.MungedHttpsURL;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Map;
-
/**
* Resolve the project url being passed in and gather authentication information
* if the url is so configured, then create the projects
@@ -65,6 +67,11 @@
* @plexus.requirement
*/
private MavenSettingsBuilder mavenSettingsBuilder;
+
+ /**
+ * @plexus.requirement role-hint="continuumUrl"
+ */
+ private ContinuumUrlValidator urlValidator;
public static final String KEY_URL = "url";
@@ -122,25 +129,15 @@
getLogger().warn( "problem with settings file, disabling scm resolution of username and password" );
}
- MungedHttpsURL mungedURL;
-
if ( username == null )
{
- mungedURL = new MungedHttpsURL( curl );
- username = mungedURL.getUsername();
- password = mungedURL.getPassword();
+ URLUserInfo urlUserInfo = urlValidator.extractURLUserInfo( curl );
+ username = urlUserInfo.getUsername();
+ password = urlUserInfo.getPassword();
}
- else
- {
- mungedURL = new MungedHttpsURL( curl, username, password );
- }
-
- mungedURL.setLogger( getLogger() );
- if ( mungedURL.isValid() )
+ if ( urlValidator.isValid( curl ) )
{
- url = mungedURL.getURL();
-
BuildDefinitionTemplate buildDefinitionTemplate = getBuildDefinitionTemplate( context );
if ( buildDefinitionTemplate == null )
{
@@ -165,6 +162,12 @@
result = new ContinuumProjectBuildingResult();
result.addError( ContinuumProjectBuildingResult.ERROR_MALFORMED_URL );
}
+ catch ( URISyntaxException e )
+ {
+ getLogger().info( "Malformed URL: " + hidePasswordInUrl( curl ), e );
+ result = new ContinuumProjectBuildingResult();
+ result.addError( ContinuumProjectBuildingResult.ERROR_MALFORMED_URL );
+ }
context.put( KEY_PROJECT_BUILDING_RESULT, result );
}
@@ -223,4 +226,14 @@
{
this.mavenSettingsBuilder = mavenSettingsBuilder;
}
+
+ public ContinuumUrlValidator getUrlValidator()
+ {
+ return urlValidator;
+ }
+
+ public void setUrlValidator( ContinuumUrlValidator urlValidator )
+ {
+ this.urlValidator = urlValidator;
+ }
}
Modified: continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/project/builder/AbstractContinuumProjectBuilder.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/project/builder/AbstractContinuumProjectBuilder.java?rev=689234&r1=689233&r2=689234&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/project/builder/AbstractContinuumProjectBuilder.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/project/builder/AbstractContinuumProjectBuilder.java Tue Aug 26 14:23:43 2008
@@ -29,11 +29,6 @@
import java.net.URISyntaxException;
import java.net.URL;
import java.net.UnknownHostException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSocket;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpException;
@@ -49,7 +44,6 @@
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
@@ -86,30 +80,9 @@
schemeRegistry.register( new Scheme( "http", PlainSocketFactory.getSocketFactory(), 80 ) );
// https scheme
SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory();
+
// ignore cert
- sslSocketFactory.setHostnameVerifier( new X509HostnameVerifier(){
-
- public boolean verify( String arg0, SSLSession arg1 )
- {
- return true;
- }
-
- public void verify( String arg0, SSLSocket arg1 )
- throws IOException
- {
- }
-
- public void verify( String arg0, String[] arg1, String[] arg2 )
- throws SSLException
- {
- }
-
- public void verify( String arg0, X509Certificate arg1 )
- throws SSLException
- {
- }
-
- });
+ sslSocketFactory.setHostnameVerifier( SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER );
schemeRegistry.register( new Scheme( "https", sslSocketFactory, 443 ) );
HttpParams params = new BasicHttpParams();
Modified: continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataTest.java?rev=689234&r1=689233&r2=689234&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataTest.java (original)
+++ continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataTest.java Tue Aug 26 14:23:43 2008
@@ -28,6 +28,7 @@
import org.apache.maven.continuum.project.builder.ContinuumProjectBuilder;
import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
import org.apache.maven.continuum.project.builder.manager.ContinuumProjectBuilderManager;
+import org.apache.maven.continuum.utils.ContinuumUrlValidator;
import org.apache.maven.settings.MavenSettingsBuilder;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.logging.Logger;
@@ -52,7 +53,7 @@
mavenSettingsBuilderMock = mock( MavenSettingsBuilder.class );
action.setProjectBuilderManager( (ContinuumProjectBuilderManager) projectBuilderManagerMock.proxy() );
action.setMavenSettingsBuilder( (MavenSettingsBuilder) mavenSettingsBuilderMock.proxy() );
-
+ action.setUrlValidator( new ContinuumUrlValidator() );
projectBuilder = mock( ContinuumProjectBuilder.class );
projectBuilderManagerMock.expects( once() ).method( "getProjectBuilder" )
@@ -68,7 +69,7 @@
}
private BuildDefinitionTemplate getDefaultBuildDefinitionTemplate()
- throws Exception
+ throws Exception
{
BuildDefinition bd = new BuildDefinition();
@@ -81,7 +82,7 @@
bd.setBuildFile( "pom.xml" );
bd.setType( ContinuumBuildExecutorConstants.MAVEN_TWO_BUILD_EXECUTOR );
-
+
BuildDefinitionTemplate bdt = new BuildDefinitionTemplate();
bdt.addBuildDefinition( bd );
return bdt;