Hashes for metadata

This commit is contained in:
Andreas Dinauer 2026-04-25 22:21:47 +02:00
parent b25c5500b9
commit 591b0e0b18
9 changed files with 67 additions and 12 deletions

View File

@ -55,10 +55,26 @@ public class Dev
tokenRepo.persist(entity);
QuarkusTransaction.commit();
uploadRelease_01();
uploadRelease_02();
uploadSnapshot_01();
uploadSnapshot_02();
}
private void uploadRelease_01() throws IOException
{
mavenService.upload("/org/postgresql/postgresql/42.7.8/postgresql-42.7.8.pom", readFile("/jar/postgresql-42.7.9.pom"));
mavenService.upload("/org/postgresql/postgresql/42.7.8/postgresql-42.7.8.jar", readFile("/jar/postgresql-42.7.9.jar"));
mavenService.upload("/org/postgresql/postgresql/42.7.8/postgresql-42.7.8-tests.jar", readFile("/jar/postgresql-42.7.9.jar"));
mavenService.upload("/org/postgresql/postgresql/42.7.8/postgresql-42.7.8-javadocs.jar", readFile("/jar/postgresql-42.7.9.jar"));
}
private void uploadRelease_02() throws IOException
{
mavenService.upload("/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.jar", readFile("/jar/postgresql-42.7.9.jar"));
mavenService.upload("/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.pom", readFile("/jar/postgresql-42.7.9.pom"));
}
private void uploadSnapshot_01() throws IOException
{
mavenService.upload("/org/postgresql/postgresql/42.7.9-SNAPSHOT/postgresql-42.7.9-20250419.123456-1.jar", readFile("/jar/postgresql-42.7.9.jar"));

View File

@ -1,5 +1,9 @@
package dev.dinauer.maven.app;
import dev.dinauer.maven.event.Event;
import dev.dinauer.maven.event.EventType;
import dev.dinauer.maven.event.Resource;
import dev.dinauer.maven.event.repo.EventRepo;
import dev.dinauer.maven.maven.core.GroupRepo;
import dev.dinauer.maven.maven.core.GroupId;
import jakarta.inject.Inject;
@ -9,6 +13,7 @@ import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import java.time.ZonedDateTime;
import java.util.List;
@Path("/groups")
@ -16,6 +21,8 @@ public class GroupResource
{
@Inject
GroupRepo groupRepo;
@Inject
EventRepo eventRepo;
@GET
public List<GroupId> get()
@ -35,6 +42,11 @@ public class GroupResource
@Transactional
public void delete(@PathParam("id") String id)
{
groupRepo.deleteById(id);
GroupId groupId = groupRepo.findById(id);
if (groupId != null)
{
groupRepo.delete(groupId);
eventRepo.persist(new Event().setType(EventType.DELETE).setTimestamp(ZonedDateTime.now()).setResource(new Resource().setGroupId(groupId.getGroupId())));
}
}
}

View File

@ -92,7 +92,7 @@ public class ArtifactId
public List<Version> getVersions()
{
return Stream.concat(snapshotVersions.stream(), releaseVersions.stream()).toList();
return Stream.concat(snapshotVersions.stream(), releaseVersions.stream()).sorted(Comparator.comparing(item -> new DefaultArtifactVersion(item.getVersion()))).toList().reversed();
}
public ArtifactId setVersions(List<ReleaseVersion> releaseVersions)

View File

@ -84,7 +84,14 @@ public class MavenService
}
if (Objects.equals(FileExt.XML, context.extensions().ext()))
{
return Response.status(200).type(MediaType.APPLICATION_XML).entity(snapshotMetadataService.generate(versionContext)).build();
if (context.extensions().hashExt().isEmpty())
{
return Response.status(200).type(MediaType.APPLICATION_XML).entity(snapshotMetadataService.generate(versionContext)).build();
}
else
{
return Response.status(200).type(MediaType.TEXT_PLAIN).entity(snapshotMetadataService.generateHash(versionContext)).build();
}
}
}
if (context.getClass() == ArtifactContext.class)

View File

@ -26,11 +26,11 @@ public class SnapshotBundle
@JsonBackReference
private SnapshotVersion snapshotVersion;
@OneToMany(mappedBy = "snapshotBundle")
@OneToMany(mappedBy = "snapshotBundle", cascade = CascadeType.REMOVE)
@JsonManagedReference
private List<SnapshotJar> jars;
@OneToOne(mappedBy = "snapshotBundle")
@OneToOne(mappedBy = "snapshotBundle", cascade = CascadeType.REMOVE)
@JsonManagedReference
private SnapshotPom pom;

View File

@ -1,6 +1,7 @@
package dev.dinauer.maven.maven.core.snapshot;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
@Entity
@ -16,6 +17,8 @@ public class SnapshotJar
private String sha1;
@Column(columnDefinition = "bytea")
@JsonIgnore
@Basic(fetch = FetchType.LAZY)
private byte[] jar;
private String classifier;

View File

@ -23,7 +23,7 @@ public class SnapshotVersion implements Version
@JsonBackReference
private ArtifactId artifact;
@OneToMany(mappedBy = "snapshotVersion")
@OneToMany(mappedBy = "snapshotVersion", cascade = CascadeType.REMOVE)
@JsonManagedReference
private List<SnapshotBundle> snapshotBundles;

View File

@ -14,6 +14,7 @@ import dev.dinauer.maven.metadata.Metadata;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.InternalServerErrorException;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.Strings;
import java.util.List;
@ -39,6 +40,22 @@ public class SnapshotMetadataService
}
}
public String generateHash(VersionContext versionContext)
{
switch (versionContext.extensions().hashExt().orElseThrow())
{
case MD5 ->
{
return DigestUtils.md5Hex(generate(versionContext));
}
case SHA256 ->
{
return DigestUtils.sha256Hex(generate(versionContext));
}
}
throw new IllegalArgumentException();
}
private SnapshotMetadata generateMetadata(VersionContext versionContext)
{
SnapshotBundle latest = snapshotBundleRepo.latest(versionContext);

View File

@ -1,4 +1,5 @@
# HTTP
quarkus.http.host=0.0.0.0
%dev.quarkus.http.cors.enabled=true
%dev.quarkus.http.port=8081
%dev.quarkus.http.cors.origins=/.*/
@ -24,11 +25,10 @@ quarkus.datasource.db-kind=postgresql
quarkus.flyway.migrate-at-start=true
# OIDC Server
quarkus.oidc.auth-server-url=http://localhost:8089/api/realms/maven
quarkus.oidc.client-id=backend
quarkus.oidc-client.auth-server-url=http://localhost:8089/api/realms/maven
quarkus.oidc-client.client-id=backend
quarkus.oidc-client.credentials.secret=backend
quarkus.oidc.auth-server-url=https://auth.dinauer.dev/api/realms/dev
quarkus.oidc.client-id=dev
quarkus.oidc-client.auth-server-url=https://auth.dinauer.dev/api/realms/dev
quarkus.oidc-client.client-id=dev
# OIDC REST
quarkus.rest-client.idp.url=http://localhost:8089/api/realms/maven
quarkus.rest-client.idp.url=https://auth.dinauer.dev/api/realms/dev