class Octoks::Receiver
Constants
- HMAC_DIGEST
Attributes
hooks[RW]
secret[R]
Public Class Methods
new(secret = nil)
click to toggle source
# File lib/octoks/receiver.rb, line 11 def initialize(secret = nil) @hooks = {} @secret = secret end
Public Instance Methods
call(env)
click to toggle source
# File lib/octoks/receiver.rb, line 28 def call(env) req = Rack::Request.new(env) failed = [400, [], ["BAD REQUEST"]] if !req.post? or req.params['payload'].nil? or req.env["HTTP_X_GITHUB_EVENT"].nil? return failed end unless verify_signature(req) return failed end begin payload = JSON.parse(req.params['payload']) rescue return failed end event_name = req.env["HTTP_X_GITHUB_EVENT"] event = Octoks::Event.new(event_name.to_sym, payload) emit(event) [200, [], ["OK"]] end
emit(event)
click to toggle source
# File lib/octoks/receiver.rb, line 21 def emit(event) hooks[event.name] ||= [] hooks[event.name].each do |hook| hook.call(event) end end
on(name, &cb)
click to toggle source
# File lib/octoks/receiver.rb, line 16 def on(name, &cb) @hooks[name] ||= [] @hooks[name].push(cb) end
verify_signature(req)
click to toggle source
# File lib/octoks/receiver.rb, line 55 def verify_signature(req) return true unless @secret return false unless req.body sig = 'sha1='+OpenSSL::HMAC.hexdigest(HMAC_DIGEST, @secret, req.body.read) req.body.rewind SecureCompare.compare(sig, req.env["HTTP_HUB_SIGNATURE"]) end