Class: Pusher::WebHook
- Inherits:
- 
      Object
      
        - Object
- Pusher::WebHook
 
- Defined in:
- lib/pusher/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 = Pusher)  ⇒ 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 Pusher, 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 = Pusher) ⇒ 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/pusher/webhook.rb', line 31 def initialize(request, client = Pusher) @client = client # For Rack::Request and ActionDispatch::Request if request.respond_to?(:env) && request.respond_to?(:content_type) @key = request.env['HTTP_X_PUSHER_KEY'] @signature = request.env["HTTP_X_PUSHER_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/pusher/webhook.rb', line 26 def key @key end | 
#signature ⇒ Object (readonly)
Returns the value of attribute signature.
| 26 27 28 | # File 'lib/pusher/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/pusher/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/pusher/webhook.rb', line 69 def events data["events"] end | 
#time ⇒ Time
The time at which the WebHook was initially triggered by Pusher, i.e. when the event occurred
| 78 79 80 | # File 'lib/pusher/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/pusher/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 Pusher.logger.warn "Received webhook with unknown key: #{key}" return false end |