facebooker2 0.0.4 → 0.0.5
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.
@@ -1,4 +1,5 @@
|
|
1
1
|
require "digest/md5"
|
2
|
+
require "hmac-sha2"
|
2
3
|
module Facebooker2
|
3
4
|
module Rails
|
4
5
|
module Controller
|
@@ -7,31 +8,40 @@ module Facebooker2
|
|
7
8
|
controller.helper Facebooker2::Rails::Helpers
|
8
9
|
controller.helper_method :current_facebook_user
|
9
10
|
controller.helper_method :current_facebook_client
|
11
|
+
controller.helper_method :facebook_params
|
10
12
|
end
|
11
13
|
|
12
14
|
def current_facebook_user
|
13
|
-
|
15
|
+
fetch_client_and_user
|
14
16
|
@_current_facebook_user
|
15
17
|
end
|
16
18
|
|
17
19
|
def current_facebook_client
|
18
|
-
|
20
|
+
fetch_client_and_user
|
19
21
|
@_current_facebook_client
|
20
22
|
end
|
21
23
|
|
22
|
-
def
|
24
|
+
def fetch_client_and_user
|
23
25
|
return if @_fb_user_fetched
|
26
|
+
fetch_client_and_user_from_cookie
|
27
|
+
fetch_client_and_user_from_signed_request unless @_current_facebook_client
|
28
|
+
@_fb_user_fetched = true
|
29
|
+
end
|
30
|
+
|
31
|
+
def fetch_client_and_user_from_cookie
|
24
32
|
app_id = Facebooker2.app_id
|
25
33
|
if (hash_data = fb_cookie_hash_for_app_id(app_id)) and
|
26
34
|
fb_cookie_signature_correct?(fb_cookie_hash_for_app_id(app_id),Facebooker2.secret)
|
27
|
-
|
28
|
-
user = Mogli::User.new(:id=>hash_data["uid"])
|
29
|
-
user.client = @_current_facebook_client
|
30
|
-
fb_sign_in_user_and_client(user,client)
|
35
|
+
fb_create_user_and_client(hash_data["access_token"],hash_data["expires"],hash_data["uid"])
|
31
36
|
end
|
32
|
-
@_fb_user_fetched = true
|
33
37
|
end
|
34
38
|
|
39
|
+
def fb_create_user_and_client(token,expires,userid)
|
40
|
+
client = Mogli::Client.new(token,expires.to_i)
|
41
|
+
user = Mogli::User.new(:id=>userid)
|
42
|
+
fb_sign_in_user_and_client(user,client)
|
43
|
+
end
|
44
|
+
|
35
45
|
def fb_sign_in_user_and_client(user,client)
|
36
46
|
user.client = client
|
37
47
|
@_current_facebook_user = user
|
@@ -67,6 +77,36 @@ module Facebooker2
|
|
67
77
|
test_string += secret
|
68
78
|
Digest::MD5.hexdigest(test_string) == hash["sig"]
|
69
79
|
end
|
80
|
+
|
81
|
+
def fb_signed_request_json(encoded)
|
82
|
+
chars_to_add = 4-(encoded.size % 4)
|
83
|
+
encoded += ("=" * chars_to_add)
|
84
|
+
Base64.decode64(encoded)
|
85
|
+
end
|
86
|
+
|
87
|
+
def facebook_params
|
88
|
+
@facebook_param ||= fb_load_facebook_params
|
89
|
+
end
|
90
|
+
|
91
|
+
def fb_load_facebook_params
|
92
|
+
return {} if params[:signed_request].blank?
|
93
|
+
sig,encoded_json = params[:signed_request].split(".")
|
94
|
+
return {} unless fb_signed_request_sig_valid?(sig,encoded_json)
|
95
|
+
ActiveSupport::JSON.decode(fb_signed_request_json(encoded_json)).with_indifferent_access
|
96
|
+
end
|
97
|
+
|
98
|
+
def fb_signed_request_sig_valid?(sig,encoded)
|
99
|
+
base64 = Base64.encode64(HMAC::SHA256.digest(Facebooker2.secret,encoded))
|
100
|
+
#now make the url changes that facebook makes
|
101
|
+
url_escaped_base64 = base64.gsub(/=*\n?$/,"").tr("+/","-_")
|
102
|
+
sig == url_escaped_base64
|
103
|
+
end
|
104
|
+
|
105
|
+
def fetch_client_and_user_from_signed_request
|
106
|
+
if facebook_params[:oauth_token]
|
107
|
+
fb_create_user_and_client(facebook_params[:oauth_token],facebook_params[:expires],facebook_params[:user_id])
|
108
|
+
end
|
109
|
+
end
|
70
110
|
end
|
71
111
|
end
|
72
112
|
end
|
@@ -26,10 +26,10 @@ module Facebooker2
|
|
26
26
|
content_tag("fb:login-button",text,options.merge(:onlogin=>js))
|
27
27
|
end
|
28
28
|
|
29
|
-
def fb_login(
|
30
|
-
js =
|
29
|
+
def fb_login(options = {},&proc)
|
30
|
+
js = capture(&proc)
|
31
31
|
text = options.delete(:text)
|
32
|
-
content_tag("fb:login-button",text,options.merge(:onlogin=>js))
|
32
|
+
concat(content_tag("fb:login-button",text,options.merge(:onlogin=>js)))
|
33
33
|
end
|
34
34
|
|
35
35
|
#
|
@@ -2,6 +2,15 @@ module Facebooker2
|
|
2
2
|
module Rails
|
3
3
|
module Helpers
|
4
4
|
module Javascript
|
5
|
+
|
6
|
+
def fb_html_safe(str)
|
7
|
+
if str.respond_to?(:html_safe)
|
8
|
+
str.html_safe
|
9
|
+
else
|
10
|
+
str
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
5
14
|
def fb_connect_async_js(app_id=Facebooker2.app_id,options={},&proc)
|
6
15
|
opts = Hash.new(true).merge!(options)
|
7
16
|
cookie = opts[:cookie]
|
@@ -9,7 +18,6 @@ module Facebooker2
|
|
9
18
|
xfbml = opts[:xfbml]
|
10
19
|
extra_js = capture(&proc) if block_given?
|
11
20
|
js = <<-JAVASCRIPT
|
12
|
-
<div id="fb-root"></div>
|
13
21
|
<script>
|
14
22
|
window.fbAsyncInit = function() {
|
15
23
|
FB.init({
|
@@ -22,10 +30,13 @@ module Facebooker2
|
|
22
30
|
};
|
23
31
|
|
24
32
|
(function() {
|
33
|
+
var s = document.createElement('div');
|
34
|
+
s.setAttribute('id','fb-root');
|
35
|
+
document.documentElement.getElementsByTagName("body")[0].appendChild(s);
|
25
36
|
var e = document.createElement('script');
|
26
37
|
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
|
27
38
|
e.async = true;
|
28
|
-
|
39
|
+
s.appendChild(e);
|
29
40
|
}());
|
30
41
|
</script>
|
31
42
|
JAVASCRIPT
|
@@ -34,4 +45,4 @@ module Facebooker2
|
|
34
45
|
end
|
35
46
|
end
|
36
47
|
end
|
37
|
-
end
|
48
|
+
end
|
data/lib/facebooker2.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: facebooker2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Mangino
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-08-20 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,17 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.
|
23
|
+
version: 0.0.12
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: ruby-hmac
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
24
34
|
version:
|
25
35
|
description: Facebook Connect integration library for ruby and rails
|
26
36
|
email: mmangino@elevatedrails.com
|