Skip to content

Commit 5cf163d

Browse files
nvazquezyadvr
authored andcommitted
server: Unify templates/ISOs checksum API output (#2911)
Unify checksum API output for templates and ISOs: not list the checksum algorithm on: KVM direct downloads On in progress normal template downloads. The algorithm is shown on the listtemplates API, but after it is downloaded it is not shown anymore.
1 parent 5ce14df commit 5cf163d

3 files changed

Lines changed: 46 additions & 5 deletions

File tree

server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import javax.inject.Inject;
2727

28+
import org.apache.cloudstack.utils.security.DigestHelper;
2829
import org.apache.log4j.Logger;
2930
import org.springframework.stereotype.Component;
3031

@@ -188,7 +189,7 @@ public TemplateResponse newTemplateResponse(ResponseView view, TemplateJoinVO te
188189
templateResponse.setPhysicalSize(templatePhysicalSize);
189190
}
190191

191-
templateResponse.setChecksum(template.getChecksum());
192+
templateResponse.setChecksum(DigestHelper.getHashValueFromChecksumValue(template.getChecksum()));
192193
if (template.getSourceTemplateId() != null) {
193194
templateResponse.setSourceTemplateId(template.getSourceTemplateUuid());
194195
}
@@ -320,7 +321,7 @@ public TemplateResponse newIsoResponse(TemplateJoinVO iso) {
320321
isoResponse.setFeatured(iso.isFeatured());
321322
isoResponse.setCrossZones(iso.isCrossZones());
322323
isoResponse.setPublic(iso.isPublicTemplate());
323-
isoResponse.setChecksum(iso.getChecksum());
324+
isoResponse.setChecksum(DigestHelper.getHashValueFromChecksumValue(iso.getChecksum()));
324325

325326
isoResponse.setOsTypeId(iso.getGuestOSUuid());
326327
isoResponse.setOsTypeName(iso.getGuestOSName());

utils/src/main/java/org/apache/cloudstack/utils/security/DigestHelper.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,19 @@ public static void validateChecksumString(String checksum) {
116116
}
117117
}
118118
}
119+
120+
/**
121+
* True if the algorithm is present on the checksum value. Format: {ALG}HASH
122+
*/
123+
protected static boolean isAlgorithmPresent(String checksum) {
124+
return StringUtils.isNotBlank(checksum) && checksum.contains("{") && checksum.contains("}") &&
125+
checksum.indexOf("{") == 0 && checksum.indexOf("}") > checksum.indexOf("{");
126+
}
127+
128+
/**
129+
* Returns the checksum HASH from the checksum value which can have the following formats: {ALG}HASH or HASH
130+
*/
131+
public static String getHashValueFromChecksumValue(String checksum) {
132+
return isAlgorithmPresent(checksum) ? new ChecksumValue(checksum).getChecksum() : checksum;
133+
}
119134
}

utils/src/test/java/org/apache/cloudstack/utils/security/DigestHelperTest.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
import org.junit.BeforeClass;
2727
import org.junit.Test;
2828

29+
import static org.junit.Assert.assertEquals;
30+
import static org.junit.Assert.assertTrue;
31+
2932
public class DigestHelperTest {
3033

3134
private final static String INPUT_STRING = "01234567890123456789012345678901234567890123456789012345678901234567890123456789\n";
@@ -46,17 +49,17 @@ public class DigestHelperTest {
4649

4750
@Test
4851
public void check_SHA256() throws Exception {
49-
Assert.assertTrue(DigestHelper.check(SHA256_CHECKSUM, inputStream));
52+
assertTrue(DigestHelper.check(SHA256_CHECKSUM, inputStream));
5053
}
5154

5255
@Test
5356
public void check_SHA1() throws Exception {
54-
Assert.assertTrue(DigestHelper.check(SHA1_CHECKSUM, inputStream));
57+
assertTrue(DigestHelper.check(SHA1_CHECKSUM, inputStream));
5558
}
5659

5760
@Test
5861
public void check_MD5() throws Exception {
59-
Assert.assertTrue(DigestHelper.check(MD5_CHECKSUM, inputStream));
62+
assertTrue(DigestHelper.check(MD5_CHECKSUM, inputStream));
6063
}
6164

6265
@Test
@@ -127,6 +130,28 @@ public void testChecksumSanityPrefixWrongChecksumLength() {
127130
String checksum = SHA256_CHECKSUM + "XXXXX";
128131
DigestHelper.validateChecksumString(checksum);
129132
}
133+
134+
@Test
135+
public void testIsAlgorithmPresentPositiveCase() {
136+
assertTrue(DigestHelper.isAlgorithmSupported(SHA256_CHECKSUM));
137+
}
138+
139+
@Test
140+
public void testIsAlgorithmPresentnegativeCase() {
141+
assertTrue(DigestHelper.isAlgorithmSupported(SHA256_NO_PREFIX_CHECKSUM));
142+
}
143+
144+
@Test
145+
public void testGetHashValueFromChecksumValuePrefixPresent() {
146+
String checksum = DigestHelper.getHashValueFromChecksumValue(SHA256_CHECKSUM);
147+
assertEquals(SHA256_NO_PREFIX_CHECKSUM, checksum);
148+
}
149+
150+
@Test
151+
public void testGetHashValueFromChecksumValueNoPrefixPresent() {
152+
String checksum = DigestHelper.getHashValueFromChecksumValue(SHA256_NO_PREFIX_CHECKSUM);
153+
assertEquals(SHA256_NO_PREFIX_CHECKSUM, checksum);
154+
}
130155
}
131156

132157
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme

0 commit comments

Comments
 (0)