class FacebookCanvas::SignedRequest
Constants
- SUPPORTED_ALGORITHM
Attributes
secret[R]
value[R]
Public Class Methods
new(value, secret)
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 16 def initialize(value, secret) @value = value @secret = secret end
parse(value, secret)
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 12 def self.parse(value, secret) new(value, secret).payload end
Public Instance Methods
access_token()
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 29 def access_token payload && payload["oauth_token"] end
payload()
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 21 def payload @payload ||= parse_signed_request end
user_id()
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 25 def user_id payload && payload["user_id"] end
Private Instance Methods
base64_decode_url(value)
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 55 def base64_decode_url(value) value += '=' * (4 - value.size.modulo(4)) Base64.decode64(value.tr('-_', '+/')) end
parse_signed_request()
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 35 def parse_signed_request signature, encoded_payload = value.split('.') return if signature.nil? decoded_hex_signature = base64_decode_url(signature) decoded_payload = JSON.parse(base64_decode_url(encoded_payload)) unless decoded_payload['algorithm'] == SUPPORTED_ALGORITHM raise UnknownSignatureAlgorithmError, "unknown algorithm: #{decoded_payload['algorithm']}" end if valid_signature?(decoded_hex_signature, encoded_payload) decoded_payload end end
valid_signature?(signature, payload, algorithm = OpenSSL::Digest::SHA256.new)
click to toggle source
# File lib/facebook_canvas/signed_request.rb, line 51 def valid_signature?(signature, payload, algorithm = OpenSSL::Digest::SHA256.new) OpenSSL::HMAC.digest(algorithm, secret, payload) == signature end