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