mirror of
https://github.com/internetee/registry.git
synced 2025-08-01 07:26:22 +02:00
- Create UserCertificate model with validations and certificate renewal logic - Add tests for UserCertificate model functionality - Add user certificates fixtures for testing - Add association between ApiUser and UserCertificates - Add required gems: dry-types, dry-struct, openssl - Add /certs to .gitignore This commit implements the base model for storing user certificates in the database, including private keys, CSRs, certificates and P12 files. The model includes basic validation and certificate renewal functionality, with comprehensive test coverage.
54 lines
1.2 KiB
Ruby
54 lines
1.2 KiB
Ruby
class UserCertificate < ApplicationRecord
|
|
belongs_to :user
|
|
|
|
validates :user, presence: true
|
|
validates :private_key, presence: true
|
|
|
|
enum status: {
|
|
pending: 'pending',
|
|
active: 'active',
|
|
revoked: 'revoked'
|
|
}
|
|
|
|
def renewable?
|
|
return false unless certificate.present?
|
|
return false if revoked?
|
|
|
|
expires_at.present? && expires_at < 30.days.from_now
|
|
end
|
|
|
|
def expired?
|
|
return false unless certificate.present?
|
|
return false if revoked?
|
|
|
|
expires_at.present? && expires_at < Time.current
|
|
end
|
|
|
|
def renew
|
|
raise "Certificate cannot be renewed" unless renewable?
|
|
|
|
generator = Certificates::CertificateGenerator.new(
|
|
username: user.username,
|
|
registrar_code: user.registrar_code,
|
|
registrar_name: user.registrar_name,
|
|
user_certificate: self
|
|
)
|
|
|
|
generator.renew_certificate
|
|
end
|
|
|
|
def self.generate_certificates_for_api_user(api_user:)
|
|
cert = UserCertificate.create!(
|
|
user: api_user,
|
|
status: 'pending',
|
|
private_key: ''
|
|
)
|
|
|
|
Certificates::CertificateGenerator.new(
|
|
username: api_user.username,
|
|
registrar_code: api_user.registrar_code,
|
|
registrar_name: api_user.registrar_name,
|
|
user_certificate: cert
|
|
).call
|
|
end
|
|
end
|