🚧 Delete token feature

This commit is contained in:
Andreas Dinauer 2026-04-12 16:34:37 +02:00
parent 38fcb3e84c
commit 9e28c1c7f3
14 changed files with 55 additions and 25 deletions

View File

@ -1,11 +1,14 @@
package dev.dinauer.maven.app; package dev.dinauer.maven.app;
import dev.dinauer.maven.jpa.maven.repo.VersionRepo;
import dev.dinauer.maven.user.User; import dev.dinauer.maven.user.User;
import dev.dinauer.maven.jpa.maven.Version; import dev.dinauer.maven.jpa.maven.Version;
import dev.dinauer.maven.jpa.maven.repo.ArtifactRepo; import dev.dinauer.maven.jpa.maven.repo.ArtifactRepo;
import dev.dinauer.maven.jpa.maven.ArtifactId; import dev.dinauer.maven.jpa.maven.ArtifactId;
import dev.dinauer.maven.user.UserClient; import dev.dinauer.maven.user.UserClient;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.DELETE;
import jakarta.ws.rs.GET; import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path; import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam; import jakarta.ws.rs.PathParam;
@ -24,6 +27,9 @@ public class ArtifactResource
@RestClient @RestClient
UserClient userClient; UserClient userClient;
@Inject
VersionRepo versionRepo;
@GET @GET
public List<ArtifactId> get() public List<ArtifactId> get()
{ {
@ -37,6 +43,14 @@ public class ArtifactResource
return artifactRepo.findById(id); return artifactRepo.findById(id);
} }
@DELETE
@Path("/{id}")
@Transactional
public void deleteById(@PathParam("id") String id)
{
artifactRepo.deleteById(id);
}
private List<ArtifactId> find() private List<ArtifactId> find()
{ {
List<ArtifactId> artifactIds = artifactRepo.listAll(); List<ArtifactId> artifactIds = artifactRepo.listAll();

View File

@ -1,4 +1,4 @@
package dev.dinauer.maven.jpa.events; package dev.dinauer.maven.event;
import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.annotation.JsonManagedReference;
import dev.dinauer.maven.user.User; import dev.dinauer.maven.user.User;

View File

@ -1,4 +1,4 @@
package dev.dinauer.maven.jpa.events; package dev.dinauer.maven.event;
public enum EventType public enum EventType
{ {

View File

@ -1,11 +1,9 @@
package dev.dinauer.maven.app; package dev.dinauer.maven.event;
import dev.dinauer.maven.user.User; import dev.dinauer.maven.user.User;
import dev.dinauer.maven.jpa.events.Event; import dev.dinauer.maven.event.repo.EventRepo;
import dev.dinauer.maven.jpa.events.repo.EventRepo;
import dev.dinauer.maven.user.UserClient; import dev.dinauer.maven.user.UserClient;
import io.quarkus.panache.common.Sort; import io.quarkus.panache.common.Sort;
import io.quarkus.security.Authenticated;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.ws.rs.GET; import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path; import jakarta.ws.rs.Path;

View File

@ -1,4 +1,4 @@
package dev.dinauer.maven.jpa.events; package dev.dinauer.maven.event;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*; import jakarta.persistence.*;

View File

@ -1,6 +1,6 @@
package dev.dinauer.maven.jpa.events.repo; package dev.dinauer.maven.event.repo;
import dev.dinauer.maven.jpa.events.Event; import dev.dinauer.maven.event.Event;
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase; import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;

View File

@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*; import jakarta.persistence.*;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.ArrayList; import java.util.ArrayList;
@ -25,12 +27,12 @@ public class ArtifactId
@Column(name = "artifact_id") @Column(name = "artifact_id")
private String artifactId; private String artifactId;
@ManyToOne(cascade = CascadeType.ALL) @ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "group_id") @JoinColumn(name = "group_id")
@JsonBackReference @JsonBackReference
private GroupId group; private GroupId group;
@OneToMany(mappedBy = "artifact") @OneToMany(mappedBy = "artifact", cascade = CascadeType.REMOVE)
@JsonManagedReference @JsonManagedReference
private List<Version> versions = new ArrayList<>(); private List<Version> versions = new ArrayList<>();

View File

@ -18,7 +18,7 @@ public class GroupId
@Column(name = "group_id") @Column(name = "group_id")
private String groupId; private String groupId;
@OneToMany(mappedBy = "group") @OneToMany(mappedBy = "group", cascade = CascadeType.REMOVE)
@JsonManagedReference @JsonManagedReference
private List<ArtifactId> artifacts = new ArrayList<>(); private List<ArtifactId> artifacts = new ArrayList<>();

View File

@ -26,7 +26,7 @@ public class Version
private String version; private String version;
@ManyToOne(cascade = CascadeType.ALL) @ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "artifact_id") @JoinColumn(name = "artifact_id")
@JsonBackReference @JsonBackReference
private ArtifactId artifact; private ArtifactId artifact;

View File

@ -1,9 +1,9 @@
package dev.dinauer.maven.maven.core; package dev.dinauer.maven.maven.core;
import dev.dinauer.maven.jpa.events.Event; import dev.dinauer.maven.event.Event;
import dev.dinauer.maven.jpa.events.EventType; import dev.dinauer.maven.event.EventType;
import dev.dinauer.maven.jpa.events.Resource; import dev.dinauer.maven.event.Resource;
import dev.dinauer.maven.jpa.events.repo.EventRepo; import dev.dinauer.maven.event.repo.EventRepo;
import dev.dinauer.maven.jpa.maven.ArtifactId; import dev.dinauer.maven.jpa.maven.ArtifactId;
import dev.dinauer.maven.jpa.maven.Version; import dev.dinauer.maven.jpa.maven.Version;
import dev.dinauer.maven.jpa.maven.repo.VersionRepo; import dev.dinauer.maven.jpa.maven.repo.VersionRepo;

View File

@ -5,9 +5,7 @@ import dev.dinauer.maven.maven.token.dto.TokenCreation;
import dev.dinauer.maven.maven.token.dto.TokenSecret; import dev.dinauer.maven.maven.token.dto.TokenSecret;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import jakarta.ws.rs.GET; import jakarta.ws.rs.*;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.SecurityContext; import jakarta.ws.rs.core.SecurityContext;
import java.util.List; import java.util.List;
@ -27,13 +25,19 @@ public class TokenResource
@GET @GET
public List<Token> get() public List<Token> get()
{ {
return tokenRepo.findByUserId(securityContext.getUserPrincipal().getName()).stream().map(item -> new Token(item.getName(), item.getExpiresAt(), item.getCreatedAt())).toList(); return tokenRepo.findByUserId(securityContext.getUserPrincipal().getName()).stream().map(item -> new Token(item.getId(), item.getName(), item.getExpiresAt(), item.getCreatedAt())).toList();
} }
@POST @POST
@Transactional
public TokenSecret create(TokenCreation tokenCreation) public TokenSecret create(TokenCreation tokenCreation)
{ {
return tokenService.create(tokenCreation); return tokenService.create(tokenCreation);
} }
@DELETE
@Path("/{id}")
public void delete(@PathParam("id") String id)
{
tokenService.delete(id);
}
} }

