From adf97fa49417b2d715d0c6fb15570e2e323e2d53 Mon Sep 17 00:00:00 2001 From: nvazquez Date: Fri, 19 Oct 2018 16:26:38 -0300 Subject: [PATCH] Unify templates/ISOs checksum API output --- .../api/query/dao/TemplateJoinDaoImpl.java | 5 +-- .../utils/security/DigestHelper.java | 15 +++++++++ .../utils/security/DigestHelperTest.java | 31 +++++++++++++++++-- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java index 4f1984257ed3..c0d57d7e4af9 100644 --- a/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java @@ -25,6 +25,7 @@ import javax.inject.Inject; +import org.apache.cloudstack.utils.security.DigestHelper; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -188,7 +189,7 @@ public TemplateResponse newTemplateResponse(ResponseView view, TemplateJoinVO te templateResponse.setPhysicalSize(templatePhysicalSize); } - templateResponse.setChecksum(template.getChecksum()); + templateResponse.setChecksum(DigestHelper.getHashValueFromChecksumValue(template.getChecksum())); if (template.getSourceTemplateId() != null) { templateResponse.setSourceTemplateId(template.getSourceTemplateUuid()); } @@ -320,7 +321,7 @@ public TemplateResponse newIsoResponse(TemplateJoinVO iso) { isoResponse.setFeatured(iso.isFeatured()); isoResponse.setCrossZones(iso.isCrossZones()); isoResponse.setPublic(iso.isPublicTemplate()); - isoResponse.setChecksum(iso.getChecksum()); + isoResponse.setChecksum(DigestHelper.getHashValueFromChecksumValue(iso.getChecksum())); isoResponse.setOsTypeId(iso.getGuestOSUuid()); isoResponse.setOsTypeName(iso.getGuestOSName()); diff --git a/utils/src/main/java/org/apache/cloudstack/utils/security/DigestHelper.java b/utils/src/main/java/org/apache/cloudstack/utils/security/DigestHelper.java index 40b0c1c8defc..f856b1f2892d 100644 --- a/utils/src/main/java/org/apache/cloudstack/utils/security/DigestHelper.java +++ b/utils/src/main/java/org/apache/cloudstack/utils/security/DigestHelper.java @@ -116,4 +116,19 @@ public static void validateChecksumString(String checksum) { } } } + + /** + * True if the algorithm is present on the checksum value. Format: {ALG}HASH + */ + protected static boolean isAlgorithmPresent(String checksum) { + return StringUtils.isNotBlank(checksum) && checksum.contains("{") && checksum.contains("}") && + checksum.indexOf("{") == 0 && checksum.indexOf("}") > checksum.indexOf("{"); + } + + /** + * Returns the checksum HASH from the checksum value which can have the following formats: {ALG}HASH or HASH + */ + public static String getHashValueFromChecksumValue(String checksum) { + return isAlgorithmPresent(checksum) ? new ChecksumValue(checksum).getChecksum() : checksum; + } } diff --git a/utils/src/test/java/org/apache/cloudstack/utils/security/DigestHelperTest.java b/utils/src/test/java/org/apache/cloudstack/utils/security/DigestHelperTest.java index 4a6e3f7960a7..eac234ef2fc6 100644 --- a/utils/src/test/java/org/apache/cloudstack/utils/security/DigestHelperTest.java +++ b/utils/src/test/java/org/apache/cloudstack/utils/security/DigestHelperTest.java @@ -26,6 +26,9 @@ import org.junit.BeforeClass; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + public class DigestHelperTest { private final static String INPUT_STRING = "01234567890123456789012345678901234567890123456789012345678901234567890123456789\n"; @@ -46,17 +49,17 @@ public class DigestHelperTest { @Test public void check_SHA256() throws Exception { - Assert.assertTrue(DigestHelper.check(SHA256_CHECKSUM, inputStream)); + assertTrue(DigestHelper.check(SHA256_CHECKSUM, inputStream)); } @Test public void check_SHA1() throws Exception { - Assert.assertTrue(DigestHelper.check(SHA1_CHECKSUM, inputStream)); + assertTrue(DigestHelper.check(SHA1_CHECKSUM, inputStream)); } @Test public void check_MD5() throws Exception { - Assert.assertTrue(DigestHelper.check(MD5_CHECKSUM, inputStream)); + assertTrue(DigestHelper.check(MD5_CHECKSUM, inputStream)); } @Test @@ -127,6 +130,28 @@ public void testChecksumSanityPrefixWrongChecksumLength() { String checksum = SHA256_CHECKSUM + "XXXXX"; DigestHelper.validateChecksumString(checksum); } + + @Test + public void testIsAlgorithmPresentPositiveCase() { + assertTrue(DigestHelper.isAlgorithmSupported(SHA256_CHECKSUM)); + } + + @Test + public void testIsAlgorithmPresentnegativeCase() { + assertTrue(DigestHelper.isAlgorithmSupported(SHA256_NO_PREFIX_CHECKSUM)); + } + + @Test + public void testGetHashValueFromChecksumValuePrefixPresent() { + String checksum = DigestHelper.getHashValueFromChecksumValue(SHA256_CHECKSUM); + assertEquals(SHA256_NO_PREFIX_CHECKSUM, checksum); + } + + @Test + public void testGetHashValueFromChecksumValueNoPrefixPresent() { + String checksum = DigestHelper.getHashValueFromChecksumValue(SHA256_NO_PREFIX_CHECKSUM); + assertEquals(SHA256_NO_PREFIX_CHECKSUM, checksum); + } } //Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme \ No newline at end of file