Author: bentmann Date: Thu Feb 10 13:46:48 2011 New Revision: 1069389 URL: http://svn.apache.org/viewvc?rev=1069389&view=rev Log: [MRELEASE-648] Putting SVN password in settings.xml doesn't support password encryption
Added: maven/release/trunk/maven-release-manager/src/main/resources/ maven/release/trunk/maven-release-manager/src/main/resources/META-INF/ maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/ maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml (with props) maven/release/trunk/maven-release-manager/src/test/resources/settings-security.xml (with props) Modified: maven/release/trunk/maven-release-manager/pom.xml maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfigurator.java maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfiguratorTest.java Modified: maven/release/trunk/maven-release-manager/pom.xml URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/pom.xml?rev=1069389&r1=1069388&r2=1069389&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/pom.xml (original) +++ maven/release/trunk/maven-release-manager/pom.xml Thu Feb 10 13:46:48 2011 @@ -68,6 +68,12 @@ </dependency> <dependency> + <groupId>org.sonatype.plexus</groupId> + <artifactId>plexus-sec-dispatcher</artifactId> + <version>1.3</version> + </dependency> + + <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> <version>${mavenVersion}</version> @@ -223,6 +229,9 @@ <!-- Disabled for now - we can't mock classes from plexus-utils in surefire --> <exclude>**/ForkedMavenExecutorTest.java</exclude> </excludes> + <systemPropertyVariables> + <settings.security>${project.build.testOutputDirectory}/settings-security.xml</settings.security> + </systemPropertyVariables> </configuration> </plugin> <plugin> Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfigurator.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfigurator.java?rev=1069389&r1=1069388&r2=1069389&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfigurator.java (original) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfigurator.java Thu Feb 10 13:46:48 2011 @@ -32,6 +32,8 @@ import org.apache.maven.settings.Setting import org.apache.maven.shared.release.config.ReleaseDescriptor; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.util.StringUtils; +import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; +import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException; /** * Tool that gets a configured SCM repository from release configuration. @@ -50,6 +52,14 @@ public class DefaultScmRepositoryConfigu */ private ScmManager scmManager; + /** + * When this plugin requires Maven 3.0 as minimum, this component can be removed and o.a.m.s.c.SettingsDecrypter be + * used instead. + * + * @plexus.requirement role-hint="mng-4384" + */ + private SecDispatcher secDispatcher; + public ScmRepository getConfiguredRepository( ReleaseDescriptor releaseDescriptor, Settings settings ) throws ScmRepositoryException, NoSuchScmProviderException { @@ -99,7 +109,7 @@ public class DefaultScmRepositoryConfigu if ( password == null ) { - password = server.getPassword(); + password = decrypt( server.getPassword(), host ); } if ( privateKey == null ) @@ -109,7 +119,7 @@ public class DefaultScmRepositoryConfigu if ( passphrase == null ) { - passphrase = server.getPassphrase(); + passphrase = decrypt( server.getPassphrase(), host ); } } } @@ -158,6 +168,29 @@ public class DefaultScmRepositoryConfigu return repository; } + private String decrypt( String str, String server ) + { + try + { + return secDispatcher.decrypt( str ); + } + catch ( SecDispatcherException e ) + { + String msg = + "Failed to decrypt password/passphrase for server " + server + ", using auth token as is: " + + e.getMessage(); + if ( getLogger().isDebugEnabled() ) + { + getLogger().warn( msg, e ); + } + else + { + getLogger().warn( msg ); + } + return str; + } + } + public ScmProvider getRepositoryProvider( ScmRepository repository ) throws NoSuchScmProviderException { Added: maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml?rev=1069389&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml (added) +++ maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml Thu Feb 10 13:46:48 2011 @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +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. +--> + +<component-set> + <components> + <component> + <role>org.sonatype.plexus.components.sec.dispatcher.SecDispatcher</role> + <role-hint>mng-4384</role-hint> + <implementation>org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher</implementation> + <requirements> + <requirement> + <role>org.sonatype.plexus.components.cipher.PlexusCipher</role> + <role-hint>mng-4384</role-hint> + <field-name>_cipher</field-name> + </requirement> + </requirements> + <configuration> + <_configuration-file>~/.m2/settings-security.xml</_configuration-file> + </configuration> + </component> + <component> + <role>org.sonatype.plexus.components.cipher.PlexusCipher</role> + <role-hint>mng-4384</role-hint> + <implementation>org.sonatype.plexus.components.cipher.DefaultPlexusCipher</implementation> + </component> + </components> +</component-set> Propchange: maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/release/trunk/maven-release-manager/src/main/resources/META-INF/plexus/components.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfiguratorTest.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfiguratorTest.java?rev=1069389&r1=1069388&r2=1069389&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfiguratorTest.java (original) +++ maven/release/trunk/maven-release-manager/src/test/java/org/apache/maven/shared/release/scm/DefaultScmRepositoryConfiguratorTest.java Thu Feb 10 13:46:48 2011 @@ -113,6 +113,30 @@ public class DefaultScmRepositoryConfigu assertEquals( "check passphrase", "settings-passphrase", providerRepository.getPassphrase() ); } + public void testGetConfiguredRepositoryWithEncryptedPasswords() + throws ScmRepositoryException, NoSuchScmProviderException + { + Settings settings = new Settings(); + Server server = new Server(); + server.setId( "localhost" ); + server.setUsername( "testuser" ); + server.setPassword( "{Ael0S2tnXv8H3X+gHKpZAvAA25D8+gmU2w2RrGaf5v8=}" ); + server.setPassphrase( "{7zK9P8hNVeUHbTsjiA/vnOs0zUXbND+9MBNPvdvl+x4=}" ); + settings.addServer( server ); + + ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor(); + releaseDescriptor.setScmSourceUrl( "scm:svn:svn://localhost/repo" ); + + ScmRepository repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, settings ); + + ScmProviderRepositoryWithHost providerRepository = + (ScmProviderRepositoryWithHost) repository.getProviderRepository(); + assertEquals( "check host", "localhost", providerRepository.getHost() ); + assertEquals( "check username", "testuser", providerRepository.getUser() ); + assertEquals( "check password", "testpass", providerRepository.getPassword() ); + assertEquals( "check passphrase", "testphrase", providerRepository.getPassphrase() ); + } + public void testGetConfiguredRepositoryInvalidScmUrl() throws Exception { Added: maven/release/trunk/maven-release-manager/src/test/resources/settings-security.xml URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/test/resources/settings-security.xml?rev=1069389&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/test/resources/settings-security.xml (added) +++ maven/release/trunk/maven-release-manager/src/test/resources/settings-security.xml Thu Feb 10 13:46:48 2011 @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<settingsSecurity> + <master>{1wQaa6S/o8MH7FnaTNL53XmhT5O0SEGXQi3gC49o6OY=}</master> +</settingsSecurity> Propchange: maven/release/trunk/maven-release-manager/src/test/resources/settings-security.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/release/trunk/maven-release-manager/src/test/resources/settings-security.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision