Class: Eventflit::WebHook
- Inherits:
-
Object
- Object
- Eventflit::WebHook
- Defined in:
- lib/eventflit/webhook.rb
Overview
Used to parse and authenticate WebHooks
Instance Attribute Summary collapse
-
#key ⇒ Object
readonly
Returns the value of attribute key.
-
#signature ⇒ Object
readonly
Returns the value of attribute signature.
Instance Method Summary collapse
-
#data ⇒ Object
Access the parsed WebHook body.
-
#events ⇒ Object
Array of events (as Hashes) contained inside the webhook.
-
#initialize(request, client = Eventflit) ⇒ WebHook
constructor
Provide either a Rack::Request or a Hash containing :key, :signature, :body, and :content_type (optional).
-
#time ⇒ Time
The time at which the WebHook was initially triggered by Eventflit, i.e.
-
#valid?(extra_tokens = nil) ⇒ Boolean
Returns whether the WebHook is valid by checking that the signature matches the configured key & secret.
Constructor Details
#initialize(request, client = Eventflit) ⇒ WebHook
Provide either a Rack::Request or a Hash containing :key, :signature, :body, and :content_type (optional)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/eventflit/webhook.rb', line 31 def initialize(request, client = Eventflit) @client = client # For Rack::Request and ActionDispatch::Request if request.respond_to?(:env) && request.respond_to?(:content_type) @key = request.env['HTTP_X_EVENTFLIT_KEY'] @signature = request.env["HTTP_X_EVENTFLIT_SIGNATURE"] @content_type = request.content_type request.body.rewind @body = request.body.read request.body.rewind else @key, @signature, @body = request.values_at(:key, :signature, :body) @content_type = request[:content_type] || 'application/json' end end |
Instance Attribute Details
#key ⇒ Object (readonly)
Returns the value of attribute key.
26 27 28 |
# File 'lib/eventflit/webhook.rb', line 26 def key @key end |
#signature ⇒ Object (readonly)
Returns the value of attribute signature.
26 27 28 |
# File 'lib/eventflit/webhook.rb', line 26 def signature @signature end |
Instance Method Details
#data ⇒ Object
Access the parsed WebHook body
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/eventflit/webhook.rb', line 84 def data @data ||= begin case @content_type when 'application/json' MultiJson.decode(@body) else raise "Unknown Content-Type (#{@content_type})" end end end |
#events ⇒ Object
Array of events (as Hashes) contained inside the webhook
69 70 71 |
# File 'lib/eventflit/webhook.rb', line 69 def events data["events"] end |
#time ⇒ Time
The time at which the WebHook was initially triggered by Eventflit, i.e. when the event occurred
78 79 80 |
# File 'lib/eventflit/webhook.rb', line 78 def time Time.at(data["time_ms"].to_f/1000) end |
#valid?(extra_tokens = nil) ⇒ Boolean
Returns whether the WebHook is valid by checking that the signature matches the configured key & secret. In the case that the webhook is invalid, the reason is logged
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/eventflit/webhook.rb', line 54 def valid?(extra_tokens = nil) extra_tokens = [extra_tokens] if extra_tokens.kind_of?(Hash) if @key == @client.key return check_signature(@client.secret) elsif extra_tokens extra_tokens.each do |token| return check_signature(token[:secret]) if @key == token[:key] end end Eventflit.logger.warn "Received webhook with unknown key: #{key}" return false end |