lib/slack/events/request.rb in slack-ruby-client-0.14.1 vs lib/slack/events/request.rb in slack-ruby-client-0.14.2

- old
+ new

@@ -3,14 +3,18 @@ class Request class MissingSigningSecret < StandardError; end class TimestampExpired < StandardError; end class InvalidSignature < StandardError; end - attr_reader :http_request + attr_reader :http_request, + :signing_secret, + :signature_expires_in - def initialize(http_request) + def initialize(http_request, options = {}) @http_request = http_request + @signing_secret = options[:signing_secret] || Slack::Events.config.signing_secret + @signature_expires_in = options[:signature_expires_in] || Slack::Events.config.signature_expires_in end # Request timestamp. def timestamp @timestamp ||= http_request.headers['X-Slack-Request-Timestamp'] @@ -32,19 +36,19 @@ @body ||= http_request.body.read end # Returns true if the signature coming from Slack has expired. def expired? - timestamp.nil? || (Time.now.to_i - timestamp.to_i).abs > Slack::Events.config.signature_expires_in + timestamp.nil? || (Time.now.to_i - timestamp.to_i).abs > signature_expires_in end # Returns true if the signature coming from Slack is valid. def valid? - raise MissingSigningSecret unless Slack::Events.config.signing_secret + raise MissingSigningSecret unless signing_secret digest = OpenSSL::Digest::SHA256.new signature_basestring = [version, timestamp, body].join(':') - hex_hash = OpenSSL::HMAC.hexdigest(digest, Slack::Events.config.signing_secret, signature_basestring) + hex_hash = OpenSSL::HMAC.hexdigest(digest, signing_secret, signature_basestring) computed_signature = [version, hex_hash].join('=') computed_signature == signature end # Validates the request signature and its expiration.