Module: ChatSDK::Adapter::MetaVerification

Defined in:
lib/chat_sdk/adapter/meta_verification.rb

Instance Method Summary collapse

Instance Method Details

#meta_ack_response(rack_request, verify_token:) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/chat_sdk/adapter/meta_verification.rb', line 28

def meta_ack_response(rack_request, verify_token:)
  return nil unless rack_request.get?

  params = rack_request.params
  mode = params["hub.mode"]
  token = params["hub.verify_token"]
  challenge = params["hub.challenge"]

  if mode == "subscribe" && token == verify_token
    [200, {}, [challenge.to_s]]
  end
end

#verify_meta_signature!(rack_request, secret:, platform_name:) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/chat_sdk/adapter/meta_verification.rb', line 9

def verify_meta_signature!(rack_request, secret:, platform_name:)
  signature = rack_request.get_header("HTTP_X_HUB_SIGNATURE_256")

  unless signature
    raise ChatSDK::SignatureVerificationError, "Missing #{platform_name} signature header"
  end

  body = rack_request.body.read
  rack_request.body.rewind

  expected = "sha256=#{OpenSSL::HMAC.hexdigest("SHA256", secret, body)}"

  unless Rack::Utils.secure_compare(signature, expected)
    raise ChatSDK::SignatureVerificationError, "Invalid #{platform_name} signature"
  end

  true
end