facebook_session 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/facebook_session/helper.rb +12 -1
- data/lib/facebook_session/session.rb +2 -19
- data/lib/facebook_session/signed_request.rb +21 -0
- data/lib/facebook_session/version.rb +2 -2
- data/lib/facebook_session.rb +28 -1
- metadata +24 -37
@@ -13,5 +13,16 @@ module FacebookSession
|
|
13
13
|
self.facebook_session ? true : false
|
14
14
|
end
|
15
15
|
|
16
|
+
def facebook_signed_request
|
17
|
+
return @facebook_signed_request if @facebook_signed_request
|
18
|
+
raise 'FacebookSession not configured!' unless FacebookSession.config?
|
19
|
+
if facebook_signed_request = params[:signed_request]
|
20
|
+
@facebook_signed_request = FacebookSession::SignedRequest.parse_request(facebook_signed_request)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def facebook_signed_request?
|
25
|
+
self.facebook_signed_request ? true : false
|
26
|
+
end
|
16
27
|
end
|
17
|
-
end
|
28
|
+
end
|
@@ -3,25 +3,8 @@ module FacebookSession
|
|
3
3
|
attr_accessor :user_id, :oauth_token, :algorithm, :issued_at
|
4
4
|
|
5
5
|
class << self
|
6
|
-
def base64_url_decode(string)
|
7
|
-
encoded_string = string.gsub('-','+').gsub('_','/')
|
8
|
-
encoded_string += '=' while (encoded_string.length % 4 != 0)
|
9
|
-
Base64.decode64(encoded_string)
|
10
|
-
end
|
11
|
-
|
12
6
|
def parse_cookie(cookie)
|
13
|
-
|
14
|
-
sig = base64_url_decode(encoded_sig)
|
15
|
-
session_data = JSON.parse(base64_url_decode(payload))
|
16
|
-
session_data.symbolize_keys!
|
17
|
-
|
18
|
-
expected_sig = OpenSSL::HMAC.digest(
|
19
|
-
OpenSSL::Digest::Digest.new('sha256'),
|
20
|
-
FacebookSession.application_secret,
|
21
|
-
payload
|
22
|
-
)
|
23
|
-
|
24
|
-
if sig == expected_sig
|
7
|
+
if session_data = FacebookSession.decode_payload(cookie)
|
25
8
|
self.new(session_data)
|
26
9
|
else
|
27
10
|
nil
|
@@ -35,4 +18,4 @@ module FacebookSession
|
|
35
18
|
end
|
36
19
|
end
|
37
20
|
end
|
38
|
-
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module FacebookSession
|
2
|
+
class SignedRequest
|
3
|
+
attr_accessor :code, :algorithm, :issued_at, :user_id, :user, :oauth_token, :expires, :app_data, :page
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def parse_request(request)
|
7
|
+
if request_data = FacebookSession.decode_payload(request)
|
8
|
+
self.new(request_data)
|
9
|
+
else
|
10
|
+
nil
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(request_data={})
|
16
|
+
request_data.each do |key, value|
|
17
|
+
self.send("#{key.to_s}=".to_sym, value) if self.respond_to?("#{key.to_s}=".to_sym)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module FacebookSession
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.4"
|
3
|
+
end
|
data/lib/facebook_session.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'facebook_session/helper')
|
2
2
|
require File.join(File.dirname(__FILE__), 'facebook_session/session')
|
3
|
+
require File.join(File.dirname(__FILE__), 'facebook_session/signed_request')
|
3
4
|
|
4
5
|
module FacebookSession
|
5
6
|
class << self
|
@@ -26,8 +27,34 @@ module FacebookSession
|
|
26
27
|
def application_secret
|
27
28
|
self.config[:application_secret]
|
28
29
|
end
|
30
|
+
|
31
|
+
def base64_url_decode(string)
|
32
|
+
encoded_string = string.gsub('-','+').gsub('_','/')
|
33
|
+
encoded_string += '=' while (encoded_string.length % 4 != 0)
|
34
|
+
Base64.decode64(encoded_string)
|
35
|
+
end
|
36
|
+
|
37
|
+
def decode_payload(string)
|
38
|
+
encoded_sig, payload = string.split('.')
|
39
|
+
sig = base64_url_decode(encoded_sig)
|
40
|
+
decoded_payload = JSON.parse(base64_url_decode(payload))
|
41
|
+
decoded_payload.symbolize_keys!
|
42
|
+
|
43
|
+
expected_sig = OpenSSL::HMAC.digest(
|
44
|
+
OpenSSL::Digest::Digest.new('sha256'),
|
45
|
+
FacebookSession.application_secret,
|
46
|
+
payload
|
47
|
+
)
|
48
|
+
|
49
|
+
if sig == expected_sig
|
50
|
+
decoded_payload
|
51
|
+
else
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
29
56
|
end
|
30
57
|
end
|
31
58
|
|
32
59
|
ActionView::Base.send :include, FacebookSession::Helper
|
33
|
-
ActionController::Base.send :include, FacebookSession::Helper
|
60
|
+
ActionController::Base.send :include, FacebookSession::Helper
|
metadata
CHANGED
@@ -1,68 +1,55 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: facebook_session
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
7
|
+
authors:
|
8
|
+
- Inge Jørgensen
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2012-05-02 00:00:00 Z
|
12
|
+
date: 2013-08-15 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
20
|
-
|
21
14
|
description: Rails plugin for simple Facebook session authentication
|
22
15
|
email: inge@manualdesign.no
|
23
16
|
executables: []
|
24
|
-
|
25
17
|
extensions: []
|
26
|
-
|
27
18
|
extra_rdoc_files: []
|
28
|
-
|
29
|
-
files:
|
19
|
+
files:
|
30
20
|
- lib/facebook_session.rb
|
31
21
|
- lib/facebook_session/helper.rb
|
32
22
|
- lib/facebook_session/session.rb
|
23
|
+
- lib/facebook_session/signed_request.rb
|
33
24
|
- lib/facebook_session/version.rb
|
34
25
|
homepage: https://github.com/manualdesign/simple_session
|
35
26
|
licenses: []
|
36
|
-
|
37
27
|
post_install_message:
|
38
28
|
rdoc_options: []
|
39
|
-
|
40
|
-
require_paths:
|
29
|
+
require_paths:
|
41
30
|
- lib
|
42
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
32
|
none: false
|
44
|
-
requirements:
|
45
|
-
- -
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
|
48
|
-
segments:
|
33
|
+
requirements:
|
34
|
+
- - ! '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
segments:
|
49
38
|
- 0
|
50
|
-
|
51
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
hash: -1069920110699623213
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
41
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
segments:
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
segments:
|
58
47
|
- 0
|
59
|
-
|
48
|
+
hash: -1069920110699623213
|
60
49
|
requirements: []
|
61
|
-
|
62
50
|
rubyforge_project:
|
63
|
-
rubygems_version: 1.8.
|
51
|
+
rubygems_version: 1.8.23
|
64
52
|
signing_key:
|
65
53
|
specification_version: 3
|
66
54
|
summary: Rails plugin for simple Facebook session authentication
|
67
55
|
test_files: []
|
68
|
-
|