You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wagon-commits@maven.apache.org by br...@apache.org on 2005/12/09 01:20:36 UTC
svn commit: r355292 - in /maven/wagon/trunk: ./ wagon-openpgp/
wagon-openpgp/src/ wagon-openpgp/src/main/ wagon-openpgp/src/main/java/
wagon-openpgp/src/main/java/org/ wagon-openpgp/src/main/java/org/apache/
wagon-openpgp/src/main/java/org/apache/maven...
Author: brett
Date: Thu Dec 8 16:20:31 2005
New Revision: 355292
URL: http://svn.apache.org/viewcvs?rev=355292&view=rev
Log:
open pgp suppoprt for wagon
Added:
maven/wagon/trunk/wagon-openpgp/ (with props)
maven/wagon/trunk/wagon-openpgp/pom.xml (with props)
maven/wagon/trunk/wagon-openpgp/src/
maven/wagon/trunk/wagon-openpgp/src/main/
maven/wagon/trunk/wagon-openpgp/src/main/java/
maven/wagon/trunk/wagon-openpgp/src/main/java/org/
maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/
maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/
maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/
maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/
maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignatureVerifierObserver.java (with props)
maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignerObserver.java (with props)
maven/wagon/trunk/wagon-openpgp/src/test/
maven/wagon/trunk/wagon-openpgp/src/test/java/
maven/wagon/trunk/wagon-openpgp/src/test/java/org/
maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/
maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/
maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/
maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/
maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/WagonOpenPgpObserverTest.java (with props)
maven/wagon/trunk/wagon-openpgp/src/test/resources/
maven/wagon/trunk/wagon-openpgp/src/test/resources/pubring.gpg
- copied unchanged from r354611, jakarta/commons/sandbox/openpgp/trunk/src/test/resources/pubring.gpg
maven/wagon/trunk/wagon-openpgp/src/test/resources/secring.gpg
- copied unchanged from r354611, jakarta/commons/sandbox/openpgp/trunk/src/test/resources/secring.gpg
maven/wagon/trunk/wagon-openpgp/src/test/resources/test-input.txt
- copied unchanged from r354611, jakarta/commons/sandbox/openpgp/trunk/src/test/resources/test-input.txt
maven/wagon/trunk/wagon-openpgp/src/test/resources/test-signature.bpg
- copied unchanged from r354747, jakarta/commons/sandbox/openpgp/trunk/src/test/resources/test-signature.bpg
maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/AbstractTransferListener.java (with props)
Modified:
maven/wagon/trunk/pom.xml
Modified: maven/wagon/trunk/pom.xml
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/pom.xml?rev=355292&r1=355291&r2=355292&view=diff
==============================================================================
--- maven/wagon/trunk/pom.xml (original)
+++ maven/wagon/trunk/pom.xml Thu Dec 8 16:20:31 2005
@@ -9,7 +9,7 @@
<issueManagement>
<system>jira</system>
<url>http://jira.codehaus.org/browse/WAGON</url>
- </issueManagement>
+ </issueManagement>
<ciManagement>
<system>wagon-dev@maven.apache.org</system>
<notifiers>
@@ -93,6 +93,7 @@
<module>wagon-provider-api</module>
<module>wagon-provider-test</module>
<module>wagon-providers</module>
+ <module>wagon-openpgp</module>
</modules>
<dependencies>
<dependency>
Propchange: maven/wagon/trunk/wagon-openpgp/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Dec 8 16:20:31 2005
@@ -0,0 +1,4 @@
+target
+*.iws
+*.ipr
+*.iml
Added: maven/wagon/trunk/wagon-openpgp/pom.xml
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/wagon-openpgp/pom.xml?rev=355292&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-openpgp/pom.xml (added)
+++ maven/wagon/trunk/wagon-openpgp/pom.xml Thu Dec 8 16:20:31 2005
@@ -0,0 +1,48 @@
+<project>
+ <parent>
+ <artifactId>wagon</artifactId>
+ <groupId>org.apache.maven.wagon</groupId>
+ <version>1.0-alpha-6-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>wagon-openpgp</artifactId>
+ <name>Maven Wagon OpenPGP Integration</name>
+ <version>1.0-alpha-6-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>1.0-alpha-6-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-test</artifactId>
+ <version>1.0-alpha-6-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>1.0-alpha-6-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>1.0-alpha-8</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-openpgp</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <!-- Until commons-pgp has a release -->
+ <repositories>
+ <repository>
+ <id>apache.snapshots</id>
+ <url>http://cvs.apache.org/maven-snapshot-repository</url>
+ </repository>
+ </repositories>
+</project>
Propchange: maven/wagon/trunk/wagon-openpgp/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/wagon/trunk/wagon-openpgp/pom.xml
------------------------------------------------------------------------------
svn:executable = *
Propchange: maven/wagon/trunk/wagon-openpgp/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignatureVerifierObserver.java
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignatureVerifierObserver.java?rev=355292&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignatureVerifierObserver.java (added)
+++ maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignatureVerifierObserver.java Thu Dec 8 16:20:31 2005
@@ -0,0 +1,87 @@
+package org.apache.maven.wagon.openpgp;
+
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.apache.commons.openpgp.BouncyCastleOpenPgpStreamingSignatureVerifier;
+import org.apache.commons.openpgp.KeyRing;
+import org.apache.commons.openpgp.OpenPgpException;
+import org.apache.commons.openpgp.OpenPgpStreamingSignatureVerifier;
+import org.apache.commons.openpgp.SignatureStatus;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.observers.AbstractTransferListener;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Listener to the upload process that can sign the artifact.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo handle non-detached
+ * @todo does this need to handle reset in transferStarted so it can be reused?
+ */
+public class WagonOpenPgpSignatureVerifierObserver
+ extends AbstractTransferListener
+{
+ private final OpenPgpStreamingSignatureVerifier verifier;
+
+ private SignatureStatus status;
+
+ public WagonOpenPgpSignatureVerifierObserver( InputStream inputStream, KeyRing keyRing, boolean asciiArmored )
+ throws OpenPgpException, IOException
+ {
+ verifier = new BouncyCastleOpenPgpStreamingSignatureVerifier( inputStream, keyRing, asciiArmored );
+ }
+
+ public void transferInitiated( TransferEvent transferEvent )
+ {
+ this.status = null;
+ }
+
+ public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
+ {
+ try
+ {
+ verifier.update( buffer, 0, length );
+ }
+ catch ( OpenPgpException e )
+ {
+ // TODO: record the error in some way
+ }
+ }
+
+ public void transferCompleted( TransferEvent transferEvent )
+ {
+ try
+ {
+ status = verifier.finish();
+ }
+ catch ( OpenPgpException e )
+ {
+ // TODO: record the error in some way
+ }
+ catch ( IOException e )
+ {
+ // TODO: record the error in some way
+ }
+ }
+
+ public SignatureStatus getStatus()
+ {
+ return status;
+ }
+}
Propchange: maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignatureVerifierObserver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignatureVerifierObserver.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignerObserver.java
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignerObserver.java?rev=355292&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignerObserver.java (added)
+++ maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignerObserver.java Thu Dec 8 16:20:31 2005
@@ -0,0 +1,85 @@
+package org.apache.maven.wagon.openpgp;
+
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.apache.commons.openpgp.BouncyCastleOpenPgpStreamingSigner;
+import org.apache.commons.openpgp.KeyRing;
+import org.apache.commons.openpgp.OpenPgpException;
+import org.apache.commons.openpgp.OpenPgpStreamingSigner;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.observers.AbstractTransferListener;
+
+import java.io.IOException;
+
+/**
+ * Listener to the upload process that can sign the artifact.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @todo handle non-detached
+ * @todo does this need to handle reset in transferStarted so it can be reused?
+ */
+public class WagonOpenPgpSignerObserver
+ extends AbstractTransferListener
+{
+ private final OpenPgpStreamingSigner signer;
+
+ private byte[] actualSignature;
+
+ public WagonOpenPgpSignerObserver( String keyId, KeyRing keyRing, boolean asciiArmored )
+ throws OpenPgpException
+ {
+ signer = new BouncyCastleOpenPgpStreamingSigner( keyId, keyRing, asciiArmored );
+ }
+
+ public void transferInitiated( TransferEvent transferEvent )
+ {
+ this.actualSignature = null;
+ }
+
+ public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
+ {
+ try
+ {
+ signer.update( buffer, 0, length );
+ }
+ catch ( OpenPgpException e )
+ {
+ // TODO: record the error in some way
+ }
+ }
+
+ public void transferCompleted( TransferEvent transferEvent )
+ {
+ try
+ {
+ actualSignature = signer.finish();
+ }
+ catch ( OpenPgpException e )
+ {
+ // TODO: record the error in some way
+ }
+ catch ( IOException e )
+ {
+ // TODO: record the error in some way
+ }
+ }
+
+ public byte[] getActualSignature()
+ {
+ return actualSignature;
+ }
+}
Propchange: maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignerObserver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/wagon/trunk/wagon-openpgp/src/main/java/org/apache/maven/wagon/openpgp/WagonOpenPgpSignerObserver.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/WagonOpenPgpObserverTest.java
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/WagonOpenPgpObserverTest.java?rev=355292&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/WagonOpenPgpObserverTest.java (added)
+++ maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/WagonOpenPgpObserverTest.java Thu Dec 8 16:20:31 2005
@@ -0,0 +1,122 @@
+package org.apache.maven.wagon.openpgp;
+
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.apache.commons.openpgp.BouncyCastleKeyRing;
+import org.apache.commons.openpgp.BouncyCastleOpenPgpSignatureVerifier;
+import org.apache.commons.openpgp.KeyRing;
+import org.apache.commons.openpgp.OpenPgpSignatureVerifier;
+import org.apache.commons.openpgp.SignatureStatus;
+import org.apache.maven.wagon.FileTestUtils;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.repository.Repository;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+
+/**
+ * Test the wagon observer for open pgp signatures.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class WagonOpenPgpObserverTest
+ extends PlexusTestCase
+{
+ private String keyId = "A7D16BD4";
+
+ private static final String PASSWORD = "cop";
+
+ private KeyRing keyRing;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ keyRing = new BouncyCastleKeyRing( getClass().getResourceAsStream( "/secring.gpg" ),
+ getClass().getResourceAsStream( "/pubring.gpg" ), PASSWORD.toCharArray() );
+ }
+
+ public void testSign()
+ throws Exception
+ {
+ WagonOpenPgpSignerObserver observer = new WagonOpenPgpSignerObserver( keyId, keyRing, false );
+
+ Wagon wagon = (Wagon) lookup( Wagon.ROLE, "file" );
+
+ wagon.addTransferListener( observer );
+
+ File tempDir = new File( FileTestUtils.getTestOutputDir(), "openpgp-repo" );
+ tempDir.mkdirs();
+ tempDir.deleteOnExit();
+
+ Repository repository = new Repository( "test", tempDir.toURL().toString() );
+
+ wagon.connect( repository );
+
+ // TODO: use streams when available
+ wagon.put( getTestFile( "src/test/resources/test-input.txt" ), "test-input.txt" );
+
+ byte[] signature = observer.getActualSignature();
+
+ wagon.removeTransferListener( observer );
+
+ wagon.disconnect();
+
+ // check signature
+ OpenPgpSignatureVerifier verifier = new BouncyCastleOpenPgpSignatureVerifier();
+ SignatureStatus status = verifier.verifyDetachedSignature( getClass().getResourceAsStream( "/test-input.txt" ),
+ new ByteArrayInputStream( signature ), keyRing,
+ false );
+
+ assertNotNull( "check we got a status", status );
+ assertTrue( "check it was successful", status.isValid() );
+ }
+
+ public void testVerify()
+ throws Exception
+ {
+ WagonOpenPgpSignatureVerifierObserver observer = new WagonOpenPgpSignatureVerifierObserver(
+ getClass().getResourceAsStream( "/test-signature.bpg" ), keyRing, false );
+
+ Wagon wagon = (Wagon) lookup( Wagon.ROLE, "file" );
+
+ wagon.addTransferListener( observer );
+
+ File tempDir = new File( FileTestUtils.getTestOutputDir(), "openpgp-repo" );
+ tempDir.mkdirs();
+ tempDir.deleteOnExit();
+
+ Repository repository = new Repository( "test", getTestFile( "src/test/resources" ).toURL().toString() );
+
+ wagon.connect( repository );
+
+ // TODO: use streams when available
+ wagon.get( "test-input.txt", new File( tempDir, "test-input.txt" ) );
+
+ SignatureStatus status = observer.getStatus();
+
+ assertNotNull( "check we got a status", status );
+ assertTrue( "check it was successful", status.isValid() );
+
+ wagon.removeTransferListener( observer );
+
+ wagon.disconnect();
+ }
+
+}
Propchange: maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/WagonOpenPgpObserverTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/wagon/trunk/wagon-openpgp/src/test/java/org/apache/maven/wagon/openpgp/WagonOpenPgpObserverTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/AbstractTransferListener.java
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/AbstractTransferListener.java?rev=355292&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/AbstractTransferListener.java (added)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/AbstractTransferListener.java Thu Dec 8 16:20:31 2005
@@ -0,0 +1,60 @@
+package org.apache.maven.wagon.observers;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.events.TransferListener;
+
+/**
+ * TransferListeners which computes MD5 checksum on the fly when files are transfered.
+ *
+ * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
+ * @version $Id$
+ */
+public abstract class AbstractTransferListener
+ implements TransferListener
+{
+ public void transferInitiated( TransferEvent transferEvent )
+ {
+ }
+
+ /**
+ * @see org.apache.maven.wagon.events.TransferListener#transferStarted(org.apache.maven.wagon.events.TransferEvent)
+ */
+ public void transferStarted( TransferEvent transferEvent )
+ {
+ }
+
+ /**
+ * @see org.apache.maven.wagon.events.TransferListener#transferProgress(org.apache.maven.wagon.events.TransferEvent,byte[],int)
+ */
+ public void transferProgress( TransferEvent transferEvent, byte[] buffer, int length )
+ {
+ }
+
+ public void transferCompleted( TransferEvent transferEvent )
+ {
+ }
+
+ public void transferError( TransferEvent transferEvent )
+ {
+ }
+
+ public void debug( String message )
+ {
+ }
+}
Propchange: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/AbstractTransferListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/AbstractTransferListener.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
---------------------------------------------------------------------
To unsubscribe, e-mail: wagon-commits-unsubscribe@maven.apache.org
For additional commands, e-mail: wagon-commits-help@maven.apache.org