class Sinbotra::Messenger::Middleware::FacebookSignature
Public Class Methods
new(app)
click to toggle source
# File lib/sinbotra/messenger/middleware/facebook_signature.rb, line 5 def initialize(app) raise ArgumentError, "You need to set a FACEBOOK_PAGE_TOKEN environmental variable to run the server!" unless ENV["FACEBOOK_PAGE_TOKEN"] raise ArgumentError, "You need to set a FACEBOOK_APP_SECRET environmental variable to run the server!" unless ENV["FACEBOOK_APP_SECRET"] @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/sinbotra/messenger/middleware/facebook_signature.rb, line 11 def call(env) req = Rack::Request.new(env) return @app.call(env) unless req.post? payload = req.body.read unless signature_valid?(payload, env) return Rack::Response.new([], 401, {}).finish end @app.call(env) end
signature_valid?(payload_body, env)
click to toggle source
# File lib/sinbotra/messenger/middleware/facebook_signature.rb, line 22 def signature_valid?(payload_body, env) digest = OpenSSL::HMAC.hexdigest( OpenSSL::Digest.new("sha1"), ENV["FACEBOOK_APP_SECRET"], payload_body ) signature = "sha1=" + digest Rack::Utils.secure_compare(signature, env["HTTP_X_HUB_SIGNATURE"]) end