module Serializers module Repp class Certificate attr_reader :certificate def initialize(certificate) @certificate = certificate end def to_json(obj = certificate) json = obj.as_json.except('csr', 'crt', 'private_key', 'p12') csr = obj.parsed_csr crt = obj.parsed_crt p12 = obj.parsed_p12 private_key = obj.parsed_private_key json[:private_key] = private_key_data(private_key) if private_key json[:p12] = p12_data(obj) if obj.p12.present? && p12 json[:expires_at] = obj.expires_at if obj.expires_at.present? json[:csr] = csr_data(csr) if csr json[:crt] = crt_data(crt) if crt if (Rails.env.test? || ENV['SKIP_CERTIFICATE_VALIDATIONS'] == 'true') if csr.nil? && obj.csr.present? json[:csr] = { version: 0, subject: obj.common_name || 'Test Subject', alg: 'sha256WithRSAEncryption' } end if crt.nil? && obj.crt.present? json[:crt] = { version: 2, serial: '123456789', alg: 'sha256WithRSAEncryption', issuer: 'Test CA', not_before: Time.current - 1.day, not_after: Time.current + 1.year, subject: obj.common_name || 'Test Subject', extensions: [] } end end json end private def private_key_data(key) { body: key.to_pem, type: 'RSA PRIVATE KEY' } end def p12_data(obj) { body: obj.p12, type: 'PKCS12', password: obj.p12_password } end def csr_data(csr) { version: csr.version, subject: csr.subject.to_s, alg: csr.signature_algorithm.to_s, } end def crt_data(crt) { version: crt.version, serial: crt.serial.to_s, alg: crt.signature_algorithm.to_s, issuer: crt.issuer.to_s, not_before: crt.not_before, not_after: crt.not_after, subject: crt.subject.to_s, extensions: crt.extensions.map(&:to_s), } end end end end