class SSLTool::CertificateStore::SequelAdapter

Public Class Methods

new(database_url) click to toggle source
# File lib/ssltool/adapters/sequel.rb, line 8
def initialize(database_url)
  @database = Sequel.connect(database_url)
  init_certificates_table
  @certificates = @database[:certificates]
end

Public Instance Methods

load_pool(pool_name) click to toggle source
# File lib/ssltool/adapters/sequel.rb, line 14
def load_pool(pool_name)
  @certificates.filter(pool:pool_name.to_s).map(:pem).map { |pem| Certificate.new pem }.to_set
end
store_pool(pool_name, certs) click to toggle source
# File lib/ssltool/adapters/sequel.rb, line 18
def store_pool(pool_name, certs)
  @database.transaction retry_on:Sequel::DatabaseDisconnectError, num_retries:3 do
    current_set     = load_pool(pool_name)
    replacement_set = certs.to_set
    delete_set      = (current_set - replacement_set).map { |cert| { fingerprint:cert.fingerprint, pool:pool_name.to_s } }
    insert_set      = (replacement_set - current_set).map { |cert| { fingerprint:cert.fingerprint, pool:pool_name.to_s, pem:cert.to_pem } }
    delete_set.each { |params| @certificates.where(params).delete }
    @certificates.multi_insert(insert_set)
  end
end

Private Instance Methods

init_certificates_table() click to toggle source
# File lib/ssltool/adapters/sequel.rb, line 32
def init_certificates_table
  return if @database.table_exists? :certificates
  @database.create_table :certificates do
    column :pool,        :varchar, null:false
    column :pem,         :text,    null:false
    column :fingerprint, :char,    null:false, size:40
    index  :fingerprint
    index [:pool, :fingerprint], unique:true
  end
end