facebooker2 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
@@ -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
|