Class: Facebook::SignedRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/facebook-signed-request/version.rb,
lib/facebook-signed-request/signed_request.rb

Constant Summary collapse

VERSION =
"0.2.6"

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request_data, options = {}) ⇒ SignedRequest

Returns a new instance of SignedRequest.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/facebook-signed-request/signed_request.rb', line 22

def initialize( request_data, options = {} )
  if request_data.respond_to?(:split)
    @encoded_signature, @encoded_data = request_data.split(".", 2)
  else
    @encoded_signature, @encoded_data = nil
  end

  @secret = options[:secret] || SignedRequest.secret
  @errors = []

  check_for_invalid_arguments

  @signature          = extract_request_signature
  @computed_signature = compute_signature
  @payload            = extract_request_payload
  @data               = parse_request_playload

  validate_algorithm
  validate_signature
  validate_timestamp if options[:strict] == true
end

Class Attribute Details

.secretObject

Returns the value of attribute secret.



5
6
7
# File 'lib/facebook-signed-request/signed_request.rb', line 5

def secret
  @secret
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



20
21
22
# File 'lib/facebook-signed-request/signed_request.rb', line 20

def data
  @data
end

#encoded_dataObject (readonly)

Returns the value of attribute encoded_data.



20
21
22
# File 'lib/facebook-signed-request/signed_request.rb', line 20

def encoded_data
  @encoded_data
end

#errorsObject (readonly)

Returns the value of attribute errors.



20
21
22
# File 'lib/facebook-signed-request/signed_request.rb', line 20

def errors
  @errors
end

#signatureObject (readonly)

Returns the value of attribute signature.



20
21
22
# File 'lib/facebook-signed-request/signed_request.rb', line 20

def signature
  @signature
end

Class Method Details

.encode_and_sign(options) ⇒ Object

Creates a signed_request with correctly padded Base64 encoding. Mostly useful for testing.



9
10
11
12
13
14
15
16
17
# File 'lib/facebook-signed-request/signed_request.rb', line 9

def encode_and_sign options
  encoded_data      = Base64.urlsafe_encode64( options.to_json ).tr('=', '')
  digestor          = OpenSSL::Digest::Digest.new('sha256')
  signature         = OpenSSL::HMAC.digest( digestor, @secret, encoded_data )
  encoded_signature = Base64.urlsafe_encode64( signature )
  encoded_signature = encoded_signature.tr('=', '')

  "#{encoded_signature}.#{encoded_data}"
end

Instance Method Details

#invalid?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/facebook-signed-request/signed_request.rb', line 48

def invalid?
  !valid?
end

#valid?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/facebook-signed-request/signed_request.rb', line 44

def valid?
  @errors.empty?
end