Skip to content

Commit f2a31ea

Browse files
authored
Merge pull request #1278 from johnoliver/fix-etag
take into account the url when calculating etag
2 parents fe30efc + 55a673f commit f2a31ea

File tree

4 files changed

+20
-5
lines changed

4 files changed

+20
-5
lines changed

adoptium-frontend-parent/adoptium-api-v3-frontend/src/main/kotlin/net/adoptium/api/v3/CacheControlService.kt

+14-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import net.adoptium.api.v3.dataSources.APIDataStore
1111
import org.jboss.resteasy.reactive.common.headers.CacheControlDelegate
1212
import org.jboss.resteasy.reactive.common.util.ExtendedCacheControl
1313
import org.jboss.resteasy.reactive.server.ServerResponseFilter
14+
import java.math.BigInteger
15+
import java.security.MessageDigest
16+
import java.util.*
1417

1518

1619
@Provider
@@ -28,9 +31,19 @@ class CacheControlService @Inject constructor(private var apiDataStore: APIDataS
2831
return CACHE_CONTROLLED_PATHS.any { path.startsWith(it) }
2932
}
3033

34+
private fun calculateEtag(requestContext: ContainerRequestContext): String {
35+
val md = MessageDigest.getInstance("SHA1")
36+
if (apiDataStore.getUpdateInfo().hexChecksum != null) {
37+
md.update(HexFormat.of().parseHex(apiDataStore.getUpdateInfo().hexChecksum))
38+
}
39+
md.update(requestContext.uriInfo.requestUri.toString().toByteArray())
40+
return BigInteger(1, md.digest()).toString(16)
41+
}
42+
3143
override fun filter(requestContext: ContainerRequestContext?) {
3244
if (isCacheControlledPath(requestContext)) {
33-
val etag = apiDataStore.getUpdateInfo().hexChecksum
45+
val etag = calculateEtag(requestContext!!)
46+
3447
val lastModified = apiDataStore.getUpdateInfo().lastModified
3548

3649
if (lastModified == null || etag == null) {

adoptium-frontend-parent/adoptium-api-v3-frontend/src/test/kotlin/net/adoptium/api/AssetsResourceFeatureReleasePathTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ class AssetsResourceFeatureReleasePathTest : AssetsPathTest() {
258258
fun `if none match applied`() {
259259
RestAssured.given()
260260
.`when`()
261-
.header("If-None-Match", "d76df8e7aefcf7")
261+
.header("If-None-Match", "808bc9e876e1dd5e15b8eb3377618e1c1b313a1e")
262262
.get("/v3/assets/feature_releases/8/ga")
263263
.then()
264264
.statusCode(304)
@@ -268,7 +268,7 @@ class AssetsResourceFeatureReleasePathTest : AssetsPathTest() {
268268
fun `etag applied match applied`() {
269269
RestAssured.given()
270270
.`when`()
271-
.header("If-Match", "d76df8e7aefcf7")
271+
.header("If-Match", "808bc9e876e1dd5e15b8eb3377618e1c1b313a1e")
272272
.get("/v3/assets/feature_releases/8/ga")
273273
.then()
274274
.statusCode(200)

adoptium-updater-parent/adoptium-api-v3-updater/src/main/kotlin/net/adoptium/api/v3/V3Updater.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class V3Updater @Inject constructor(
5555
private val LOGGER = LoggerFactory.getLogger(this::class.java)
5656

5757
fun calculateChecksum(repo: AdoptRepos): String {
58-
val md = MessageDigest.getInstance("MD5")
58+
val md = MessageDigest.getInstance("SHA256")
5959
val outputStream = object : OutputStream() {
6060
override fun write(b: Int) {
6161
md.update(b.toByte())
@@ -269,6 +269,8 @@ class V3Updater @Inject constructor(
269269
LOGGER.info("Updating Release Notes")
270270
adoptReleaseNotes.updateReleaseNotes(repo)
271271

272+
printRepoDebugInfo(currentRepo, repo, repo)
273+
272274
LOGGER.info("Full update done")
273275
return@runBlocking repo
274276
}

adoptium-updater-parent/adoptium-api-v3-updater/src/test/kotlin/net/adoptium/api/V3UpdaterTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class V3UpdaterTest {
2525
fun `checksum works`() {
2626
runBlocking {
2727
val checksum = V3Updater.calculateChecksum(BaseTest.adoptRepos)
28-
assertTrue(checksum.length == 24)
28+
assertTrue(checksum.length == 44)
2929
}
3030
}
3131

0 commit comments

Comments
 (0)