class R509::CRL::SQLiteReaderWriter
SQLite-based reader/writer for CRL
data.
Public Class Methods
Create an SQLite based persistence @param filename_or_db filepath to an SQLite database or an SQLite3::Database object
# File lib/r509/crl/sqlite_reader_writer.rb, line 8 def initialize(filename_or_db) if filename_or_db.is_a? SQLite3::Database @db = filename_or_db else @db = SQLite3::Database.new(file) end # create tables if missing ensure_schema end
Public Instance Methods
Reads a CRL
list file from the SQLite database @yield For each revoked certificate in the CRL
@yieldparam serial [Integer] revoked certificate's serial number @yieldparam reason [Integer,nil] reason for revocation. @yieldparam revoke_time [Integer]
# File lib/r509/crl/sqlite_reader_writer.rb, line 23 def read_list @db.execute('SELECT serial,reason,revoked_at from revoked_serials') do |row| serial = row[0].to_i reason = row[1] revoke_time = row[2] yield serial, reason, revoke_time end nil end
read the CRL
number from SQLite
# File lib/r509/crl/sqlite_reader_writer.rb, line 48 def read_number @db.get_first_value 'SELECT number from crl_number' end
Remove a CRL
list entry from SQLite @param serial [Integer] serial number of the certificate to remove from the list
# File lib/r509/crl/sqlite_reader_writer.rb, line 43 def remove_list_entry(serial) @db.execute('DELETE FROM revoked_serials WHERE serial=?', serial.to_s) end
Appends a CRL
list entry to the SQLite database @param serial [Integer] serial number of the certificate to revoke @param reason [Integer,nil] reason for revocation @param revoke_time [Integer]
# File lib/r509/crl/sqlite_reader_writer.rb, line 37 def write_list_entry(serial, revoke_time, reason) @db.execute('INSERT INTO revoked_serials (serial, revoked_at, reason) VALUES (?,?,?)', serial.to_s, revoke_time, reason) end
write the CRL
number to SQLite
# File lib/r509/crl/sqlite_reader_writer.rb, line 53 def write_number(crl_number) @db.execute('UPDATE crl_number SET number=?', crl_number) end
Private Instance Methods
# File lib/r509/crl/sqlite_reader_writer.rb, line 59 def ensure_schema return unless @db.execute('SELECT * FROM sqlite_master WHERE type=? AND name=?', 'table', 'revoked_serials').empty? @db.execute_batch <<-EOSCHEMA CREATE TABLE revoked_serials( serial TEXT NOT NULL PRIMARY KEY, reason INTEGER, revoked_at INTEGER NOT NULL ); CREATE TABLE crl_number( number INTEGER NOT NULL DEFAULT 0 ); INSERT INTO crl_number DEFAULT VALUES; EOSCHEMA end