class Lita::Handlers::RubyGemsWebhooks::WebhookHandler

Public Class Methods

name() click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 10
def name
  'RubygemsWebhooks'
end

Public Instance Methods

handle_webhook(request, response) click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 34
def handle_webhook(request, response)
  gem_info = JSON.parse(request.body.read)
  auth_header = request.env['HTTP_AUTHORIZATION']
  unless authentic_token?(auth_header, gem_info['name'], gem_info['version'], config.api_key)
    return handle_unauthentic_token(response)
  end
  target = Source.new(room: config.alert_channel)
  robot.send_messages(target, update_message(gem_info))
  response.status = 200
  response
end
respond(response) click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 30
def respond(response)
  response.reply index_message
end
start_registrar(_payload) click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 46
def start_registrar(_payload)
  Registrar.configure do |configuration|
    configuration['api_key'] = config.api_key
    configuration['domain'] = config.domain
    configuration['hooks'] = config.gems
  end
  Registrar.configure_web_hooks
end

Private Instance Methods

authentic_token?(presented_token, gem_name, gem_version, api_key) click to toggle source

An authentic Authorization token will be the SHA2 of gem_name, gem_version and API key

# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 59
def authentic_token?(presented_token, gem_name, gem_version, api_key)
  false if [presented_token, gem_name, gem_version, api_key].include?(nil)
  expected_token = Digest::SHA256.new
  expected_token << (gem_name + gem_version + api_key)
  expected_token == presented_token
end
gems() click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 86
def gems
  config.gems
end
handle_unauthentic_token(response) click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 66
def handle_unauthentic_token(response)
  response.status = 403
  response
end
index_message() click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 71
        def index_message
          <<~EOS
          #{robot.name} is currently observing the following gems:
          #{'- ' + gems.join("\n- ")}
          EOS
        end
update_message(gem_info) click to toggle source
# File lib/lita/handlers/rubygems_webhooks/webhook_handler.rb, line 78
        def update_message(gem_info)
          <<~EOS
          #{gem_info['name']} gem has been updated!
          #{gem_info['info']}
          New version: #{gem_info['version']}
          EOS
        end