From fbf5e991b3cbe86b6a60aae4f127e07b30bb374a Mon Sep 17 00:00:00 2001
From: Martin Stockhammer
Date: Sat, 31 Mar 2018 19:20:30 +0200
Subject: [PATCH] Unifying checksum code into the checksum module
---
.../org/apache/archiva/checksum/Checksum.java | 104 ++++++-
.../archiva/checksum/ChecksumAlgorithm.java | 47 +++-
.../archiva/checksum/ChecksumFileContent.java | 84 ++++++
.../archiva/checksum/ChecksumReference.java | 73 +++++
.../checksum/ChecksumValidationException.java | 4 +-
.../archiva/checksum/ChecksummedFile.java | 264 +++++++++++-------
.../java/org/apache/archiva/checksum/Hex.java | 24 +-
.../checksum/AbstractChecksumTestCase.java | 1 +
.../apache/archiva/checksum/ChecksumTest.java | 17 +-
.../archiva/checksum/ChecksummedFileTest.java | 56 ++--
.../archiva-core-consumers/pom.xml | 5 +-
.../archiva/checksum/ChecksumValidator.java | 181 ------------
.../ArtifactMissingChecksumsConsumer.java | 19 +-
.../core/ValidateChecksumConsumer.java | 22 +-
.../checksum/ChecksumValidatorTest.java | 145 ----------
.../test/resources/checksum/checksumTest1.txt | 26 --
.../resources/checksum/checksumTest1.txt.md5 | 1 -
.../resources/checksum/checksumTest1.txt.md8 | 1 -
.../resources/checksum/checksumTest1.txt.sha1 | 1 -
.../resources/checksum/checksumTest1.txt.sha2 | 1 -
.../resources/checksum/checksumTest1.txt.sha3 | 1 -
.../resources/checksum/checksumTest1.txt.sha5 | 1 -
.../test/resources/checksum/checksumTest2.txt | 27 --
.../resources/checksum/checksumTest2.txt.md5 | 1 -
.../resources/checksum/checksumTest2.txt.sha1 | 1 -
.../resources/checksum/checksumTest2.txt.sha2 | 1 -
.../resources/checksum/checksumTest2.txt.sha3 | 1 -
.../resources/checksum/checksumTest2.txt.sha5 | 1 -
.../test/resources/checksum/checksumTest3.txt | 25 --
.../resources/checksum/checksumTest3.txt.md5 | 1 -
.../resources/checksum/checksumTest3.txt.sha1 | 1 -
.../resources/checksum/checksumTest3.txt.sha2 | 1 -
.../resources/checksum/checksumTest3.txt.sha3 | 1 -
.../resources/checksum/checksumTest3.txt.sha5 | 1 -
.../resources/checksum/checksumTest4.txt.md5 | 1 -
.../archiva/policies/ChecksumPolicy.java | 2 +-
...ArchivaRepositoryScanningTaskExecutor.java | 2 -
37 files changed, 514 insertions(+), 631 deletions(-)
create mode 100644 archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumFileContent.java
create mode 100644 archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumReference.java
rename archiva-modules/archiva-base/{archiva-consumers/archiva-core-consumers => archiva-checksum}/src/main/java/org/apache/archiva/checksum/ChecksumValidationException.java (95%)
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/checksum/ChecksumValidator.java
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/checksum/ChecksumValidatorTest.java
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md5
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md8
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha1
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha2
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha3
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha5
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.md5
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha1
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha2
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha3
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha5
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.md5
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha1
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha2
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha3
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha5
delete mode 100644 archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest4.txt.md5
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java
index c83b9d433..5dd05d582 100644
--- a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java
+++ b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Checksum.java
@@ -22,8 +22,14 @@ package org.apache.archiva.checksum;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.output.NullOutputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -35,19 +41,35 @@ import java.util.List;
public class Checksum
{
private static final int BUFFER_SIZE = 32768;
+ private byte[] result = new byte[0];
- public static void update( List checksums, InputStream stream )
- throws IOException
+ public static void update( List checksums, Path file )
+ throws ChecksumValidationException
{
- byte[] buffer = new byte[BUFFER_SIZE];
- int size = stream.read( buffer, 0, BUFFER_SIZE );
- while ( size >= 0 )
- {
- for ( Checksum checksum : checksums )
+ long fileSize;
+ try (FileChannel channel = FileChannel.open(file, StandardOpenOption.READ )) {
+ fileSize = channel.size();
+ long pos = 0;
+ while (pos extensionMap = new HashMap<>( );
+
+ static {
+ for (ChecksumAlgorithm alg : ChecksumAlgorithm.values()) {
+ for (String extString : alg.getExt())
+ {
+ extensionMap.put( extString, alg );
+ }
}
+ }
- throw new IllegalArgumentException( "Filename " + file.getFileName() + " has no associated extension." );
+ public static Set getExtensions() {
+ return extensionMap.keySet();
}
/**
@@ -56,7 +76,7 @@ public enum ChecksumAlgorithm {
/**
* The file extension for this ChecksumAlgorithm.
*/
- private final String ext;
+ private final List ext;
/**
* The checksum type, the key that you see in checksum files.
@@ -70,11 +90,12 @@ public enum ChecksumAlgorithm {
* @param ext the file extension.
* @param type the checksum type.
*/
- private ChecksumAlgorithm( String algorithm, String ext, String type )
+ private ChecksumAlgorithm( String algorithm, String type, String... ext )
{
this.algorithm = algorithm;
- this.ext = ext;
+ this.ext = Arrays.asList( ext );
this.type = type;
+
}
public String getAlgorithm()
@@ -82,7 +103,7 @@ public enum ChecksumAlgorithm {
return algorithm;
}
- public String getExt()
+ public List getExt()
{
return ext;
}
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumFileContent.java b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumFileContent.java
new file mode 100644
index 000000000..76079ecdf
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumFileContent.java
@@ -0,0 +1,84 @@
+package org.apache.archiva.checksum;
+
+/*
+ * 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.
+ */
+
+/**
+ * Simple POJO for storing the data parsed from a checksum file.
+ *
+ * @author Martin Stockhammer
+ */
+public class ChecksumFileContent
+{
+ String checksum;
+ String fileReference;
+ boolean formatMatch = false;
+
+ public ChecksumFileContent() {
+ }
+
+ public ChecksumFileContent(String checksum, String fileReference, boolean formatMatch) {
+ this.checksum = checksum;
+ this.fileReference = fileReference;
+ this.formatMatch = formatMatch;
+ }
+
+ /**
+ * The checksum as hex string.
+ *
+ * @return
+ */
+ public String getChecksum( )
+ {
+ return checksum;
+ }
+
+ public void setChecksum( String checksum )
+ {
+ this.checksum = checksum;
+ }
+
+ /**
+ * The name of the reference file as stored in the checksum file.
+ * @return
+ */
+ public String getFileReference( )
+ {
+ return fileReference;
+ }
+
+ public void setFileReference( String fileReference )
+ {
+ this.fileReference = fileReference;
+ }
+
+ /**
+ * True, if the file content matches a known format
+ * @return
+ */
+ public boolean isFormatMatch( )
+ {
+ return formatMatch;
+ }
+
+ public void setFormatMatch( boolean formatMatch )
+ {
+ this.formatMatch = formatMatch;
+ }
+}
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumReference.java b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumReference.java
new file mode 100644
index 000000000..b8c2f7f32
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumReference.java
@@ -0,0 +1,73 @@
+package org.apache.archiva.checksum;
+
+/*
+ * 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 java.nio.file.Path;
+
+/**
+ *
+ * Simple POJO used to represent a one-to-one relationship between a reference file and
+ * a checksum file. The checksum file represents a certain algorithm.
+ *
+ * @author Martin Stockhammer
+ */
+public class ChecksumReference
+{
+ private ChecksummedFile file;
+ private Path checksumFile;
+ private ChecksumAlgorithm algorithm;
+
+
+ ChecksumReference( ChecksummedFile file, ChecksumAlgorithm algo, Path checksumFile )
+ {
+ this.file = file;
+ this.algorithm = algo;
+ }
+
+ public ChecksummedFile getFile( )
+ {
+ return file;
+ }
+
+ public void setFile( ChecksummedFile file )
+ {
+ this.file = file;
+ }
+
+ public ChecksumAlgorithm getAlgorithm( )
+ {
+ return algorithm;
+ }
+
+ public void setAlgorithm( ChecksumAlgorithm algorithm )
+ {
+ this.algorithm = algorithm;
+ }
+
+ public Path getChecksumFile( )
+ {
+ return checksumFile;
+ }
+
+ public void setChecksumFile( Path checksumFile )
+ {
+ this.checksumFile = checksumFile;
+ }
+}
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/checksum/ChecksumValidationException.java b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumValidationException.java
similarity index 95%
rename from archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/checksum/ChecksumValidationException.java
rename to archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumValidationException.java
index 4ecab974d..1123e6afa 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/checksum/ChecksumValidationException.java
+++ b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksumValidationException.java
@@ -26,11 +26,11 @@ package org.apache.archiva.checksum;
*
* @author Martin Stockhammer
*/
-public class ChecksumValidationException extends Exception
+public class ChecksumValidationException extends RuntimeException
{
public enum ValidationError {
- INVALID_FORMAT, DIGEST_ERROR, READ_ERROR, FILE_NOT_FOUND
+ INVALID_FORMAT, DIGEST_ERROR, READ_ERROR, FILE_NOT_FOUND, BAD_CHECKSUM_FILE_REF
};
final private ValidationError errorType;
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java
index 6459a1c97..53a3d4658 100644
--- a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java
+++ b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/ChecksummedFile.java
@@ -20,12 +20,11 @@ package org.apache.archiva.checksum;
*/
import org.apache.archiva.common.utils.FileUtils;
-import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.xml.bind.ValidationException;
import java.io.IOException;
-import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -35,6 +34,8 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static org.apache.archiva.checksum.ChecksumValidationException.ValidationError.BAD_CHECKSUM_FILE_REF;
+
/**
* ChecksummedFile
* Terminology:
@@ -69,6 +70,20 @@ public class ChecksummedFile
this.referenceFile = referenceFile;
}
+
+ public static ChecksumReference getFromChecksumFile( Path checksumFile )
+ {
+ ChecksumAlgorithm alg = ChecksumAlgorithm.getByExtension( checksumFile );
+ ChecksummedFile file = new ChecksummedFile( getReferenceFile( checksumFile ) );
+ return new ChecksumReference( file, alg, checksumFile );
+ }
+
+ private static Path getReferenceFile( Path checksumFile )
+ {
+ String fileName = checksumFile.getFileName( ).toString( );
+ return checksumFile.resolveSibling( fileName.substring( 0, fileName.lastIndexOf( '.' ) ) );
+ }
+
/**
* Calculate the checksum based on a given checksum.
*
@@ -80,12 +95,9 @@ public class ChecksummedFile
throws IOException
{
- try (InputStream fis = Files.newInputStream( referenceFile ))
- {
- Checksum checksum = new Checksum( checksumAlgorithm );
- checksum.update( fis );
- return checksum.getChecksum();
- }
+ Checksum checksum = new Checksum( checksumAlgorithm );
+ checksum.update( referenceFile );
+ return checksum.getChecksum( );
}
/**
@@ -98,12 +110,12 @@ public class ChecksummedFile
public Path createChecksum( ChecksumAlgorithm checksumAlgorithm )
throws IOException
{
- Path checksumFile = referenceFile.resolveSibling( referenceFile.getFileName() + "." + checksumAlgorithm.getExt() );
+ Path checksumFile = referenceFile.resolveSibling( referenceFile.getFileName( ) + "." + checksumAlgorithm.getExt( ).get( 0 ) );
Files.deleteIfExists( checksumFile );
String checksum = calculateChecksum( checksumAlgorithm );
Files.write( checksumFile, //
- ( checksum + " " + referenceFile.getFileName().toString() ).getBytes(), //
- StandardOpenOption.CREATE_NEW );
+ ( checksum + " " + referenceFile.getFileName( ).toString( ) ).getBytes( ), //
+ StandardOpenOption.CREATE_NEW );
return checksumFile;
}
@@ -115,7 +127,15 @@ public class ChecksummedFile
*/
public Path getChecksumFile( ChecksumAlgorithm checksumAlgorithm )
{
- return referenceFile.resolveSibling( referenceFile.getFileName() + "." + checksumAlgorithm.getExt() );
+ for ( String ext : checksumAlgorithm.getExt( ) )
+ {
+ Path file = referenceFile.resolveSibling( referenceFile.getFileName( ) + "." + checksumAlgorithm.getExt( ) );
+ if ( Files.exists( file ) )
+ {
+ return file;
+ }
+ }
+ return referenceFile.resolveSibling( referenceFile.getFileName( ) + "." + checksumAlgorithm.getExt( ).get( 0 ) );
}
/**
@@ -130,10 +150,14 @@ public class ChecksummedFile
* @return true if the checksum is valid for the file it represents. or if the checksum file does not exist.
* @throws IOException if the reading of the checksumFile or the file it refers to fails.
*/
- public boolean isValidChecksum( ChecksumAlgorithm algorithm )
- throws IOException
+ public boolean isValidChecksum( ChecksumAlgorithm algorithm) throws ChecksumValidationException
+ {
+ return isValidChecksum( algorithm, false );
+ }
+ public boolean isValidChecksum( ChecksumAlgorithm algorithm, boolean throwExceptions )
+ throws ChecksumValidationException
{
- return isValidChecksums( new ChecksumAlgorithm[]{ algorithm } );
+ return isValidChecksums( new ChecksumAlgorithm[]{algorithm} );
}
/**
@@ -143,74 +167,92 @@ public class ChecksummedFile
* @param algorithms the algorithms to check for.
* @return true if the checksums report that the the reference file is valid, false if invalid.
*/
- public boolean isValidChecksums( ChecksumAlgorithm algorithms[] )
+ public boolean isValidChecksums( ChecksumAlgorithm algorithms[]) throws ChecksumValidationException
{
+ return isValidChecksums( algorithms, false );
+ }
- try (InputStream fis = Files.newInputStream( referenceFile))
- {
- List checksums = new ArrayList<>( algorithms.length );
- // Create checksum object for each algorithm.
- for ( ChecksumAlgorithm checksumAlgorithm : algorithms )
- {
- Path checksumFile = getChecksumFile( checksumAlgorithm );
+ /**
+ * Checks if the checksums are valid for the referenced file.
+ * This method throws only exceptions, if throwExceptions is true. Otherwise false will be returned instead.
+ * @param algorithms The algorithms to verify
+ * @param throwExceptions If true, exceptions will be thrown, otherwise false will be returned, if a exception occurred.
+ * @return True, if it is valid, otherwise false.
+ * @throws ChecksumValidationException
+ */
+ public boolean isValidChecksums( ChecksumAlgorithm algorithms[], boolean throwExceptions) throws ChecksumValidationException
+ {
- // Only add algorithm if checksum file exists.
- if ( Files.exists(checksumFile) )
- {
- checksums.add( new Checksum( checksumAlgorithm ) );
- }
- }
+ List checksums = new ArrayList<>( algorithms.length );
+ // Create checksum object for each algorithm.
+ for ( ChecksumAlgorithm checksumAlgorithm : algorithms )
+ {
+ Path checksumFile = getChecksumFile( checksumAlgorithm );
- // Any checksums?
- if ( checksums.isEmpty() )
+ // Only add algorithm if checksum file exists.
+ if ( Files.exists( checksumFile ) )
{
- // No checksum objects, no checksum files, default to is invalid.
- return false;
+ checksums.add( new Checksum( checksumAlgorithm ) );
}
+ }
- // Parse file once, for all checksums.
- try
- {
- Checksum.update( checksums, fis );
- }
- catch ( IOException e )
- {
- log.warn( "Unable to update checksum:{}", e.getMessage() );
+ // Any checksums?
+ if ( checksums.isEmpty( ) )
+ {
+ // No checksum objects, no checksum files, default to is invalid.
+ return false;
+ }
+
+ // Parse file once, for all checksums.
+ try
+ {
+ Checksum.update( checksums, referenceFile );
+ }
+ catch ( ChecksumValidationException e )
+ {
+ log.warn( "Unable to update checksum:{}", e.getMessage( ) );
+ if (throwExceptions) {
+ throw e;
+ } else {
return false;
}
+ }
- boolean valid = true;
+ boolean valid = true;
- // check the checksum files
- try
+ // check the checksum files
+ try
+ {
+ for ( Checksum checksum : checksums )
{
- for ( Checksum checksum : checksums )
- {
- ChecksumAlgorithm checksumAlgorithm = checksum.getAlgorithm();
- Path checksumFile = getChecksumFile( checksumAlgorithm );
+ ChecksumAlgorithm checksumAlgorithm = checksum.getAlgorithm( );
+ Path checksumFile = getChecksumFile( checksumAlgorithm );
- String rawChecksum = FileUtils.readFileToString( checksumFile , FILE_ENCODING );
- String expectedChecksum = parseChecksum( rawChecksum, checksumAlgorithm, referenceFile.getFileName().toString() );
+ String expectedChecksum = parseChecksum( checksumFile, checksumAlgorithm, referenceFile.getFileName( ).toString( ), FILE_ENCODING );
- if ( !StringUtils.equalsIgnoreCase( expectedChecksum, checksum.getChecksum() ) )
- {
- valid = false;
- }
+ if ( !checksum.compare( expectedChecksum ) )
+ {
+ valid = false;
}
}
- catch ( IOException e )
+ }
+ catch ( ChecksumValidationException e )
+ {
+ log.warn( "Unable to read / parse checksum: {}", e.getMessage( ) );
+ if (throwExceptions) {
+ throw e;
+ } else
{
- log.warn( "Unable to read / parse checksum: {}", e.getMessage() );
return false;
}
-
- return valid;
- }
- catch ( IOException e )
- {
- log.warn( "Unable to read / parse checksum: {}", e.getMessage() );
- return false;
}
+
+ return valid;
+ }
+
+ public Path getReferenceFile( )
+ {
+ return referenceFile;
}
/**
@@ -229,20 +271,20 @@ public class ChecksummedFile
}
// Any checksums?
- if ( checksums.isEmpty() )
+ if ( checksums.isEmpty( ) )
{
// No checksum objects, no checksum files, default to is valid.
return true;
}
- try (InputStream fis = Files.newInputStream( referenceFile ))
+ try
{
// Parse file once, for all checksums.
- Checksum.update( checksums, fis );
+ Checksum.update( checksums, referenceFile );
}
- catch ( IOException e )
+ catch ( ChecksumValidationException e )
{
- log.warn( e.getMessage(), e );
+ log.warn( e.getMessage( ), e );
return false;
}
@@ -251,31 +293,28 @@ public class ChecksummedFile
// check the hash files
for ( Checksum checksum : checksums )
{
- ChecksumAlgorithm checksumAlgorithm = checksum.getAlgorithm();
+ ChecksumAlgorithm checksumAlgorithm = checksum.getAlgorithm( );
try
{
Path checksumFile = getChecksumFile( checksumAlgorithm );
- String actualChecksum = checksum.getChecksum();
-
- if ( Files.exists(checksumFile) )
+ if ( Files.exists( checksumFile ) )
{
- String rawChecksum = FileUtils.readFileToString( checksumFile, FILE_ENCODING);
- String expectedChecksum = parseChecksum( rawChecksum, checksumAlgorithm, referenceFile.getFileName().toString() );
+ String expectedChecksum = parseChecksum( checksumFile, checksumAlgorithm, referenceFile.getFileName( ).toString( ), FILE_ENCODING );
- if ( !StringUtils.equalsIgnoreCase( expectedChecksum, actualChecksum ) )
+ if ( !checksum.compare( expectedChecksum ) )
{
// create checksum (again)
- FileUtils.writeStringToFile( checksumFile, FILE_ENCODING, actualChecksum + " " + referenceFile.getFileName().toString());
+ writeChecksumFile( checksumFile, FILE_ENCODING, checksum.getChecksum( ) );
}
}
else
{
- FileUtils.writeStringToFile( checksumFile, FILE_ENCODING, actualChecksum + " " + referenceFile.getFileName().toString() );
+ writeChecksumFile( checksumFile, FILE_ENCODING, checksum.getChecksum( ) );
}
}
- catch ( IOException e )
+ catch ( ChecksumValidationException e )
{
- log.warn( e.getMessage(), e );
+ log.warn( e.getMessage( ), e );
valid = false;
}
}
@@ -284,12 +323,17 @@ public class ChecksummedFile
}
+ private void writeChecksumFile( Path checksumFile, Charset encoding, String checksumHex )
+ {
+ FileUtils.writeStringToFile( checksumFile, FILE_ENCODING, checksumHex + " " + referenceFile.getFileName( ).toString( ) );
+ }
+
private boolean isValidChecksumPattern( String filename, String path )
{
// check if it is a remote metadata file
Matcher m = METADATA_PATTERN.matcher( path );
- if ( m.matches() )
+ if ( m.matches( ) )
{
return filename.endsWith( path ) || ( "-".equals( filename ) ) || filename.endsWith( "maven-metadata.xml" );
}
@@ -304,46 +348,56 @@ public class ChecksummedFile
* the trimmed checksum hex string.
*
*
- * @param rawChecksumString
- * @param expectedHash
- * @param expectedPath
+ * @param checksumFile The file where the checksum is stored
+ * @param expectedHash The checksum algorithm to check
+ * @param expectedPath The filename of the reference file
* @return
* @throws IOException
*/
- public String parseChecksum( String rawChecksumString, ChecksumAlgorithm expectedHash, String expectedPath )
- throws IOException
+ public String parseChecksum( Path checksumFile, ChecksumAlgorithm expectedHash, String expectedPath, Charset encoding )
+ throws ChecksumValidationException
+ {
+ ChecksumFileContent fc = parseChecksumFile( checksumFile, expectedHash, encoding );
+ if ( fc.isFormatMatch() && !isValidChecksumPattern( fc.getFileReference( ), expectedPath ) )
+ {
+ throw new ChecksumValidationException(BAD_CHECKSUM_FILE_REF,
+ "The file reference '" + fc.getFileReference( ) + "' in the checksum file does not match expected file: '" + expectedPath + "'" );
+ }
+ return fc.getChecksum( );
+ }
+
+ public ChecksumFileContent parseChecksumFile( Path checksumFile, ChecksumAlgorithm expectedHash, Charset encoding )
{
- String trimmedChecksum = rawChecksumString.replace( '\n', ' ' ).trim();
+ ChecksumFileContent fc = new ChecksumFileContent( );
+ String rawChecksumString = FileUtils.readFileToString( checksumFile, encoding );
+ String trimmedChecksum = rawChecksumString.replace( '\n', ' ' ).trim( );
// Free-BSD / openssl
- String regex = expectedHash.getType() + "\\s*\\(([^)]*)\\)\\s*=\\s*([a-fA-F0-9]+)";
+ String regex = expectedHash.getType( ) + "\\s*\\(([^)]*)\\)\\s*=\\s*([a-fA-F0-9]+)";
Matcher m = Pattern.compile( regex ).matcher( trimmedChecksum );
- if ( m.matches() )
+ if ( m.matches( ) )
{
- String filename = m.group( 1 );
- if ( !isValidChecksumPattern( filename, expectedPath ) )
- {
- throw new IOException(
- "Supplied checksum file '" + filename + "' does not match expected file: '" + expectedPath + "'" );
- }
- trimmedChecksum = m.group( 2 );
+ fc.setFileReference( m.group( 1 ) );
+ fc.setChecksum( m.group( 2 ) );
+ fc.setFormatMatch( true );
}
else
{
// GNU tools
m = Pattern.compile( "([a-fA-F0-9]+)\\s+\\*?(.+)" ).matcher( trimmedChecksum );
- if ( m.matches() )
+ if ( m.matches( ) )
{
- String filename = m.group( 2 );
- if ( !isValidChecksumPattern( filename, expectedPath ) )
- {
- throw new IOException(
- "Supplied checksum file '" + filename + "' does not match expected file: '" + expectedPath
- + "'" );
- }
- trimmedChecksum = m.group( 1 );
+ fc.setFileReference( m.group( 2 ) );
+ fc.setChecksum( m.group( 1 ) );
+ fc.setFormatMatch( true );
+ }
+ else
+ {
+ fc.setFileReference( "" );
+ fc.setChecksum( trimmedChecksum );
+ fc.setFormatMatch( false );
}
}
- return trimmedChecksum;
+ return fc;
}
}
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Hex.java b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Hex.java
index 9ca6ce43d..6353a87f1 100644
--- a/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Hex.java
+++ b/archiva-modules/archiva-base/archiva-checksum/src/main/java/org/apache/archiva/checksum/Hex.java
@@ -19,6 +19,8 @@ package org.apache.archiva.checksum;
* under the License.
*/
+import javax.xml.bind.DatatypeConverter;
+
/**
* Hex - simple hex conversions.
*
@@ -26,21 +28,15 @@ package org.apache.archiva.checksum;
*/
public class Hex
{
- private static final byte[] DIGITS = "0123456789abcdef".getBytes();
public static String encode( byte[] data )
{
- int l = data.length;
-
- byte[] raw = new byte[l * 2];
-
- for ( int i = 0, j = 0; i < l; i++ )
+ try
{
- raw[j++] = DIGITS[( 0xF0 & data[i] ) >>> 4];
- raw[j++] = DIGITS[0x0F & data[i]];
+ return DatatypeConverter.printHexBinary( data ).trim( ).toLowerCase( );
+ } catch (IllegalArgumentException e) {
+ return "";
}
-
- return new String( raw );
}
public static String encode( String raw )
@@ -48,4 +44,12 @@ public class Hex
return encode( raw.getBytes() );
}
+ public static byte[] decode( String data ) {
+ try
+ {
+ return DatatypeConverter.parseHexBinary( data.trim( ) );
+ } catch (IllegalArgumentException e) {
+ return new byte[0];
+ }
+ }
}
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/AbstractChecksumTestCase.java b/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/AbstractChecksumTestCase.java
index fafa10319..f1caab9b1 100644
--- a/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/AbstractChecksumTestCase.java
+++ b/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/AbstractChecksumTestCase.java
@@ -65,4 +65,5 @@ public abstract class AbstractChecksumTestCase
}
return file;
}
+
}
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java b/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
index bc7f0b274..55746f6b9 100644
--- a/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
+++ b/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksumTest.java
@@ -20,12 +20,16 @@ package org.apache.archiva.checksum;
*/
import junit.framework.TestCase;
+import org.apache.archiva.common.utils.FileUtils;
import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
@@ -36,9 +40,10 @@ import java.util.List;
*/
@RunWith( ArchivaBlockJUnit4ClassRunner.class )
public class ChecksumTest
- extends TestCase
+ extends AbstractChecksumTestCase
{
private static final String UNSET_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
+ private static final Charset FILE_ENCODING = Charset.forName( "UTF-8" );
@Test
public void testConstructSha1()
@@ -68,7 +73,7 @@ public class ChecksumTest
@Test
public void testUpdateMany()
- throws IOException
+ throws IOException, ChecksumValidationException
{
Checksum checksumSha1 = new Checksum( ChecksumAlgorithm.SHA1 );
Checksum checksumMd5 = new Checksum( ChecksumAlgorithm.MD5 );
@@ -76,11 +81,11 @@ public class ChecksumTest
checksums.add( checksumSha1 );
checksums.add( checksumMd5 );
- byte buf[] = ( "You know, I'm sick of following my dreams, man. "
- + "I'm just going to ask where they're going and hook up with 'em later. - Mitch Hedberg" ).getBytes();
+ Path checkFile = getTestOutputDir().resolve( "test-file1.txt" );
+ FileUtils.writeStringToFile( checkFile, FILE_ENCODING, "You know, I'm sick of following my dreams, man. "
+ + "I'm just going to ask where they're going and hook up with 'em later. - Mitch Hedberg");
- ByteArrayInputStream stream = new ByteArrayInputStream( buf );
- Checksum.update( checksums, stream );
+ Checksum.update( checksums, checkFile );
assertEquals( "Checksum SHA1", "e396119ae0542e85a74759602fd2f81e5d36d762", checksumSha1.getChecksum() );
assertEquals( "Checksum MD5", "21c2c5ca87ec018adacb2e2fb3432219", checksumMd5.getChecksum() );
diff --git a/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java b/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java
index 04c63912c..d458d82a7 100644
--- a/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java
+++ b/archiva-modules/archiva-base/archiva-checksum/src/test/java/org/apache/archiva/checksum/ChecksummedFileTest.java
@@ -25,6 +25,7 @@ import org.junit.Before;
import org.junit.Test;
import org.slf4j.LoggerFactory;
+import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
@@ -139,7 +140,7 @@ public class ChecksummedFileTest
@Test
public void testFixChecksum()
- throws IOException
+ throws IOException, ChecksumValidationException
{
Path jarFile = createTestableJar( "examples/redback-authz-open.jar" );
Path sha1File = jarFile.resolveSibling( jarFile.getFileName()+ ".sha1" );
@@ -167,7 +168,7 @@ public class ChecksummedFileTest
@Test
public void testIsValidChecksum()
- throws IOException
+ throws IOException, ChecksumValidationException
{
Path jarFile = createTestableJar( "examples/redback-authz-open.jar", true, false );
@@ -177,7 +178,7 @@ public class ChecksummedFileTest
@Test
public void testIsValidChecksumInvalidSha1Format()
- throws IOException
+ throws IOException, ChecksumValidationException
{
Path jarFile = createTestableJar( "examples/redback-authz-open.jar" );
Path sha1File = jarFile.resolveSibling( jarFile.getFileName() + ".sha1" );
@@ -192,7 +193,7 @@ public class ChecksummedFileTest
@Test
public void testIsValidChecksumNoChecksumFiles()
- throws IOException
+ throws IOException, ChecksumValidationException
{
Path jarFile = createTestableJar( "examples/redback-authz-open.jar", false, false );
@@ -204,7 +205,7 @@ public class ChecksummedFileTest
@Test
public void testIsValidChecksumSha1AndMd5()
- throws IOException
+ throws IOException, ChecksumValidationException
{
Path jarFile = createTestableJar( "examples/redback-authz-open.jar", true, true );
@@ -215,7 +216,7 @@ public class ChecksummedFileTest
@Test
public void testIsValidChecksumSha1NoMd5()
- throws IOException
+ throws IOException, ChecksumValidationException
{
Path jarFile = createTestableJar( "examples/redback-authz-open.jar", true, false );
@@ -227,40 +228,43 @@ public class ChecksummedFileTest
@Test
public void testParseChecksum()
- throws IOException
+ throws IOException, ChecksumValidationException
{
- String expected = SERVLETAPI_SHA1
- + " /home/projects/maven/repository-staging/to-ibiblio/maven2/servletapi/servletapi/2.4/servletapi-2.4.pom";
+ Path expectedFile = getTestOutputDir().resolve("servletapi-2.4.pom.sha1");
+ FileUtils.writeStringToFile( expectedFile, FILE_ENCODING, SERVLETAPI_SHA1
+ + " /home/projects/maven/repository-staging/to-ibiblio/maven2/servletapi/servletapi/2.4/servletapi-2.4.pom");
Path testfile = getTestResource( "examples/redback-authz-open.jar" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
- String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1,
- "servletapi/servletapi/2.4/servletapi-2.4.pom" );
+ String s = checksummedFile.parseChecksum( expectedFile, ChecksumAlgorithm.SHA1,
+ "servletapi/servletapi/2.4/servletapi-2.4.pom", FILE_ENCODING);
assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
}
@Test
public void testParseChecksumAltDash1()
- throws IOException
+ throws IOException, ChecksumValidationException
{
- String expected = SERVLETAPI_SHA1 + " -";
+ Path expectedFile = getTestOutputDir().resolve("redback-authz-open.jar.sha1");
+ FileUtils.writeStringToFile( expectedFile, FILE_ENCODING, SERVLETAPI_SHA1 + " -");
Path testfile = getTestResource( "examples/redback-authz-open.jar" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
- String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1,
- "servletapi/servletapi/2.4/servletapi-2.4.pom" );
+ String s = checksummedFile.parseChecksum( expectedFile, ChecksumAlgorithm.SHA1,
+ "servletapi/servletapi/2.4/servletapi-2.4.pom", FILE_ENCODING );
assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
}
@Test
public void testParseChecksumAltDash2()
- throws IOException
+ throws IOException, ChecksumValidationException
{
- String expected = "SHA1(-)=" + SERVLETAPI_SHA1;
+ Path expectedFile = getTestOutputDir().resolve("redback-authz-open.jar.sha1");
+ FileUtils.writeStringToFile( expectedFile, FILE_ENCODING, "SHA1(-)=" + SERVLETAPI_SHA1);
Path testfile = getTestResource( "examples/redback-authz-open.jar" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
- String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1,
- "servletapi/servletapi/2.4/servletapi-2.4.pom" );
+ String s = checksummedFile.parseChecksum( expectedFile, ChecksumAlgorithm.SHA1,
+ "servletapi/servletapi/2.4/servletapi-2.4.pom" , FILE_ENCODING);
assertEquals( "Checksum doesn't match", SERVLETAPI_SHA1, s );
}
@@ -268,16 +272,17 @@ public class ChecksummedFileTest
public void testRemoteMetadataChecksumFilePathSha1()
throws IOException
{
- String expected = REMOTE_METADATA_SHA1 + " /home/test/repository/examples/metadata/maven-metadata.xml";
+ Path expectedFile = getTestOutputDir().resolve("maven-metadata-remote.xml.sha1");
+ FileUtils.writeStringToFile( expectedFile, FILE_ENCODING, REMOTE_METADATA_SHA1 + " /home/test/repository/examples/metadata/maven-metadata.xml");
Path testfile = getTestResource( "examples/metadata/maven-metadata-remote.xml" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
try
{
- String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.SHA1, "maven-metadata-remote.xml" );
+ String s = checksummedFile.parseChecksum( expectedFile, ChecksumAlgorithm.SHA1, "maven-metadata-remote.xml", FILE_ENCODING );
assertEquals( "Checksum doesn't match", REMOTE_METADATA_SHA1, s );
}
- catch ( IOException e )
+ catch ( ChecksumValidationException e )
{
e.printStackTrace();
fail( "IOException should not occur." );
@@ -288,16 +293,17 @@ public class ChecksummedFileTest
public void testRemoteMetadataChecksumFilePathMd5()
throws IOException
{
- String expected = REMOTE_METADATA_MD5 + " ./examples/metadata/maven-metadata.xml";
+ Path expectedFile = getTestOutputDir().resolve( "maven-metadata.xml.md5" );
+ FileUtils.writeStringToFile( expectedFile, FILE_ENCODING, REMOTE_METADATA_MD5 + " ./examples/metadata/maven-metadata.xml");
Path testfile = getTestResource( "examples/metadata/maven-metadata-remote.xml" );
ChecksummedFile checksummedFile = new ChecksummedFile( testfile );
try
{
- String s = checksummedFile.parseChecksum( expected, ChecksumAlgorithm.MD5, "maven-metadata-remote.xml" );
+ String s = checksummedFile.parseChecksum( expectedFile, ChecksumAlgorithm.MD5, "maven-metadata-remote.xml", FILE_ENCODING );
assertEquals( "Checksum doesn't match", REMOTE_METADATA_MD5, s );
}
- catch ( IOException e )
+ catch ( ChecksumValidationException e )
{
e.printStackTrace();
fail( "IOException should not occur." );
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
index 274fe803e..1de2ce6f0 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
@@ -42,6 +42,10 @@
org.apache.archiva
archiva-consumer-api
+
+ org.apache.archiva
+ archiva-checksum
+
org.apache.archiva
archiva-repository-admin-api
@@ -223,7 +227,6 @@
org.apache.commons.io;version="[1.4,2)",
org.apache.commons.lang*;version="[2.4,3)",
org.springframework*;version="[3,4)",
- org.codehaus.plexus.digest,
org.apache.archiva.redback.components.registry,
org.apache.archiva.metadata.model*;version=${project.version},
org.apache.archiva.metadata.repository.storage.maven2*;version=${project.version},
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/checksum/ChecksumValidator.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/checksum/ChecksumValidator.java
deleted file mode 100644
index f6005dd0b..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/checksum/ChecksumValidator.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.apache.archiva.checksum;
-
-/*
- * 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 javax.xml.bind.DatatypeConverter;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardOpenOption;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static org.apache.archiva.checksum.ChecksumValidationException.ValidationError.*;
-
-/**
- * Class for validating checksums.
- *
- * @author Martin Stockhammer
- */
-public class ChecksumValidator
-{
- private final int NOT_INITALIZED = 0;
- private final int INITIALIZING = 1;
- private final int INITIALIZED = 2;
- private AtomicInteger status = new AtomicInteger( NOT_INITALIZED );
- private static final Map supportedTypes = new HashMap<>( );
-
- public ChecksumValidator() {
- init();
- }
-
- private void init() {
- int val;
- if (status.compareAndSet( NOT_INITALIZED, INITIALIZING ))
- {
- try
- {
- supportedTypes.put( "md5", "MD5" );
- supportedTypes.put( "sha1", "SHA-1" );
- supportedTypes.put( "sha-1", "SHA-1" );
- supportedTypes.put( "sha2", "SHA-256" );
- supportedTypes.put( "sha256", "SHA-256" );
- supportedTypes.put( "sha-256", "SHA-256" );
- supportedTypes.put( "sha3", "SHA-384" );
- supportedTypes.put( "sha384", "SHA-384" );
- supportedTypes.put( "sha-384", "SHA-384" );
- supportedTypes.put( "sha5", "SHA-512" );
- supportedTypes.put( "sha512", "SHA-512" );
- supportedTypes.put( "sha-512", "SHA-512" );
- } finally
- {
- status.set(INITIALIZED);
- }
- } else if ((val = status.intValue())!=INITIALIZED) {
- do
- {
- try
- {
- Thread.currentThread().sleep(100);
- val = status.intValue();
- }
- catch ( InterruptedException e )
- {
- // Ignore
- }
- } while(val!=INITIALIZED);
- }
- }
-
- public boolean isValidChecksum(Path checksumFile) throws ChecksumValidationException
- {
- String fileName = checksumFile.getFileName().toString();
- if (!Files.exists( checksumFile )) {
- throw new ChecksumValidationException( FILE_NOT_FOUND, "Checksum file does not exist: "+checksumFile );
- }
- String extension = fileName.substring( fileName.lastIndexOf( '.' )+1).toLowerCase();
- String digestType = this.supportedTypes.get(extension);
- if (digestType==null) {
- throw new ChecksumValidationException( INVALID_FORMAT, "The extension '"+extension+"' ist not known." );
- }
- Path checkFile = null;
- try
- {
- MessageDigest md = MessageDigest.getInstance( digestType );
- checkFile = getCheckFile( checksumFile );
- byte[] computedChecksum = computeHash( checkFile, md );
- byte[] readChecksum = readHashFile( checksumFile );
- return md.isEqual( computedChecksum, readChecksum );
- }
- catch ( NoSuchAlgorithmException e )
- {
- throw new ChecksumValidationException( DIGEST_ERROR, "The digest is not supported "+digestType );
- }
- catch ( IOException e )
- {
- throw new ChecksumValidationException( READ_ERROR, "Error while computing the checksum of "+checkFile+": "+e.getMessage(), e);
- }
- }
-
- private Path getCheckFile(Path checksumFile) {
- String fileName = checksumFile.getFileName().toString();
- String newName = fileName.substring(0, fileName.lastIndexOf('.'));
- return checksumFile.getParent().resolve(newName);
- }
-
- public Set getSupportedExtensions() {
- return supportedTypes.keySet();
- }
-
- public byte[] computeHash(Path file, MessageDigest digest) throws IOException
- {
- byte[] result;
- try(FileChannel inChannel = FileChannel.open( file, StandardOpenOption.READ ))
- {
- MappedByteBuffer buffer = inChannel.map( FileChannel.MapMode.READ_ONLY, 0, inChannel.size( ) );
- digest.update( buffer );
- result = digest.digest( );
- }
- return result;
- }
-
- public byte[] computeHash(Path file, String type) throws ChecksumValidationException, NoSuchAlgorithmException, IOException
- {
- if (!supportedTypes.containsKey( type )) {
- throw new ChecksumValidationException( INVALID_FORMAT );
- }
- return computeHash( file, MessageDigest.getInstance( supportedTypes.get(type) ) );
- }
-
- public byte[] readHashFile(Path file) throws IOException
- {
- StringBuilder sb = new StringBuilder( );
- try(BufferedReader reader = Files.newBufferedReader( file, StandardCharsets.US_ASCII )){
- int ci;
- while((ci = reader.read()) != -1) {
- char c = (char)ci;
- if (Character.isWhitespace( c )) {
- break;
- } else {
- sb.append(c);
- }
- }
- return convertFromHex( sb.toString() );
- }
- }
-
- protected String convertToHex(byte[] array) {
- return DatatypeConverter.printHexBinary( array ).trim().toLowerCase();
- }
-
- protected byte[] convertFromHex(String checksum) {
- return DatatypeConverter.parseHexBinary( checksum.trim().toLowerCase() );
- }
-
-
-}
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
index 0cc3aa59a..ca45bb617 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
@@ -155,25 +155,16 @@ public class ArtifactMissingChecksumsConsumer
private void createFixChecksum( String path, ChecksumAlgorithm checksumAlgorithm )
{
Path artifactFile = repositoryDir.resolve(path);
- Path checksumFile = repositoryDir.resolve(path + "." + checksumAlgorithm.getExt( ) );
+ Path checksumFile = repositoryDir.resolve(path + "." + checksumAlgorithm.getExt( ).get(0) );
if ( Files.exists(checksumFile) )
{
checksum = new ChecksummedFile( artifactFile);
- try
+ if ( !checksum.isValidChecksum( checksumAlgorithm ) )
{
- if ( !checksum.isValidChecksum( checksumAlgorithm ) )
- {
- checksum.fixChecksums( new ChecksumAlgorithm[]{checksumAlgorithm} );
- log.info( "Fixed checksum file {}", checksumFile.toAbsolutePath( ) );
- triggerConsumerInfo( "Fixed checksum file " + checksumFile.toAbsolutePath( ) );
- }
- }
- catch ( IOException e )
- {
- log.error( "Cannot calculate checksum for file {} :", checksumFile, e );
- triggerConsumerError( TYPE_CHECKSUM_CANNOT_CALC, "Cannot calculate checksum for file " + checksumFile +
- ": " + e.getMessage( ) );
+ checksum.fixChecksums( new ChecksumAlgorithm[]{checksumAlgorithm} );
+ log.info( "Fixed checksum file {}", checksumFile.toAbsolutePath( ) );
+ triggerConsumerInfo( "Fixed checksum file " + checksumFile.toAbsolutePath( ) );
}
}
else if ( !Files.exists(checksumFile) )
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java
index 06930bd4e..e4648a8a7 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java
@@ -19,8 +19,10 @@ package org.apache.archiva.consumers.core;
* under the License.
*/
+import org.apache.archiva.checksum.ChecksumAlgorithm;
+import org.apache.archiva.checksum.ChecksumReference;
import org.apache.archiva.checksum.ChecksumValidationException;
-import org.apache.archiva.checksum.ChecksumValidator;
+import org.apache.archiva.checksum.ChecksummedFile;
import org.apache.archiva.consumers.AbstractMonitoredConsumer;
import org.apache.archiva.consumers.ConsumerException;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
@@ -63,8 +65,6 @@ public class ValidateChecksumConsumer
private String description = "Validate checksums against file.";
- ThreadLocal validatorThreadLocal = new ThreadLocal<>();
-
private Path repositoryDir;
private List includes;
@@ -123,16 +123,11 @@ public class ValidateChecksumConsumer
public void processFile( String path )
throws ConsumerException
{
- ChecksumValidator validator;
- if ((validator=validatorThreadLocal.get())==null) {
- validator = new ChecksumValidator();
- validatorThreadLocal.set(validator);
- }
Path checksumFile = this.repositoryDir.resolve( path );
try
{
-
- if ( !validator.isValidChecksum( checksumFile ) )
+ ChecksumReference cf = ChecksummedFile.getFromChecksumFile( checksumFile );
+ if ( !cf.getFile().isValidChecksum( cf.getAlgorithm(), true ) )
{
log.warn( "The checksum for {} is invalid.", checksumFile );
triggerConsumerWarning( NOT_VALID_CHECKSUM, "The checksum for " + checksumFile + " is invalid." );
@@ -164,12 +159,7 @@ public class ValidateChecksumConsumer
@PostConstruct
public void initialize( )
{
- ChecksumValidator validator;
- if ((validator=validatorThreadLocal.get())==null) {
- validator = new ChecksumValidator();
- validatorThreadLocal.set(validator);
- }
- Set extensions = validator.getSupportedExtensions();
+ Set extensions = ChecksumAlgorithm.getExtensions();
includes = new ArrayList<>( extensions.size() );
for ( String ext : extensions )
{
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/checksum/ChecksumValidatorTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/checksum/ChecksumValidatorTest.java
deleted file mode 100644
index 0b3118bf1..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/checksum/ChecksumValidatorTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.apache.archiva.checksum;
-
-/*
- * 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.junit.Test;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.*;
-
-/**
- * @author Martin Stockhammer
- */
-
-public class ChecksumValidatorTest
-{
-
- @Test
- public void isValidChecksum( ) throws URISyntaxException, ChecksumValidationException
- {
- ChecksumValidator validator = new ChecksumValidator();
- String fileName = "checksum/checksumTest1.txt";
- List exts = Arrays.asList( "md5", "sha1", "sha2", "sha3", "sha5" );
- for(String ext : exts)
- {
- Path hashFile = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( fileName + "."+ext ).toURI( ) );
- assertTrue( validator.isValidChecksum( hashFile ) );
- }
- fileName = "checksum/checksumTest2.txt";
- for(String ext : exts)
- {
- Path hashFile = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( fileName + "."+ext ).toURI( ) );
- assertTrue( validator.isValidChecksum( hashFile ) );
- }
- }
-
- @Test
- public void isInValidChecksum( ) throws URISyntaxException, ChecksumValidationException
- {
- ChecksumValidator validator = new ChecksumValidator();
- String fileName = "checksum/checksumTest3.txt";
- List exts = Arrays.asList( "md5", "sha1", "sha2", "sha3", "sha5" );
- for(String ext : exts)
- {
- Path hashFile = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( fileName + "."+ext ).toURI( ) );
- assertFalse( validator.isValidChecksum( hashFile ) );
- }
- }
-
- @Test
- public void isInvalidExtension( ) throws URISyntaxException, ChecksumValidationException
- {
- ChecksumValidator validator = new ChecksumValidator();
- String fileName = "checksum/checksumTest1.txt";
- String ext = "md8";
- try
- {
- Path hashFile = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( fileName + "." + ext ).toURI( ) );
- validator.isValidChecksum( hashFile );
- } catch (ChecksumValidationException e) {
- assertEquals(ChecksumValidationException.ValidationError.INVALID_FORMAT, e.getErrorType());
- }
- }
-
- @Test
- public void computeFileDoesNotExist( ) throws URISyntaxException, ChecksumValidationException
- {
- ChecksumValidator validator = new ChecksumValidator();
- String fileName = "checksum/checksumTest4.txt";
- String ext = "md5";
- try
- {
- Path hashFile = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( fileName + "." + ext ).toURI( ) );
- validator.isValidChecksum( hashFile );
- } catch (ChecksumValidationException e) {
- assertEquals(ChecksumValidationException.ValidationError.READ_ERROR, e.getErrorType());
- }
- }
-
- @Test
- public void checksumFileDoesNotExist( ) throws URISyntaxException, ChecksumValidationException
- {
- ChecksumValidator validator = new ChecksumValidator();
- String fileName = "checksumTest5.txt";
- String ext = "md5";
- try
- {
- Path sibling = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( "checksum/checksumTest1.txt." + ext ).toURI( ) );
- Path hashFile = sibling.getParent().resolve(fileName);
- validator.isValidChecksum( hashFile );
- } catch (ChecksumValidationException e) {
- assertEquals(ChecksumValidationException.ValidationError.FILE_NOT_FOUND, e.getErrorType());
- }
- }
-
- @Test
- public void computeHash( ) throws URISyntaxException, NoSuchAlgorithmException, IOException, ChecksumValidationException
- {
- ChecksumValidator validator = new ChecksumValidator();
- Map hashes = new HashMap<>( );
- hashes.put("md5","079fe13e970ae7311172df6657f36892");
- hashes.put("sha1", "01e14abba5401e1a63be468f9c3b723167f27dc8");
- hashes.put("sha2", "ae7278e7bdfd8d7c06f9b1932ddccdddb0061a58a893aec3f00932e53ef9c794");
- hashes.put("sha3", "a52efc629f256cd2b390f080ab7e23fc706ab9e2c8948cea2bd8504a70894f69f44f48e83c889edc82b40b673b575bad");
- hashes.put("sha5", "b2340bbf150403725fdf6a6f340a8a33bb9526bad7e0220f1dfea67d5a06217bc1d5c3a773b083ed8c9f5352c94ecc6da2a6d8a33ad0347566f0acc55e042fde");
- Path hashFile = Paths.get( Thread.currentThread( ).getContextClassLoader( ).getResource( "checksum/checksumTest1.txt").toURI( ) );
-
- for (String key : hashes.keySet()) {
- byte[] expectedSum = validator.convertFromHex( hashes.get(key) );
- byte[] computedSum = validator.computeHash( hashFile, key );
- assertArrayEquals( expectedSum, computedSum );
- }
- }
-
- @Test
- public void readHashFile( )
- {
- }
-}
\ No newline at end of file
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt
deleted file mode 100644
index 3105054b6..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
-dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-
-Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero
-eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-
-Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel
-eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto
-odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
-
-Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet,
-consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis
-nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
-
-Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.
-
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
-consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et
-gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md5 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md5
deleted file mode 100644
index 91bef91c3..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md5
+++ /dev/null
@@ -1 +0,0 @@
-079fe13e970ae7311172df6657f36892 checksumTest1.txt
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md8 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md8
deleted file mode 100644
index 91bef91c3..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.md8
+++ /dev/null
@@ -1 +0,0 @@
-079fe13e970ae7311172df6657f36892 checksumTest1.txt
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha1 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha1
deleted file mode 100644
index 939964c86..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha1
+++ /dev/null
@@ -1 +0,0 @@
-01e14abba5401e1a63be468f9c3b723167f27dc8 checksumTest1.txt
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha2 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha2
deleted file mode 100644
index 1f3819720..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha2
+++ /dev/null
@@ -1 +0,0 @@
-ae7278e7bdfd8d7c06f9b1932ddccdddb0061a58a893aec3f00932e53ef9c794 checksumTest1.txt
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha3 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha3
deleted file mode 100644
index 5ee678987..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha3
+++ /dev/null
@@ -1 +0,0 @@
-a52efc629f256cd2b390f080ab7e23fc706ab9e2c8948cea2bd8504a70894f69f44f48e83c889edc82b40b673b575bad checksumTest1.txt
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha5 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha5
deleted file mode 100644
index d0fe49dd9..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest1.txt.sha5
+++ /dev/null
@@ -1 +0,0 @@
-b2340bbf150403725fdf6a6f340a8a33bb9526bad7e0220f1dfea67d5a06217bc1d5c3a773b083ed8c9f5352c94ecc6da2a6d8a33ad0347566f0acc55e042fde checksumTest1.txt
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt
deleted file mode 100644
index 8d2edd594..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Check 2
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
-dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-
-Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero
-eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-
-Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel
-eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto
-odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
-
-Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet,
-consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis
-nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
-
-Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.
-
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
-consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et
-gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.md5 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.md5
deleted file mode 100644
index f19eeadc8..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.md5
+++ /dev/null
@@ -1 +0,0 @@
-f3b8a0ebd9ce6dd66c2830c46eeb62dc
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha1 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha1
deleted file mode 100644
index f1b53dd56..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b293f144df87783d66020a0f73654be459673054
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha2 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha2
deleted file mode 100644
index 17d0ce454..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha2
+++ /dev/null
@@ -1 +0,0 @@
-0DD0E1EFBF8F699A0EF286A271D8210CE2E80702AD5528F36592C89985D6B151
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha3 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha3
deleted file mode 100644
index 8868b4f11..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha3
+++ /dev/null
@@ -1 +0,0 @@
-5a5d1b11fdc498da5a592205714117656f40fea644adab07f110e1d512c79c6ded126972c1693483f21b592dd2030878
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha5 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha5
deleted file mode 100644
index 3e40dd9e8..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest2.txt.sha5
+++ /dev/null
@@ -1 +0,0 @@
-a379ef07490328fb934fcadfa1b7794e532782c2097d3aa82e41ff9bd86527830f711a0c456af65a14a511bad73ddc08a30593d74ec6d42bcc9ee0747acfdf91
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt
deleted file mode 100644
index 46199b870..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Check 3
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
-dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
-sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-
-Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero
-eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
-Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
-
-Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel
-eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto
-odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
-
-Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet,
-consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis
-nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
-
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet,
-consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et
-gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.md5 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.md5
deleted file mode 100644
index f19eeadc8..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.md5
+++ /dev/null
@@ -1 +0,0 @@
-f3b8a0ebd9ce6dd66c2830c46eeb62dc
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha1 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha1
deleted file mode 100644
index f1b53dd56..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha1
+++ /dev/null
@@ -1 +0,0 @@
-b293f144df87783d66020a0f73654be459673054
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha2 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha2
deleted file mode 100644
index aae7b60ba..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha2
+++ /dev/null
@@ -1 +0,0 @@
-0dd0e1efbf8f699a0ef286a271d8210ce2e80702ad5528f36592c89985d6b151
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha3 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha3
deleted file mode 100644
index 8868b4f11..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha3
+++ /dev/null
@@ -1 +0,0 @@
-5a5d1b11fdc498da5a592205714117656f40fea644adab07f110e1d512c79c6ded126972c1693483f21b592dd2030878
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha5 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha5
deleted file mode 100644
index 3e40dd9e8..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest3.txt.sha5
+++ /dev/null
@@ -1 +0,0 @@
-a379ef07490328fb934fcadfa1b7794e532782c2097d3aa82e41ff9bd86527830f711a0c456af65a14a511bad73ddc08a30593d74ec6d42bcc9ee0747acfdf91
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest4.txt.md5 b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest4.txt.md5
deleted file mode 100644
index f19eeadc8..000000000
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/checksum/checksumTest4.txt.md5
+++ /dev/null
@@ -1 +0,0 @@
-f3b8a0ebd9ce6dd66c2830c46eeb62dc
diff --git a/archiva-modules/archiva-base/archiva-policies/src/main/java/org/apache/archiva/policies/ChecksumPolicy.java b/archiva-modules/archiva-base/archiva-policies/src/main/java/org/apache/archiva/policies/ChecksumPolicy.java
index 975139c65..146ea8809 100644
--- a/archiva-modules/archiva-base/archiva-policies/src/main/java/org/apache/archiva/policies/ChecksumPolicy.java
+++ b/archiva-modules/archiva-base/archiva-policies/src/main/java/org/apache/archiva/policies/ChecksumPolicy.java
@@ -118,7 +118,7 @@ public class ChecksumPolicy
for ( ChecksumAlgorithm algorithm : algorithms )
{
- Path file = localFile.toAbsolutePath().resolveSibling( localFile.getFileName() + "." + algorithm.getExt() );
+ Path file = checksum.getChecksumFile( algorithm );
try
{
Files.deleteIfExists( file );
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
index c3f64b735..c961a8df4 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
@@ -38,7 +38,6 @@ import org.apache.archiva.repository.scanner.RepositoryScanner;
import org.apache.archiva.repository.scanner.RepositoryScannerException;
import org.apache.archiva.scheduler.repository.model.RepositoryTask;
import org.apache.commons.lang.StringUtils;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -83,7 +82,6 @@ public class ArchivaRepositoryScanningTaskExecutor
@PostConstruct
public void initialize()
- throws InitializationException
{
log.info( "Initialized {}", this.getClass().getName() );
}
--
2.39.5