View File

@ -8,6 +8,7 @@ import io.vertx.core.http.HttpHeaders;
import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import io.vertx.core.http.HttpServerRequest; import io.vertx.core.http.HttpServerRequest;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.BadRequestException; import jakarta.ws.rs.BadRequestException;
import jakarta.ws.rs.core.SecurityContext; import jakarta.ws.rs.core.SecurityContext;
import org.eclipse.microprofile.config.inject.ConfigProperty; import org.eclipse.microprofile.config.inject.ConfigProperty;
@ -29,6 +30,7 @@ public class TokenService
@Inject @Inject
SecurityContext securityContext; SecurityContext securityContext;
@Transactional
public TokenSecret create(TokenCreation tokenCreation) public TokenSecret create(TokenCreation tokenCreation)
{ {
String secret = UUID.randomUUID().toString(); String secret = UUID.randomUUID().toString();
@ -39,7 +41,17 @@ public class TokenService
.setExpiresAt(tokenCreation.expiresAt()) .setExpiresAt(tokenCreation.expiresAt())
.setCreatedAt(ZonedDateTime.now()); .setCreatedAt(ZonedDateTime.now());
tokenRepo.persist(entity); tokenRepo.persist(entity);
return new TokenSecret(tokenCreation.name(), tokenCreation.expiresAt(), secret, entity.getCreatedAt()); return new TokenSecret(entity.getId(), tokenCreation.name(), tokenCreation.expiresAt(), secret, entity.getCreatedAt());
}
@Transactional
public void delete(String id)
{
TokenEntity token = tokenRepo.findById(id);
if (securityContext.getUserPrincipal().getName().equals(token.getUserId()))
{
tokenRepo.delete(token);
}
} }
public String require() public String require()

View File

@ -3,6 +3,6 @@ package dev.dinauer.maven.maven.token.dto;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
public record Token(String name, LocalDate expiresAt, ZonedDateTime createdAt) public record Token(String id, String name, LocalDate expiresAt, ZonedDateTime createdAt)
{ {
} }

View File

@ -3,6 +3,6 @@ package dev.dinauer.maven.maven.token.dto;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
public record TokenSecret(String name, LocalDate expiresAt, String token, ZonedDateTime createdAt) public record TokenSecret(String id, String name, LocalDate expiresAt, String token, ZonedDateTime createdAt)
{ {
} }