Add hashes

This commit is contained in:
Andreas Dinauer 2026-04-25 13:17:10 +02:00
parent 818011fc28
commit 40919f532f
4 changed files with 66 additions and 10 deletions

View File

@ -23,6 +23,8 @@ import jakarta.ws.rs.BadRequestException;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response;
import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.NotImplementedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -30,6 +32,8 @@ import java.util.Objects;
@ApplicationScoped @ApplicationScoped
public class MavenService public class MavenService
{ {
private static final Logger LOG = LoggerFactory.getLogger(MavenService.class);
@Inject @Inject
ReleaseService releaseService; ReleaseService releaseService;
@ -55,12 +59,12 @@ public class MavenService
} }
if (Objects.equals(FileExt.XML, context.extensions().ext())) if (Objects.equals(FileExt.XML, context.extensions().ext()))
{ {
throw new NotImplementedException(); // Hand over to XML metadata service LOG.debug("Ignoring metadata upload for {}. Metadata files are generated by the registry.", path);
} }
} }
if (context.getClass() == ArtifactContext.class) if (context.getClass() == ArtifactContext.class)
{ {
throw new NotImplementedException(); // Hand over to XML Snapshot artifact metadata service LOG.debug("Ignoring metadata upload for {}. Metadata files are generated by the registry.", path);
} }
} }
@ -70,15 +74,26 @@ public class MavenService
if (context.getClass() == VersionContext.class) if (context.getClass() == VersionContext.class)
{ {
VersionContext versionContext = (VersionContext) context; VersionContext versionContext = (VersionContext) context;
if (versionContext.isSnapshot()) if (List.of(FileExt.JAR, FileExt.POM).contains(context.extensions().ext()))
{ {
return snapshotService.serve(toSnapshotContext(versionContext)); if (versionContext.isSnapshot())
{
return snapshotService.serve(toSnapshotContext(versionContext));
}
else
{
return releaseService.serve(toReleaseContext(versionContext));
}
} }
else if (Objects.equals(FileExt.XML, context.extensions().ext()))
{ {
return releaseService.serve(toReleaseContext(versionContext)); return Response.status(204).build();
} }
} }
if (context.getClass() == ArtifactContext.class)
{
return Response.status(204).build();
}
throw new BadRequestException(); throw new BadRequestException();
} }

View File

@ -47,11 +47,25 @@ public class ReleaseService
{ {
case JAR -> case JAR ->
{ {
return Response.status(200).type(MediaType.APPLICATION_OCTET_STREAM).entity(releaseJarService.find(releaseContext)).build(); if (releaseContext.extensions().hashExt().isEmpty())
{
return Response.status(200).type(MediaType.APPLICATION_OCTET_STREAM).entity(releaseJarService.find(releaseContext)).build();
}
else
{
return Response.status(200).type(MediaType.TEXT_PLAIN).entity(releaseJarService.findHash(releaseContext)).build();
}
} }
case POM -> case POM ->
{ {
return Response.status(200).type(MediaType.APPLICATION_XML).entity(releasePomService.find(releaseContext)).build(); if (releaseContext.extensions().hashExt().isEmpty())
{
return Response.status(200).type(MediaType.APPLICATION_XML).entity(releasePomService.find(releaseContext)).build();
}
else
{
return Response.status(200).type(MediaType.TEXT_PLAIN).entity(releasePomService.findHash(releaseContext)).build();
}
} }
} }
throw new BadRequestException(); throw new BadRequestException();

View File

@ -40,11 +40,25 @@ public class SnapshotService
{ {
case JAR -> case JAR ->
{ {
return Response.status(200).type(MediaType.APPLICATION_OCTET_STREAM).entity(snapshotJarService.find(snapshotContext)).build(); if (snapshotContext.extensions().hashExt().isEmpty())
{
return Response.status(200).type(MediaType.APPLICATION_OCTET_STREAM).entity(snapshotJarService.find(snapshotContext)).build();
}
else
{
return Response.status(200).type(MediaType.TEXT_PLAIN).entity(snapshotJarService.findHash(snapshotContext)).build();
}
} }
case POM -> case POM ->
{ {
return Response.status(200).type(MediaType.APPLICATION_XML).entity(snapshotPomService.find(snapshotContext)).build(); if (snapshotContext.extensions().hashExt().isEmpty())
{
return Response.status(200).type(MediaType.APPLICATION_XML).entity(snapshotPomService.find(snapshotContext)).build();
}
else
{
return Response.status(200).type(MediaType.TEXT_PLAIN).entity(snapshotPomService.findHash(snapshotContext)).build();
}
} }
} }
throw new BadRequestException(); throw new BadRequestException();

View File

@ -8,6 +8,7 @@ import org.flywaydb.core.Flyway;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.platform.commons.util.StringUtils;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -39,6 +40,12 @@ public class ResourceTest
String pom = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9-SNAPSHOT/postgresql-42.7.9-20250419.123456-1.pom").body().asString(); String pom = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9-SNAPSHOT/postgresql-42.7.9-20250419.123456-1.pom").body().asString();
byte[] jar = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9-SNAPSHOT/postgresql-42.7.9-20250419.123456-1.jar").body().asByteArray(); byte[] jar = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9-SNAPSHOT/postgresql-42.7.9-20250419.123456-1.jar").body().asByteArray();
String jarMd5 = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9-SNAPSHOT/postgresql-42.7.9-20250419.123456-1.jar.md5").body().asString();
String pomMd5 = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9-SNAPSHOT/postgresql-42.7.9-20250419.123456-1.pom.md5").body().asString();
Assertions.assertFalse(StringUtils.isBlank(jarMd5));
Assertions.assertFalse(StringUtils.isBlank(pomMd5));
Assertions.assertArrayEquals(uploadJar, jar); Assertions.assertArrayEquals(uploadJar, jar);
Assertions.assertEquals(uploadPom, pom); Assertions.assertEquals(uploadPom, pom);
} }
@ -56,6 +63,12 @@ public class ResourceTest
String pom = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.pom").body().asString(); String pom = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.pom").body().asString();
byte[] jar = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.jar").body().asByteArray(); byte[] jar = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.jar").body().asByteArray();
String jarMd5 = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.jar.md5").body().asString();
String pomMd5 = RestAssured.given().get("/maven2/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.pom.md5").body().asString();
Assertions.assertFalse(StringUtils.isBlank(jarMd5));
Assertions.assertFalse(StringUtils.isBlank(pomMd5));
Assertions.assertArrayEquals(uploadJar, jar); Assertions.assertArrayEquals(uploadJar, jar);
Assertions.assertEquals(uploadPom, pom); Assertions.assertEquals(uploadPom, pom);
} }