You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/03/29 14:25:37 UTC
[maven-release] 01/01: [MRELEASE-1037] Authentication failed on
perform git-clone with 3.0.0-M1
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MRELEASE-1037
in repository https://gitbox.apache.org/repos/asf/maven-release.git
commit 63f478bc4b8d4e6fdebfa9a469348385b25e4f8a
Author: rfscholte <rf...@apache.org>
AuthorDate: Sun Mar 29 16:25:26 2020 +0200
[MRELEASE-1037] Authentication failed on perform git-clone with 3.0.0-M1
---
.../config/PropertiesReleaseDescriptorStore.java | 48 ++++++++++++++++++--
.../PropertiesReleaseDescriptorStoreTest.java | 51 ++++++++++++++++++++--
2 files changed, 91 insertions(+), 8 deletions(-)
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
index 9937104..a7506b8 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
@@ -93,6 +93,15 @@ public class PropertiesReleaseDescriptorStore
throw new ReleaseDescriptorStoreException(
"Error reading properties file '" + file.getName() + "': " + e.getMessage(), e );
}
+
+ try
+ {
+ decryptProperties( properties );
+ }
+ catch ( IllegalStateException | SecDispatcherException | PlexusCipherException e )
+ {
+ getLogger().debug( e.getMessage() );
+ }
ReleaseDescriptorBuilder builder;
if ( mergeDescriptor != null )
@@ -350,11 +359,44 @@ public class PropertiesReleaseDescriptorStore
{
return new File( mergeDescriptor.getWorkingDirectory(), "release.properties" );
}
+
+ private void decryptProperties( Properties properties )
+ throws IllegalStateException, SecDispatcherException, PlexusCipherException
+ {
+ String[] keys = new String[] { "scm.password", "scm.passphrase" };
+
+ for ( String key : keys )
+ {
+ String value = properties.getProperty( key );
+ if ( value != null )
+ {
+ properties.put( key, decrypt( value ) );
+ }
+ }
+ }
// From org.apache.maven.cli.MavenCli.encryption(CliRequest)
private String encryptAndDecorate( String passwd )
throws IllegalStateException, SecDispatcherException, PlexusCipherException
{
+ final String master = getMaster();
+
+ DefaultPlexusCipher cipher = new DefaultPlexusCipher();
+ String masterPasswd = cipher.decryptDecorated( master, DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION );
+ return cipher.encryptAndDecorate( passwd, masterPasswd );
+ }
+
+ private String decrypt( String value ) throws IllegalStateException, SecDispatcherException, PlexusCipherException
+ {
+ final String master = getMaster();
+
+ DefaultPlexusCipher cipher = new DefaultPlexusCipher();
+ String masterPasswd = cipher.decryptDecorated( master, DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION );
+ return cipher.decryptDecorated( value, masterPasswd );
+ }
+
+ private String getMaster() throws SecDispatcherException
+ {
String configurationFile = secDispatcher.getConfigurationFile();
if ( configurationFile.startsWith( "~" ) )
@@ -376,10 +418,8 @@ public class PropertiesReleaseDescriptorStore
{
throw new IllegalStateException( "Master password is not set in the setting security file: " + file );
}
-
- DefaultPlexusCipher cipher = new DefaultPlexusCipher();
- String masterPasswd = cipher.decryptDecorated( master, DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION );
- return cipher.encryptAndDecorate( passwd, masterPasswd );
+
+ return master;
}
}
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
index 5347e29..e563fab 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
@@ -1,5 +1,13 @@
package org.apache.maven.shared.release.config;
+import static org.junit.Assert.assertNotEquals;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder.BuilderReleaseDescriptor;
/*
@@ -26,9 +34,6 @@ import org.apache.maven.shared.release.scm.IdentifiedScm;
import org.codehaus.plexus.PlexusTestCase;
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
-import java.io.File;
-import java.io.IOException;
-
/**
* Test the properties store.
*
@@ -248,7 +253,7 @@ public class PropertiesReleaseDescriptorStoreTest
assertEquals( "compare configuration", config.build(), rereadDescriptor );
}
-
+
public void testDeleteFile()
throws ReleaseDescriptorStoreException, IOException
{
@@ -280,6 +285,44 @@ public class PropertiesReleaseDescriptorStoreTest
assertFalse( "Check file already exists", file.exists() );
}
+
+ public void testWriteEncryptedProperties()
+ throws Exception
+ {
+ final String scmPassword = "s3cr3t_SCMPASSWORD";
+ final String scmPassPhrase = "s3cr3t_SCMPASSPHRASE";
+
+ ReleaseDescriptorBuilder config = new ReleaseDescriptorBuilder();
+ config.setCompletedPhase( "completed-phase-write" );
+ config.setScmSourceUrl( "url-write" );
+
+ config.setScmPassword( scmPassword );
+ config.setScmPrivateKeyPassPhrase( scmPassPhrase );
+
+ File file = getTestFile( "target/test-classes/encrypt/release.properties" );
+ file.getParentFile().mkdirs();
+
+ store.write( config.build(), file );
+
+ Properties persistedProperties = new Properties();
+ try ( InputStream is = new FileInputStream( file ) )
+ {
+ persistedProperties.load( is );
+ }
+
+ String persistedPassword = persistedProperties.getProperty( "scm.password" );
+ assertNotNull( persistedPassword );
+ assertNotEquals( scmPassword, persistedPassword );
+
+ String persistedPassPhrase = persistedProperties.getProperty( "scm.passphrase" );
+ assertNotNull( persistedPassPhrase );
+ assertNotEquals( scmPassPhrase, persistedPassPhrase );
+
+ ReleaseDescriptorBuilder builder = store.read( file );
+ BuilderReleaseDescriptor descriptor = builder.build();
+ assertEquals( scmPassword, descriptor.getScmPassword() );
+ assertEquals( scmPassPhrase, descriptor.getScmPrivateKeyPassPhrase() );
+ }
private ReleaseDescriptorBuilder createReleaseConfigurationForWriting()
{