module Canari::CertStream

Attributes

url[RW]

Public Instance Methods

attach_listeners() click to toggle source
# File lib/canari/cert_stream.rb, line 38
def attach_listeners
  @driver.on(:open)    { |_event| Canari.logger.info 'Connection opened' }
  @driver.on(:message) do |event|
    handle_message(event.data)
  end
  @driver.on(:close) { |event| finalize(event) }
end
connection_completed() click to toggle source
# File lib/canari/cert_stream.rb, line 12
def connection_completed
  @driver = WebSocket::Driver.client(self)
  @driver.add_extension(PermessageDeflate)
  attach_listeners
  @driver.start
end
finalize(event) click to toggle source
# File lib/canari/cert_stream.rb, line 27
def finalize(event)
  Canari.logger.info "Connection closed, #{event.code}: #{event.reason}"
  close_connection
  Canari.logger.info 'Reconnecting'
  reconnect(uri.host, 443)
end
handle_message(data) click to toggle source
# File lib/canari/cert_stream.rb, line 46
def handle_message(data)
  data = JSON.parse(data)
  return unless data['message_type'] == 'certificate_update'

  cert = data['data']['leaf_cert']
  matching_names = DomainCache.fetch(cert['all_domains'])
  return unless matching_names.any?

  Canari.logger.info "Certificate matching #{matching_names}"
  Notifier.notify(matching_names, data)
end
receive_data(data) click to toggle source
# File lib/canari/cert_stream.rb, line 19
def receive_data(data)
  @driver.parse(data)
end
uri() click to toggle source
# File lib/canari/cert_stream.rb, line 34
def uri
  URI.parse(url)
end
write(data) click to toggle source
# File lib/canari/cert_stream.rb, line 23
def write(data)
  send_data(data)
end