package de.mlessmann.certassist.models; import jakarta.persistence.*; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; import lombok.AccessLevel; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.Setter; @Entity @Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "fingerprint" }) }) @Data @RequiredArgsConstructor public class Certificate { @Id @GeneratedValue(strategy = GenerationType.UUID) @Setter(AccessLevel.NONE) private String id; @NotNull @Enumerated(EnumType.STRING) private CertificateType type; private String trustingAuthority; @Min(1) private int requestedKeyLength; @Min(1) private int requestedValidityDays; @NotNull private String subjectCommonName; private String subjectEmailAddress; private String subjectOrganization; private String subjectOrganizationalUnit; private String subjectCountry; private String subjectState; private String subjectLocality; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) private List certificateExtension = new ArrayList<>(); //@Lob - Cannot annotate column: https://github.com/xerial/sqlite-jdbc/issues/135 @Column(nullable = false) private byte[] cert = new byte[0]; //@Lob - Cannot annotate column: https://github.com/xerial/sqlite-jdbc/issues/135 @Column private byte[] privateKey = new byte[0]; //@Lob - Cannot annotate column: https://github.com/xerial/sqlite-jdbc/issues/135 @Column private byte[] fullchain; @Column(nullable = false) private String fingerprint; }