app/services/x509/attributes.rb
# frozen_string_literal: true
module X509
Attributes = Struct.new(
:subject, :issuer, :presented
) do
def self.new_from_hash(hash)
attrs = new
hash.slice(*members).each { |key, val| attrs[key] = val }
attrs
end
def self.new_from_json(piv_cert_json)
return new if piv_cert_json.blank?
piv_cert_info = JSON.parse(piv_cert_json, symbolize_names: true)
new_from_hash(piv_cert_info)
end
def initialize(*args)
super
assign_all_members
end
def []=(key, value)
if value.is_a?(Hash)
super(key, X509::Attribute.new(**value))
else
super(key, X509::Attribute.new(raw: value))
end
end
private
# rubocop:disable Lint/SelfAssignment
def assign_all_members
self.class.members.each do |member|
self[member] = self[member]
end
end
# rubocop:enable Lint/SelfAssignment
end
end