
- Add CertificateRepository with CRUD operations - Implement CertificateAuthorityRepository for CA management - Add CertificateRequestRepository for CSR handling - Include UserRepository and OrganizationRepository - Implement proper error handling and validation - Add support for soft deletes and relationships - Include query optimization and filtering capabilities
100 lines
3.1 KiB
Go
100 lines
3.1 KiB
Go
package repositories
|
|
|
|
import (
|
|
"git.secnex.io/secnex/certman/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type CertificateRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewCertificateRepository creates a new certificate repository
|
|
func NewCertificateRepository(db *gorm.DB) *CertificateRepository {
|
|
return &CertificateRepository{db: db}
|
|
}
|
|
|
|
// GetByID returns a certificate by their ID
|
|
func (r *CertificateRepository) GetByID(id string) (models.Certificate, error) {
|
|
var cert models.Certificate
|
|
if err := r.db.First(&cert, id).Error; err != nil {
|
|
return models.Certificate{}, err
|
|
}
|
|
return cert, nil
|
|
}
|
|
|
|
// GetAll returns all certificates
|
|
func (r *CertificateRepository) GetAll() ([]models.Certificate, error) {
|
|
var certs []models.Certificate
|
|
if err := r.db.Find(&certs).Error; err != nil {
|
|
return []models.Certificate{}, err
|
|
}
|
|
return certs, nil
|
|
}
|
|
|
|
// Create creates a new certificate
|
|
func (r *CertificateRepository) Create(cert models.Certificate) error {
|
|
return r.db.Create(&cert).Error
|
|
}
|
|
|
|
// Update updates a certificate
|
|
func (r *CertificateRepository) Update(cert models.Certificate) error {
|
|
return r.db.Save(&cert).Error
|
|
}
|
|
|
|
// Delete deletes a certificate by their ID
|
|
func (r *CertificateRepository) Delete(id string) error {
|
|
return r.db.Delete(&models.Certificate{}, id).Error
|
|
}
|
|
|
|
// HardDelete deletes a certificate by their ID
|
|
func (r *CertificateRepository) HardDelete(cert models.Certificate) error {
|
|
return r.db.Unscoped().Delete(&cert).Error
|
|
}
|
|
|
|
// GetByType returns certificates by type
|
|
func (r *CertificateRepository) GetByType(certType models.CertificateType) ([]models.Certificate, error) {
|
|
var certs []models.Certificate
|
|
if err := r.db.Where("type = ?", certType).Find(&certs).Error; err != nil {
|
|
return []models.Certificate{}, err
|
|
}
|
|
return certs, nil
|
|
}
|
|
|
|
// GetByCA returns certificates issued by a specific CA
|
|
func (r *CertificateRepository) GetByCA(caID string) ([]models.Certificate, error) {
|
|
var certs []models.Certificate
|
|
if err := r.db.Where("certificate_authority_id = ?", caID).Find(&certs).Error; err != nil {
|
|
return []models.Certificate{}, err
|
|
}
|
|
return certs, nil
|
|
}
|
|
|
|
// GetByStatus returns certificates by status
|
|
func (r *CertificateRepository) GetByStatus(status models.CertificateStatus) ([]models.Certificate, error) {
|
|
var certs []models.Certificate
|
|
if err := r.db.Where("status = ?", status).Find(&certs).Error; err != nil {
|
|
return []models.Certificate{}, err
|
|
}
|
|
return certs, nil
|
|
}
|
|
|
|
// GetActive returns all active certificates
|
|
func (r *CertificateRepository) GetActive() ([]models.Certificate, error) {
|
|
return r.GetByStatus(models.CertificateStatusActive)
|
|
}
|
|
|
|
// GetRevoked returns all revoked certificates
|
|
func (r *CertificateRepository) GetRevoked() ([]models.Certificate, error) {
|
|
return r.GetByStatus(models.CertificateStatusRevoked)
|
|
}
|
|
|
|
// GetExpired returns all expired certificates
|
|
func (r *CertificateRepository) GetExpired() ([]models.Certificate, error) {
|
|
return r.GetByStatus(models.CertificateStatusExpired)
|
|
}
|
|
|
|
// GetPending returns all pending certificates
|
|
func (r *CertificateRepository) GetPending() ([]models.Certificate, error) {
|
|
return r.GetByStatus(models.CertificateStatusPending)
|
|
} |