module ActiveHook::Client::Recieve

Constants

REQUEST_HEADERS

Attributes

request[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/activehook/client/recieve.rb, line 13
def initialize(options = {})
  options.each { |key, value| send("#{key}=", value) }
end

Public Instance Methods

payload() click to toggle source
# File lib/activehook/client/recieve.rb, line 25
def payload
  parsed_body['payload']
rescue
  nil
end
server_valid?() click to toggle source
# File lib/activehook/client/recieve.rb, line 21
def server_valid?
  @server_valid ||= validate_server
end
signature_valid?() click to toggle source
# File lib/activehook/client/recieve.rb, line 17
def signature_valid?
  @signature_valid ||= validate_signature
end
validated_payload() click to toggle source
# File lib/activehook/client/recieve.rb, line 31
def validated_payload
  raise StandardError, 'Webhook is invalid.' unless signature_valid?
  @payload
end

Private Instance Methods

hook_id() click to toggle source
# File lib/activehook/client/recieve.rb, line 44
def hook_id
  parsed_body['hook_id']
end
hook_json() click to toggle source
# File lib/activehook/client/recieve.rb, line 75
def hook_json
  { id: hook_id,
    key: hook_key }.to_json
end
hook_key() click to toggle source
# File lib/activehook/client/recieve.rb, line 48
def hook_key
  parsed_body['hook_key']
end
hook_signature() click to toggle source
# File lib/activehook/client/recieve.rb, line 56
def hook_signature
  @request.env['HTTP_X-Webhook-Signature']
end
hook_uri() click to toggle source
# File lib/activehook/client/recieve.rb, line 52
def hook_uri
  @hook_uri ||= URI.parse(self.class::VALIDATION_URI)
end
parsed_body() click to toggle source
# File lib/activehook/client/recieve.rb, line 38
def parsed_body
  @parsed_body ||= JSON.parse(request.body.read)
rescue
  {}
end
validate_server() click to toggle source
# File lib/activehook/client/recieve.rb, line 60
def validate_server
  http = Net::HTTP.new(hook_uri.host, hook_uri.port)
  response = http.post(hook_uri.path, hook_json, REQUEST_HEADERS)
  response.code.to_i == 200 ? true : false
rescue
  false
end
validate_signature() click to toggle source
# File lib/activehook/client/recieve.rb, line 68
def validate_signature
  signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), self.class::VALIDATION_TOKEN, payload)
  Rack::Utils.secure_compare(signature, hook_signature)
rescue
  false
end