Author: bentmann
Date: Wed Feb 9 23:00:06 2011
New Revision: 1069164
URL: http://svn.apache.org/viewvc?rev=1069164&view=rev
Log:
[SCM-495] Support for encrypted passwords in settings.xml
Added:
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/SettingsDecrypter.java
(with props)
maven/scm/trunk/maven-scm-plugin/src/main/resources/
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/components.xml
(with props)
maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml
(with props)
maven/scm/trunk/maven-scm-plugin/src/test/resources/settings-security.xml
(with props)
Modified:
maven/scm/trunk/maven-scm-plugin/pom.xml
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm
maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java
Modified: maven/scm/trunk/maven-scm-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/pom.xml?rev=1069164&r1=1069163&r2=1069164&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/pom.xml (original)
+++ maven/scm/trunk/maven-scm-plugin/pom.xml Wed Feb 9 23:00:06 2011
@@ -118,7 +118,12 @@
<artifactId>file-management</artifactId>
<version>1.2.1</version>
</dependency>
-
+
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-sec-dispatcher</artifactId>
+ <version>1.3</version>
+ </dependency>
<!-- Test -->
<dependency>
@@ -142,7 +147,6 @@
</dependencies>
<build>
-
<pluginManagement>
<plugins>
<plugin>
@@ -168,8 +172,53 @@
<stagingSiteURL>scp://people.apache.org/www/maven.apache.org/scm/maven-scm-plugin-${project.version}</stagingSiteURL>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <property>
+ <name>settings.security</name>
+
<value>${project.build.testOutputDirectory}/settings-security.xml</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
</plugins>
</pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>1.4</version>
+ <executions>
+ <!-- workaround for MNG-4384, we include our own private copy of the
component and avoid interferences with the Maven core -->
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <createDependencyReducedPom>false</createDependencyReducedPom>
+ <artifactSet>
+ <includes>
+ <include>org.sonatype.plexus:*</include>
+ </includes>
+ </artifactSet>
+ <relocations>
+ <relocation>
+ <pattern>org.sonatype.plexus</pattern>
+
<shadedPattern>org.apache.maven.scm.org.sonatype.plexus</shadedPattern>
+ </relocation>
+ </relocations>
+ <transformers>
+ <transformer
implementation="org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer"/>
+ </transformers>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
<profiles>
Modified:
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java?rev=1069164&r1=1069163&r2=1069164&view=diff
==============================================================================
---
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
(original)
+++
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
Wed Feb 9 23:00:06 2011
@@ -142,6 +142,11 @@ public abstract class AbstractScmMojo
private ScmManager manager;
/**
+ * @component
+ */
+ private SettingsDecrypter decryptor;
+
+ /**
* The base directory.
*
* @parameter expression="${basedir}"
@@ -384,7 +389,7 @@ public abstract class AbstractScmMojo
if ( password == null )
{
- password = server.getPassword();
+ password = decryptor.decrypt( server.getPassword(), host );
}
if ( privateKey == null )
@@ -394,7 +399,7 @@ public abstract class AbstractScmMojo
if ( passphrase == null )
{
- passphrase = server.getPassphrase();
+ passphrase = decryptor.decrypt( server.getPassphrase(),
host );
}
}
}
Added:
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/SettingsDecrypter.java
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/SettingsDecrypter.java?rev=1069164&view=auto
==============================================================================
---
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/SettingsDecrypter.java
(added)
+++
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/SettingsDecrypter.java
Wed Feb 9 23:00:06 2011
@@ -0,0 +1,49 @@
+package org.apache.maven.scm.plugin;
+
+/*
+ * 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.
+ */
+
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
+import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
+
+/**
+ * When this plugin requires Maven 3.0 as minimum, this class can be removed
and o.a.m.s.c.SettingsDecrypter be used
+ * instead.
+ */
+public class SettingsDecrypter
+ extends AbstractLogEnabled
+{
+
+ private SecDispatcher secDispatcher;
+
+ public String decrypt( String str, String server )
+ {
+ try
+ {
+ return secDispatcher.decrypt( str );
+ }
+ catch ( SecDispatcherException e )
+ {
+ getLogger().warn( "Failed to decrypt password/passphrase for
server " + server + ", using auth token as is" );
+ return str;
+ }
+ }
+
+}
Propchange:
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/SettingsDecrypter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/SettingsDecrypter.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/components.xml
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/components.xml?rev=1069164&view=auto
==============================================================================
---
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/components.xml
(added)
+++
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/components.xml
Wed Feb 9 23:00:06 2011
@@ -0,0 +1,52 @@
+<?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.apache.maven.scm.plugin.SettingsDecrypter</role>
+ <role-hint>default</role-hint>
+
<implementation>org.apache.maven.scm.plugin.SettingsDecrypter</implementation>
+ <requirements>
+ <requirement>
+
<role>org.sonatype.plexus.components.sec.dispatcher.SecDispatcher</role>
+ <role-hint>mng-4384</role-hint>
+ <field-name>secDispatcher</field-name>
+ </requirement>
+ </requirements>
+ </component>
+
+ <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>
+ <field-name>_cipher</field-name>
+ </requirement>
+ </requirements>
+ <configuration>
+ <_configuration-file>~/.m2/settings-security.xml</_configuration-file>
+ </configuration>
+ </component>
+ </components>
+</component-set>
Propchange:
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/scm/trunk/maven-scm-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm?rev=1069164&r1=1069163&r2=1069164&view=diff
==============================================================================
---
maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm
(original)
+++
maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm
Wed Feb 9 23:00:06 2011
@@ -77,9 +77,9 @@ Bootstrapping a Project Using a POM
Configuring Authentication
Most public repositories requires developers to authenticate first before
they can pull the source from the repository.
- For repository requiring authentication, the scm plugin needs to be
configured in the <<<pom.xml>>>
+ For repositories requiring authentication, the scm plugin needs to be
configured in one of the following ways:
- * specifying the username and password for svn and starteam
+ * In the <<<poml.xml>>>
+-----------+
<project>
@@ -102,3 +102,21 @@ Configuring Authentication
...
</project>
+-----------+
+
+ * In the <<<settings.xml>>> via a <<<server>>> entry, using the host name
from the connection URL as the server id
+
++-----------+
+<settings>
+ ...
+ <servers>
+ <server>
+ <id>hostname</id>
+ <username>username</username>
+ <password>password</password>
+ </server>
+ </servers>
+ ...
+</settings>
++-----------+
+
+ Since version 1.5, the plugin also recognizes
{{{http://maven.apache.org/guides/mini/guide-encryption.html}encrypted
passwords}}.
Modified:
maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java?rev=1069164&r1=1069163&r2=1069164&view=diff
==============================================================================
---
maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java
(original)
+++
maven/scm/trunk/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java
Wed Feb 9 23:00:06 2011
@@ -22,6 +22,7 @@ package org.apache.maven.scm.plugin;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
import org.apache.maven.scm.provider.svn.SvnScmTestUtils;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.StringUtils;
@@ -160,5 +161,18 @@ public class CheckoutMojoTest
assertTrue( new File( checkoutDir, "src/main/java/.svn" ).exists() );
assertTrue( new File( checkoutDir, "src/main/.svn" ).exists() );
}
-
+
+ public void testEncryptedPasswordFromSettings()
+ throws Exception
+ {
+ File pom = getTestFile(
"src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml" );
+ CheckoutMojo mojo = (CheckoutMojo) lookupMojo( "checkout", pom );
+ ScmProviderRepositoryWithHost repo =
+ (ScmProviderRepositoryWithHost)
mojo.getScmRepository().getProviderRepository();
+
+ assertEquals( "testuser", repo.getUser() );
+ assertEquals( "testpass", repo.getPassword() );
+ assertEquals( "testphrase", repo.getPassphrase() );
+ }
+
}
Added:
maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml?rev=1069164&view=auto
==============================================================================
---
maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml
(added)
+++
maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml
Wed Feb 9 23:00:06 2011
@@ -0,0 +1,42 @@
+<!--
+ ~ 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.
+ -->
+
+<project>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-scm-plugin</artifactId>
+ <configuration>
+ <settings implementation="org.apache.maven.settings.Settings">
+ <servers>
+ <server>
+ <id>localhost</id>
+ <username>testuser</username>
+
<password>{Ael0S2tnXv8H3X+gHKpZAvAA25D8+gmU2w2RrGaf5v8=}</password>
+
<passphrase>{7zK9P8hNVeUHbTsjiA/vnOs0zUXbND+9MBNPvdvl+x4=}</passphrase>
+ </server>
+ </servers>
+ </settings>
+ <connectionType>connection</connectionType>
+
<connectionUrl>scm:svn:svn://localhost/repository/trunk</connectionUrl>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Propchange:
maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/scm/trunk/maven-scm-plugin/src/test/resources/mojos/checkout/checkoutEncryptedPasswordFromSettings.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/scm/trunk/maven-scm-plugin/src/test/resources/settings-security.xml
URL:
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/test/resources/settings-security.xml?rev=1069164&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/test/resources/settings-security.xml
(added)
+++ maven/scm/trunk/maven-scm-plugin/src/test/resources/settings-security.xml
Wed Feb 9 23:00:06 2011
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<settingsSecurity>
+ <master>{1wQaa6S/o8MH7FnaTNL53XmhT5O0SEGXQi3gC49o6OY=}</master>
+</settingsSecurity>
Propchange:
maven/scm/trunk/maven-scm-plugin/src/test/resources/settings-security.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/scm/trunk/maven-scm-plugin/src/test/resources/settings-security.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision