rfacebook 0.9.7 → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README +12 -3
- data/lib/facebook_desktop_session.rb +77 -116
- data/lib/facebook_session.rb +282 -334
- data/lib/facebook_web_session.rb +28 -103
- data/lib/facepricot.rb +20 -22
- data/lib/rfacebook.rb +2 -0
- data/{lib/rfacebook_on_rails/view_extensions.rb → test/facebook_desktop_session_test.rb} +23 -39
- data/test/facebook_session_test_methods.rb +106 -0
- data/test/facebook_web_session_test.rb +48 -0
- data/test/test_helper.rb +216 -0
- metadata +55 -60
- data/lib/facebook_rails_controller_extensions.rb +0 -10
- data/lib/rfacebook_on_rails/controller_extensions.rb +0 -543
- data/lib/rfacebook_on_rails/model_extensions.rb +0 -203
- data/lib/rfacebook_on_rails/plugin/Rakefile.rb +0 -1
- data/lib/rfacebook_on_rails/plugin/init.rb +0 -139
- data/lib/rfacebook_on_rails/plugin/install.rb +0 -1
- data/lib/rfacebook_on_rails/plugin/rake.rb +0 -141
- data/lib/rfacebook_on_rails/plugin/uninstall.rb +0 -1
- data/lib/rfacebook_on_rails/session_extensions.rb +0 -202
- data/lib/rfacebook_on_rails/status_manager.rb +0 -309
- data/lib/rfacebook_on_rails/templates/debug_panel.rhtml +0 -220
- data/lib/rfacebook_on_rails/templates/exception_backtrace.rhtml +0 -97
data/test/test_helper.rb
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mocha'
|
4
|
+
require 'rfacebook'
|
5
|
+
|
6
|
+
|
7
|
+
module RFacebook
|
8
|
+
module Dummy
|
9
|
+
|
10
|
+
API_KEY = "dummykey123"
|
11
|
+
API_SECRET = "dummysecret456"
|
12
|
+
|
13
|
+
AUTH_CREATETOKEN_RESPONSE = <<-EOF
|
14
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
15
|
+
<auth_createToken_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">3e4a22bb2f5ed75114b0fc9995ea85f1</auth_createToken_response>
|
16
|
+
EOF
|
17
|
+
|
18
|
+
ERROR_RESPONSE = <<-EOF
|
19
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
20
|
+
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
21
|
+
<error_code>5</error_code>
|
22
|
+
<error_msg>Unauthorized source IP address (ip was: 10.1.2.3)</error_msg>
|
23
|
+
<request_args list="true">
|
24
|
+
<arg>
|
25
|
+
<key>method</key>
|
26
|
+
<value>facebook.friends.get</value>
|
27
|
+
</arg>
|
28
|
+
<arg>
|
29
|
+
<key>session_key</key>
|
30
|
+
<value>373443c857fcda2e410e349c-i7nF4PqX4IW4.</value>
|
31
|
+
</arg>
|
32
|
+
<arg>
|
33
|
+
<key>api_key</key>
|
34
|
+
<value>0289b21f46b2ee642d5c42145df5489f</value>
|
35
|
+
</arg>
|
36
|
+
<arg>
|
37
|
+
<key>call_id</key>
|
38
|
+
<value>1170813376.3544</value>
|
39
|
+
</arg>
|
40
|
+
<arg>
|
41
|
+
<key>v</key>
|
42
|
+
<value>1.0</value>
|
43
|
+
</arg>
|
44
|
+
<arg>
|
45
|
+
<key>sig</key>
|
46
|
+
<value>570dcc2b764578af350ea1e1622349a0</value>
|
47
|
+
</arg>
|
48
|
+
</request_args>
|
49
|
+
</error_response>
|
50
|
+
EOF
|
51
|
+
|
52
|
+
ERROR_RESPONSE_3 = <<-EOF
|
53
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
54
|
+
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
55
|
+
<error_code>3</error_code>
|
56
|
+
<error_msg>method does not exist</error_msg>
|
57
|
+
</error_response>
|
58
|
+
EOF
|
59
|
+
|
60
|
+
ERROR_RESPONSE_100 = <<-EOF
|
61
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
62
|
+
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
63
|
+
<error_code>100</error_code>
|
64
|
+
<error_msg>bad arguments</error_msg>
|
65
|
+
</error_response>
|
66
|
+
EOF
|
67
|
+
|
68
|
+
ERROR_RESPONSE_102 = <<-EOF
|
69
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
70
|
+
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
71
|
+
<error_code>102</error_code>
|
72
|
+
<error_msg>expired session</error_msg>
|
73
|
+
</error_response>
|
74
|
+
EOF
|
75
|
+
|
76
|
+
ERROR_RESPONSE_606 = <<-EOF
|
77
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
78
|
+
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
79
|
+
<error_code>606</error_code>
|
80
|
+
<error_msg>wrong number of arguments</error_msg>
|
81
|
+
</error_response>
|
82
|
+
EOF
|
83
|
+
|
84
|
+
AUTH_GETSESSION_RESPONSE = <<-EOF
|
85
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
86
|
+
<auth_getSession_response
|
87
|
+
xmlns="http://api.facebook.com/1.0/"
|
88
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
89
|
+
xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
90
|
+
<session_key>5f34e11bfb97c762e439e6a5-8055</session_key>
|
91
|
+
<uid>8055</uid>
|
92
|
+
<expires>1173309298</expires>
|
93
|
+
</auth_getSession_response>
|
94
|
+
EOF
|
95
|
+
|
96
|
+
GROUP_GETMEMBERS_RESPONSE = <<-EOF
|
97
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
98
|
+
<groups_getMembers_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
|
99
|
+
<members list="true">
|
100
|
+
<uid>4567</uid>
|
101
|
+
<uid>5678</uid>
|
102
|
+
<uid>6789</uid>
|
103
|
+
<uid>7890</uid>
|
104
|
+
</members>
|
105
|
+
<admins list="true">
|
106
|
+
<uid>1234567</uid>
|
107
|
+
</admins>
|
108
|
+
<officers list="true"/>
|
109
|
+
<not_replied list="true"/>
|
110
|
+
</groups_getMembers_response>
|
111
|
+
EOF
|
112
|
+
|
113
|
+
USERS_GETLOGGEDINUSER_RESPONSE = <<-EOF
|
114
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
115
|
+
<users_getLoggedInUser_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">1234567</users_getLoggedInUser_response>
|
116
|
+
EOF
|
117
|
+
|
118
|
+
USERS_GETINFO_RESPONSE = <<-EOF
|
119
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
120
|
+
<users_getInfo_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd" list="true">
|
121
|
+
<user>
|
122
|
+
<uid>8055</uid>
|
123
|
+
<about_me>This field perpetuates the glorification of the ego. Also, it has a character limit.</about_me>
|
124
|
+
<activities>Here: facebook, etc. There: Glee Club, a capella, teaching.</activities>
|
125
|
+
<affiliations list="true">
|
126
|
+
<affiliation>
|
127
|
+
<nid>50453093</nid>
|
128
|
+
<name>Facebook Developers</name>
|
129
|
+
<type>work</type>
|
130
|
+
<status/>
|
131
|
+
<year/>
|
132
|
+
</affiliation>
|
133
|
+
</affiliations>
|
134
|
+
<birthday>November 3</birthday>
|
135
|
+
<books>The Brothers K, GEB, Ken Wilber, Zen and the Art, Fitzgerald, The Emporer's New Mind, The Wonderful Story of Henry Sugar</books>
|
136
|
+
<current_location>
|
137
|
+
<city>Palo Alto</city>
|
138
|
+
<state>CA</state>
|
139
|
+
<country>United States</country>
|
140
|
+
<zip>94303</zip>
|
141
|
+
</current_location>
|
142
|
+
<education_history list="true">
|
143
|
+
<education_info>
|
144
|
+
<name>Harvard</name>
|
145
|
+
<year>2003</year>
|
146
|
+
<concentrations list="true">
|
147
|
+
<concentration>Applied Mathematics</concentration>
|
148
|
+
<concentration>Computer Science</concentration>
|
149
|
+
</concentrations>
|
150
|
+
</education_info>
|
151
|
+
</education_history>
|
152
|
+
<first_name>Dave</first_name>
|
153
|
+
<hometown_location>
|
154
|
+
<city>York</city>
|
155
|
+
<state>PA</state>
|
156
|
+
<country>United States</country>
|
157
|
+
<zip>0</zip>
|
158
|
+
</hometown_location>
|
159
|
+
<hs_info>
|
160
|
+
<hs1_name>Central York High School</hs1_name>
|
161
|
+
<hs2_name/>
|
162
|
+
<grad_year>1999</grad_year>
|
163
|
+
<hs1_id>21846</hs1_id>
|
164
|
+
<hs2_id>0</hs2_id>
|
165
|
+
</hs_info>
|
166
|
+
<is_app_user>1</is_app_user>
|
167
|
+
<has_added_app>1</has_added_app>
|
168
|
+
<interests>coffee, computers, the funny, architecture, code breaking,snowboarding, philosophy, soccer, talking to strangers</interests>
|
169
|
+
<last_name>Fetterman</last_name>
|
170
|
+
<meeting_for list="true">
|
171
|
+
<seeking>Friendship</seeking>
|
172
|
+
</meeting_for>
|
173
|
+
<meeting_sex list="true">
|
174
|
+
<sex>female</sex>
|
175
|
+
</meeting_sex>
|
176
|
+
<movies>Tommy Boy, Billy Madison, Fight Club, Dirty Work, Meet the Parents, My Blue Heaven, Office Space </movies>
|
177
|
+
<music>New Found Glory, Daft Punk, Weezer, The Crystal Method, Rage, the KLF, Green Day, Live, Coldplay, Panic at the Disco, Family Force 5</music>
|
178
|
+
<name>Dave Fetterman</name>
|
179
|
+
<notes_count>0</notes_count>
|
180
|
+
<pic>http://photos-055.facebook.com/ip007/profile3/1271/65/s8055_39735.jpg</pic>
|
181
|
+
<pic_big>http://photos-055.facebook.com/ip007/profile3/1271/65/n8055_39735.jpg</pic>
|
182
|
+
<pic_small>http://photos-055.facebook.com/ip007/profile3/1271/65/t8055_39735.jpg</pic>
|
183
|
+
<pic_square>http://photos-055.facebook.com/ip007/profile3/1271/65/q8055_39735.jpg</pic>
|
184
|
+
<political>Moderate</political>
|
185
|
+
<profile_update_time>1170414620</profile_update_time>
|
186
|
+
<quotes/>
|
187
|
+
<relationship_status>In a Relationship</relationship_status>
|
188
|
+
<religion/>
|
189
|
+
<sex>male</sex>
|
190
|
+
<significant_other_id xsi:nil="true"/>
|
191
|
+
<status>
|
192
|
+
<message/>
|
193
|
+
<time>0</time>
|
194
|
+
</status>
|
195
|
+
<timezone>-8</timezone>
|
196
|
+
<tv>cf. Bob Trahan</tv>
|
197
|
+
<wall_count>121</wall_count>
|
198
|
+
<work_history list="true">
|
199
|
+
<work_info>
|
200
|
+
<location>
|
201
|
+
<city>Palo Alto</city>
|
202
|
+
<state>CA</state>
|
203
|
+
<country>United States</country>
|
204
|
+
</location>
|
205
|
+
<company_name>Facebook</company_name>
|
206
|
+
<position>Software Engineer</position>
|
207
|
+
<description>Tech Lead, Facebook Platform</description>
|
208
|
+
<start_date>2006-01</start_date>
|
209
|
+
<end_date/>
|
210
|
+
</work_info>
|
211
|
+
</work_history>
|
212
|
+
</user>
|
213
|
+
</users_getInfo_response>
|
214
|
+
EOF
|
215
|
+
end
|
216
|
+
end
|
metadata
CHANGED
@@ -1,73 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0
|
3
|
-
specification_version: 1
|
4
2
|
name: rfacebook
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.9.
|
7
|
-
date: 2007-09-29 00:00:00 -04:00
|
8
|
-
summary: A Ruby interface to the Facebook API v1.0+. Works with RFacebook on Rails plugin (see http://rfacebook.rubyforge.org).
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: matt@livelearncode.com
|
12
|
-
homepage: http://livelearncode.com/
|
13
|
-
rubyforge_project: rfacebook
|
14
|
-
description:
|
15
|
-
autorequire: rfacebook
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.9.8
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Matt Pizzimenti
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
- lib/facebook_session.rb
|
35
|
-
- lib/facebook_web_session.rb
|
36
|
-
- lib/facepricot.rb
|
37
|
-
- lib/rfacebook_on_rails
|
38
|
-
- lib/rfacebook_on_rails/controller_extensions.rb
|
39
|
-
- lib/rfacebook_on_rails/model_extensions.rb
|
40
|
-
- lib/rfacebook_on_rails/plugin
|
41
|
-
- lib/rfacebook_on_rails/session_extensions.rb
|
42
|
-
- lib/rfacebook_on_rails/status_manager.rb
|
43
|
-
- lib/rfacebook_on_rails/templates
|
44
|
-
- lib/rfacebook_on_rails/view_extensions.rb
|
45
|
-
- lib/rfacebook_on_rails/plugin/init.rb
|
46
|
-
- lib/rfacebook_on_rails/plugin/install.rb
|
47
|
-
- lib/rfacebook_on_rails/plugin/rake.rb
|
48
|
-
- lib/rfacebook_on_rails/plugin/Rakefile.rb
|
49
|
-
- lib/rfacebook_on_rails/plugin/uninstall.rb
|
50
|
-
- lib/rfacebook_on_rails/templates/debug_panel.rhtml
|
51
|
-
- lib/rfacebook_on_rails/templates/exception_backtrace.rhtml
|
52
|
-
- README
|
53
|
-
test_files: []
|
54
|
-
|
55
|
-
rdoc_options: []
|
56
|
-
|
57
|
-
extra_rdoc_files:
|
58
|
-
- README
|
59
|
-
executables: []
|
60
|
-
|
61
|
-
extensions: []
|
8
|
+
autorequire: rfacebook
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
62
11
|
|
63
|
-
|
64
|
-
|
65
|
-
- Mocha version >= 0.5.3 (used for unit testing of the Gem and Rails Plugin)
|
12
|
+
date: 2008-01-08 00:00:00 -05:00
|
13
|
+
default_executable:
|
66
14
|
dependencies:
|
67
15
|
- !ruby/object:Gem::Dependency
|
68
16
|
name: hpricot
|
69
17
|
version_requirement:
|
70
|
-
version_requirements: !ruby/object:Gem::
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
19
|
requirements:
|
72
20
|
- - ">="
|
73
21
|
- !ruby/object:Gem::Version
|
@@ -76,9 +24,56 @@ dependencies:
|
|
76
24
|
- !ruby/object:Gem::Dependency
|
77
25
|
name: mocha
|
78
26
|
version_requirement:
|
79
|
-
version_requirements: !ruby/object:Gem::
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
28
|
requirements:
|
81
29
|
- - ">="
|
82
30
|
- !ruby/object:Gem::Version
|
83
31
|
version: 0.5.3
|
84
32
|
version:
|
33
|
+
description:
|
34
|
+
email: matt@livelearncode.com
|
35
|
+
executables: []
|
36
|
+
|
37
|
+
extensions: []
|
38
|
+
|
39
|
+
extra_rdoc_files:
|
40
|
+
- README
|
41
|
+
files:
|
42
|
+
- lib/facebook_desktop_session.rb
|
43
|
+
- lib/facebook_session.rb
|
44
|
+
- lib/facebook_web_session.rb
|
45
|
+
- lib/facepricot.rb
|
46
|
+
- lib/rfacebook.rb
|
47
|
+
- README
|
48
|
+
has_rdoc: true
|
49
|
+
homepage: http://www.livelearncode.com/
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
requirements:
|
68
|
+
- Hpricot version >= 0.6.0 (has better handling of XML than previous versions)
|
69
|
+
- Mocha version >= 0.5.3 (used for unit testing of the Gem and Rails Plugin)
|
70
|
+
rubyforge_project: rfacebook
|
71
|
+
rubygems_version: 1.0.1
|
72
|
+
signing_key:
|
73
|
+
specification_version: 2
|
74
|
+
summary: A Ruby interface to the Facebook API v1.0+. Works with RFacebook on Rails plugin (see http://rfacebook.rubyforge.org).
|
75
|
+
test_files:
|
76
|
+
- test/facebook_desktop_session_test.rb
|
77
|
+
- test/facebook_session_test_methods.rb
|
78
|
+
- test/facebook_web_session_test.rb
|
79
|
+
- test/test_helper.rb
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# This file is deprecated, but remains here for backward compatibility
|
2
|
-
require "rfacebook_on_rails/controller_extensions"
|
3
|
-
module RFacebook
|
4
|
-
module RailsControllerExtensions
|
5
|
-
def self.included(base)
|
6
|
-
RAILS_DEFAULT_LOGGER.info "** RFACEBOOK DEPRECATION NOTICE: direct use of RFacebook::RailsControllerExtensions (from facebook_rails_controller_extensions.rb) is deprecated, use the RFacebook on Rails plugin instead (http://rfacebook.rubyforge.org)"
|
7
|
-
base.send(:include, RFacebook::Rails::ControllerExtensions)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,543 +0,0 @@
|
|
1
|
-
# Copyright (c) 2007, Matt Pizzimenti (www.livelearncode.com)
|
2
|
-
# All rights reserved.
|
3
|
-
#
|
4
|
-
# Redistribution and use in source and binary forms, with or without modification,
|
5
|
-
# are permitted provided that the following conditions are met:
|
6
|
-
#
|
7
|
-
# Redistributions of source code must retain the above copyright notice,
|
8
|
-
# this list of conditions and the following disclaimer.
|
9
|
-
#
|
10
|
-
# Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
# this list of conditions and the following disclaimer in the documentation
|
12
|
-
# and/or other materials provided with the distribution.
|
13
|
-
#
|
14
|
-
# Neither the name of the original author nor the names of contributors
|
15
|
-
# may be used to endorse or promote products derived from this software
|
16
|
-
# without specific prior written permission.
|
17
|
-
#
|
18
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
21
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
22
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
-
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
-
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
-
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
-
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
#
|
29
|
-
|
30
|
-
require "facebook_web_session"
|
31
|
-
require "rfacebook_on_rails/status_manager"
|
32
|
-
|
33
|
-
module RFacebook
|
34
|
-
module Rails
|
35
|
-
module ControllerExtensions
|
36
|
-
|
37
|
-
# :section: StandardErrors
|
38
|
-
|
39
|
-
class APIKeyNeededStandardError < StandardError; end # :nodoc:
|
40
|
-
class APISecretNeededStandardError < StandardError; end # :nodoc:
|
41
|
-
class APICanvasPathNeededStandardError < StandardError; end # :nodoc:
|
42
|
-
class APICallbackNeededStandardError < StandardError; end # :nodoc:
|
43
|
-
class APIFinisherNeededStandardError < StandardError; end # :nodoc:
|
44
|
-
|
45
|
-
# :section: Template Methods (must be implemented by concrete subclass)
|
46
|
-
|
47
|
-
def facebook_api_key
|
48
|
-
raise APIKeyNeededStandardError, "RFACEBOOK ERROR: when using the RFacebook on Rails plugin, please be sure that you have a facebook.yml file with 'key' defined"
|
49
|
-
end
|
50
|
-
|
51
|
-
def facebook_api_secret
|
52
|
-
raise APISecretNeededStandardError, "RFACEBOOK ERROR: when using the RFacebook on Rails plugin, please be sure that you have a facebook.yml file with 'secret' defined"
|
53
|
-
end
|
54
|
-
|
55
|
-
def facebook_canvas_path
|
56
|
-
raise APICanvasPathNeededStandardError, "RFACEBOOK ERROR: when using the RFacebook on Rails plugin, please be sure that you have a facebook.yml file with 'canvas_path' defined"
|
57
|
-
end
|
58
|
-
|
59
|
-
def facebook_callback_path
|
60
|
-
raise APICallbackNeededStandardError, "RFACEBOOK ERROR: when using the RFacebook on Rails plugin, please be sure that you have a facebook.yml file with 'callback_path' defined"
|
61
|
-
end
|
62
|
-
|
63
|
-
def finish_facebook_login
|
64
|
-
raise APIFinisherNeededStandardError, "RFACEBOOK ERROR: in an external Facebook application, you should define finish_facebook_login in your controller (often this is used to redirect to a 'login success' page, but it can also simply do nothing)"
|
65
|
-
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
# :section: Special Variables
|
70
|
-
|
71
|
-
# Function: fbparams
|
72
|
-
# Accessor for all params beginning with "fb_sig_"
|
73
|
-
#
|
74
|
-
# Returns:
|
75
|
-
# A Hash of those parameters, with the fb_sig_ stripped from the keys
|
76
|
-
def fbparams
|
77
|
-
|
78
|
-
# try to get fbparams from the params hash
|
79
|
-
if (!@fbparams || @fbparams.length <= 0)
|
80
|
-
dup_params = (self.params || {}).dup
|
81
|
-
@fbparams = rfacebook_session_holder.get_fb_sig_params(dup_params)
|
82
|
-
end
|
83
|
-
|
84
|
-
# else, try to get fbparams from the cookies hash
|
85
|
-
if (!@fbparams || @fbparams.length <= 0)
|
86
|
-
dup_cookies = (self.cookies || {}).dup
|
87
|
-
@fbparams = rfacebook_session_holder.get_fb_sig_params(dup_cookies)
|
88
|
-
end
|
89
|
-
|
90
|
-
# finally, if we are an iframe app we may have saved the fbparams
|
91
|
-
# to the session for safekeeping
|
92
|
-
if (!@fbparams || @fbparams.length <= 0)
|
93
|
-
@fbparams = session[:rfacebook_session_iframe_fbparams] || {}
|
94
|
-
end
|
95
|
-
|
96
|
-
return @fbparams
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
# Function: fbsession
|
101
|
-
# Accessor for a FacebookWebSession that has been activated, either in the Canvas
|
102
|
-
# (via fb_sig parameters) or in an external app (via an auth_token).
|
103
|
-
#
|
104
|
-
# Returns:
|
105
|
-
# A FacebookWebSession. You may want to check is_valid? before using it.
|
106
|
-
def fbsession
|
107
|
-
|
108
|
-
# do a check to ensure that we nil out the rfacebook_session in case there is a new user visiting
|
109
|
-
if session[:rfacebook_session] and fbparams["session_key"] and session[:rfacebook_session].session_key != fbparams["session_key"]
|
110
|
-
session[:rfacebook_session] = nil
|
111
|
-
end
|
112
|
-
|
113
|
-
# if we are in the canvas, iframe, or mock ajax, we should be able to activate the session here
|
114
|
-
if (!rfacebook_session_holder.is_valid? and (in_facebook_canvas? or in_facebook_frame? or in_mock_ajax?))
|
115
|
-
|
116
|
-
# then try to activate it somehow (or retrieve from previous state)
|
117
|
-
# these might be nil
|
118
|
-
facebookUid = fbparams["user"]
|
119
|
-
facebookSessionKey = fbparams["session_key"]
|
120
|
-
expirationTime = fbparams["expires"]
|
121
|
-
|
122
|
-
if (facebookUid and facebookSessionKey and expirationTime)
|
123
|
-
# we have the user id and key from the fb_sig_ params, activate the session
|
124
|
-
rfacebook_session_holder.activate_with_previous_session(facebookSessionKey, facebookUid, expirationTime)
|
125
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Activated session from inside the canvas (user=#{facebookUid}, session_key=#{facebookSessionKey}, expires=#{expirationTime})"
|
126
|
-
else
|
127
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK WARNING: Tried to get a valid Facebook session from POST params, but failed"
|
128
|
-
end
|
129
|
-
|
130
|
-
end
|
131
|
-
|
132
|
-
# if we still don't have a session, check the Rails session
|
133
|
-
# (used for external and iframe apps when fb_sig POST params weren't present)
|
134
|
-
if (!rfacebook_session_holder.is_valid? and session[:rfacebook_session] and session[:rfacebook_session].is_valid?)
|
135
|
-
|
136
|
-
# grab saved Facebook session from Rails session
|
137
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: grabbing Facebook session from Rails session"
|
138
|
-
@rfacebook_session_holder = session[:rfacebook_session]
|
139
|
-
@rfacebook_session_holder.logger = RAILS_DEFAULT_LOGGER
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
# if all went well, we should definitely have a valid Facebook session object
|
144
|
-
return rfacebook_session_holder
|
145
|
-
|
146
|
-
end
|
147
|
-
|
148
|
-
# :section: Helpful Methods
|
149
|
-
|
150
|
-
# DEPRECATED
|
151
|
-
def facebook_redirect_to(url) # :nodoc:
|
152
|
-
RAILS_DEFAULT_LOGGER.info "** RFACEBOOK DEPRECATION NOTICE: facebook_redirect_to is deprecated in RFacebook. Instead, you can use redirect_to like any Rails app."
|
153
|
-
if in_facebook_canvas?
|
154
|
-
render :text => "<fb:redirect url=\"#{url}\" />"
|
155
|
-
elsif url =~ /^https?:\/\/([^\/]*\.)?facebook\.com(:\d+)?/i
|
156
|
-
render :text => "<script type=\"text/javascript\">\ntop.location.href = \"#{url}\";\n</script>";
|
157
|
-
else
|
158
|
-
redirect_to url
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
def in_facebook_canvas?
|
163
|
-
in_canvas = params["fb_sig_in_canvas"] || fbparams["in_canvas"]
|
164
|
-
return (in_canvas == "1" || in_canvas == true)
|
165
|
-
end
|
166
|
-
|
167
|
-
def in_facebook_frame?
|
168
|
-
in_iframe = params["fb_sig_in_iframe"] || fbparams["in_iframe"]
|
169
|
-
return (in_iframe == "1" || in_iframe == true)
|
170
|
-
end
|
171
|
-
|
172
|
-
def in_mock_ajax?
|
173
|
-
is_mockajax = params["fb_sig_is_mockajax"]
|
174
|
-
return (is_mockajax == "1" || is_mockajax == true || params["fb_mockajax_url"] != nil)
|
175
|
-
end
|
176
|
-
|
177
|
-
def in_ajax?
|
178
|
-
is_ajax = params["fb_sig_is_ajax"]
|
179
|
-
return (is_ajax == "1" || is_ajax == true)
|
180
|
-
end
|
181
|
-
|
182
|
-
def in_external_app?
|
183
|
-
# FIXME: once you click away in an iframe app, you are considered to be an external app
|
184
|
-
# TODO: read up on the hacks for avoiding nested iframes
|
185
|
-
return (params["fb_sig"] == nil and !in_facebook_frame?)
|
186
|
-
end
|
187
|
-
|
188
|
-
def added_facebook_application?
|
189
|
-
addedApp = params["fb_sig_added"] || fbparams["added"]
|
190
|
-
return (addedApp == "1" || addedApp == true)
|
191
|
-
end
|
192
|
-
|
193
|
-
def facebook_platform_signature_verified?
|
194
|
-
return (fbparams and fbparams.size > 0)
|
195
|
-
end
|
196
|
-
|
197
|
-
# TODO: define something along the lines of is_logged_in_to_facebook? that returns fbsession.is_ready? perhaps
|
198
|
-
|
199
|
-
################################################################################################
|
200
|
-
################################################################################################
|
201
|
-
# :section: before_filters
|
202
|
-
################################################################################################
|
203
|
-
|
204
|
-
def handle_facebook_login
|
205
|
-
|
206
|
-
# we only do this when we don't have the fb_sig to give us a session
|
207
|
-
# in these cases, we always check to see if we got an auth_token
|
208
|
-
# from redirecting to login to facebook
|
209
|
-
if (!facebook_platform_signature_verified? and params["auth_token"])
|
210
|
-
|
211
|
-
# activate with the auth token
|
212
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: attempting to create a new Facebook session from auth_token"
|
213
|
-
staleToken = false
|
214
|
-
begin
|
215
|
-
|
216
|
-
# try to use the auth_token
|
217
|
-
rfacebook_session_holder.activate_with_token(params["auth_token"])
|
218
|
-
|
219
|
-
rescue StandardError => e
|
220
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Tried to use a stale auth_token"
|
221
|
-
staleToken = true
|
222
|
-
end
|
223
|
-
|
224
|
-
# template method call upon success
|
225
|
-
if (rfacebook_session_holder.is_valid? and !staleToken)
|
226
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Login was successful, calling finish_facebook_login"
|
227
|
-
if in_external_app?
|
228
|
-
finish_facebook_login
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
# warning logs
|
233
|
-
if !rfacebook_session_holder.is_valid?
|
234
|
-
RAILS_DEFAULT_LOGGER.info "** RFACEBOOK WARNING: Facebook session could not be activated with auth_token"
|
235
|
-
end
|
236
|
-
|
237
|
-
end
|
238
|
-
|
239
|
-
return true
|
240
|
-
end
|
241
|
-
|
242
|
-
def require_facebook_login
|
243
|
-
|
244
|
-
# now finish it off depending on whether we are in canvas, iframe, or external app
|
245
|
-
if !performed?
|
246
|
-
|
247
|
-
# try to get the session
|
248
|
-
sess = fbsession
|
249
|
-
|
250
|
-
# handle invalid sessions by forcing the user to log in
|
251
|
-
if !sess.is_valid?
|
252
|
-
|
253
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Session is not valid"
|
254
|
-
|
255
|
-
if in_external_app?
|
256
|
-
|
257
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Redirecting to login for external app"
|
258
|
-
redirect_to sess.get_login_url
|
259
|
-
return false
|
260
|
-
|
261
|
-
elsif (!fbparams or fbparams.size == 0)
|
262
|
-
|
263
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK WARNING: Failed to activate due to a bad API key or API secret"
|
264
|
-
render :text => facebook_debug_panel
|
265
|
-
return false
|
266
|
-
|
267
|
-
else
|
268
|
-
|
269
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Redirecting to login for canvas app"
|
270
|
-
redirect_to sess.get_login_url(:canvas=>true)
|
271
|
-
return false
|
272
|
-
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
276
|
-
|
277
|
-
return true
|
278
|
-
end
|
279
|
-
|
280
|
-
def require_facebook_install
|
281
|
-
if (in_facebook_canvas? or in_facebook_frame?)
|
282
|
-
if (!fbsession.is_valid? or !added_facebook_application?)
|
283
|
-
redirect_to fbsession.get_install_url
|
284
|
-
return false
|
285
|
-
end
|
286
|
-
else
|
287
|
-
RAILS_DEFAULT_LOGGER.info "** RFACEBOOK WARNING: require_facebook_install is not intended for external applications, using require_facebook_login instead"
|
288
|
-
return require_facebook_login
|
289
|
-
end
|
290
|
-
return true
|
291
|
-
end
|
292
|
-
|
293
|
-
# TODO: check this out
|
294
|
-
# def require_facebook_install
|
295
|
-
# if in_facebook_frame? and not added_facebook_application?
|
296
|
-
# render :text => %Q(<script language="javascript">top.location.href="#{fbsession.get_install_url}&next=#{request.path.gsub(/#{facebook_callback_path}/, "")}"</script>)
|
297
|
-
# end
|
298
|
-
# end
|
299
|
-
|
300
|
-
################################################################################################
|
301
|
-
################################################################################################
|
302
|
-
# :section: Facebook Debug Panel
|
303
|
-
################################################################################################
|
304
|
-
|
305
|
-
def render_with_facebook_debug_panel(options={})
|
306
|
-
begin
|
307
|
-
renderedOutput = render_to_string(options)
|
308
|
-
rescue Exception => e
|
309
|
-
renderedOutput = facebook_canvas_backtrace(e)
|
310
|
-
end
|
311
|
-
render_text "#{facebook_debug_panel}#{renderedOutput}"
|
312
|
-
end
|
313
|
-
|
314
|
-
def facebook_debug_panel(options={})
|
315
|
-
template = File.read(File.dirname(__FILE__) + "/templates/debug_panel.rhtml")
|
316
|
-
return ERB.new(template).result(Proc.new{})
|
317
|
-
end
|
318
|
-
|
319
|
-
# TODO: implement this in version 1.0
|
320
|
-
# def rescue_action(exception)
|
321
|
-
# # TODO: for security, we only do this in development in the canvas
|
322
|
-
# if (in_facebook_canvas? and RAILS_ENV == "development")
|
323
|
-
# render_text "#{facebook_debug_panel}#{facebook_canvas_backtrace(exception)}"
|
324
|
-
# else
|
325
|
-
# # otherwise, do the default
|
326
|
-
# super
|
327
|
-
# end
|
328
|
-
# end
|
329
|
-
|
330
|
-
def facebook_canvas_backtrace(exception)
|
331
|
-
|
332
|
-
# TODO: potentially integrate features from Evan Weaver's facebook_exceptions
|
333
|
-
rfacebookBacktraceLines = []
|
334
|
-
exception.backtrace.each do |line|
|
335
|
-
|
336
|
-
# escape HTML
|
337
|
-
cleanLine = line.gsub(RAILS_ROOT, "").gsub("<", "<").gsub(">", ">")
|
338
|
-
|
339
|
-
# split up these lines by carriage return
|
340
|
-
pieces = cleanLine.split("\n")
|
341
|
-
if (pieces and pieces.size> 0)
|
342
|
-
pieces.each do |piece|
|
343
|
-
if matches = /.*[\/\\]+((.*)\:([0-9]+)\:\s*in\s*\`(.*)\')/.match(piece)
|
344
|
-
# for each parsed line, add to the array for later rendering in the template
|
345
|
-
rfacebookBacktraceLines << {
|
346
|
-
:filename => matches[2],
|
347
|
-
:line => matches[3],
|
348
|
-
:method => matches[4],
|
349
|
-
:rawsummary => piece,
|
350
|
-
}
|
351
|
-
end
|
352
|
-
end
|
353
|
-
end
|
354
|
-
end
|
355
|
-
|
356
|
-
# render to the ERB template
|
357
|
-
template = File.read(File.dirname(__FILE__) + "/templates/exception_backtrace.rhtml")
|
358
|
-
return ERB.new(template).result(Proc.new{})
|
359
|
-
|
360
|
-
end
|
361
|
-
|
362
|
-
def facebook_status_manager # :nodoc:
|
363
|
-
checks = [
|
364
|
-
SessionStatusCheck.new(self),
|
365
|
-
(FacebookParamsStatusCheck.new(self) unless (!in_facebook_canvas? and !in_facebook_frame?)),
|
366
|
-
InCanvasStatusCheck.new(self),
|
367
|
-
InFrameStatusCheck.new(self),
|
368
|
-
(CanvasPathStatusCheck.new(self) unless (!in_facebook_canvas? or !in_facebook_frame?)),
|
369
|
-
(CallbackPathStatusCheck.new(self) unless (!in_facebook_canvas? or !in_facebook_frame?)),
|
370
|
-
(FinishFacebookLoginStatusCheck.new(self) unless (in_facebook_canvas? or in_facebook_frame?)),
|
371
|
-
APIKeyStatusCheck.new(self),
|
372
|
-
APISecretStatusCheck.new(self)
|
373
|
-
].compact
|
374
|
-
return StatusManager.new(checks)
|
375
|
-
end
|
376
|
-
|
377
|
-
################################################################################################
|
378
|
-
################################################################################################
|
379
|
-
# :section: RFacebook Private Methods
|
380
|
-
################################################################################################
|
381
|
-
|
382
|
-
def rfacebook_session_holder # :nodoc:
|
383
|
-
|
384
|
-
if (@rfacebook_session_holder == nil)
|
385
|
-
@rfacebook_session_holder = FacebookWebSession.new(facebook_api_key, facebook_api_secret)
|
386
|
-
@rfacebook_session_holder.logger = RAILS_DEFAULT_LOGGER
|
387
|
-
end
|
388
|
-
|
389
|
-
return @rfacebook_session_holder
|
390
|
-
|
391
|
-
end
|
392
|
-
|
393
|
-
def rfacebook_persist_session_to_rails # :nodoc:
|
394
|
-
if (!in_facebook_canvas? and rfacebook_session_holder.is_valid?)
|
395
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: persisting Facebook session information into Rails session"
|
396
|
-
session[:rfacebook_session] = @rfacebook_session_holder.dup # TODO: do we need dup here anymore?
|
397
|
-
if in_facebook_frame?
|
398
|
-
# we need iframe apps to remember they are iframe apps
|
399
|
-
session[:rfacebook_session_iframe_fbparams] = fbparams
|
400
|
-
end
|
401
|
-
end
|
402
|
-
end
|
403
|
-
|
404
|
-
|
405
|
-
################################################################################################
|
406
|
-
################################################################################################
|
407
|
-
# :section: URL Management
|
408
|
-
################################################################################################
|
409
|
-
|
410
|
-
def url_for__RFACEBOOK(options={}, *parameters) # :nodoc:
|
411
|
-
|
412
|
-
# fix problems that some Rails installations had with sending nil options
|
413
|
-
options ||= {}
|
414
|
-
|
415
|
-
# use special URL rewriting when inside the canvas
|
416
|
-
# setting the full_callback option to true will override this
|
417
|
-
# and force usage of regular Rails rewriting
|
418
|
-
if options.is_a? Hash
|
419
|
-
if options[:mock_ajax]
|
420
|
-
RAILS_DEFAULT_LOGGER.info "** RFACEBOOK DEPRECATION WARNING: don't use :mock_ajax => true in your link_to anymore. Instead, use :full_callback => true."
|
421
|
-
end
|
422
|
-
fullCallback = (options[:full_callback] == true) ? true : false
|
423
|
-
options.delete(:full_callback)
|
424
|
-
end
|
425
|
-
|
426
|
-
if ((in_facebook_canvas? or in_mock_ajax? or in_ajax?) and !fullCallback) #TODO: do something separate for in_facebook_frame?
|
427
|
-
|
428
|
-
if options.is_a? Hash
|
429
|
-
options[:only_path] = true if options[:only_path].nil?
|
430
|
-
end
|
431
|
-
|
432
|
-
# try to get a regular URL
|
433
|
-
path = url_for__ALIASED(options, *parameters)
|
434
|
-
|
435
|
-
# replace anything that references the callback with the
|
436
|
-
# Facebook canvas equivalent (apps.facebook.com/*)
|
437
|
-
if path.starts_with?(self.facebook_callback_path)
|
438
|
-
path.sub!(self.facebook_callback_path, self.facebook_canvas_path)
|
439
|
-
path = "http://apps.facebook.com#{path}"
|
440
|
-
elsif "#{path}/".starts_with?(self.facebook_callback_path)
|
441
|
-
path.sub!(self.facebook_callback_path.chop, self.facebook_canvas_path.chop)
|
442
|
-
path = "http://apps.facebook.com#{path}"
|
443
|
-
elsif (path.starts_with?("http://www.facebook.com") or path.starts_with?("https://www.facebook.com"))
|
444
|
-
# be sure that URLs that go to some other Facebook service redirect back to the canvas
|
445
|
-
if path.include?("?")
|
446
|
-
path = "#{path}&canvas=true"
|
447
|
-
else
|
448
|
-
path = "#{path}?canvas=true"
|
449
|
-
end
|
450
|
-
elsif (!path.starts_with?("http://") and !path.starts_with?("https://"))
|
451
|
-
# default to a full URL (will link externally)
|
452
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: failed to get canvas-friendly URL ("+path+") for ["+options.inspect+"], creating an external URL instead"
|
453
|
-
path = "#{request.protocol}#{request.host}:#{request.port}#{path}"
|
454
|
-
end
|
455
|
-
|
456
|
-
# full callback rewriting
|
457
|
-
elsif fullCallback
|
458
|
-
options[:only_path] = true
|
459
|
-
path = "#{request.protocol}#{request.host}:#{request.port}#{url_for__ALIASED(options, *parameters)}"
|
460
|
-
|
461
|
-
# regular Rails rewriting
|
462
|
-
else
|
463
|
-
path = url_for__ALIASED(options, *parameters)
|
464
|
-
end
|
465
|
-
|
466
|
-
return path
|
467
|
-
end
|
468
|
-
|
469
|
-
def redirect_to__RFACEBOOK(options = {}, *parameters) # :nodoc:
|
470
|
-
|
471
|
-
# get the url
|
472
|
-
redirectUrl = url_for(options, *parameters)
|
473
|
-
|
474
|
-
# canvas redirect
|
475
|
-
if in_facebook_canvas?
|
476
|
-
|
477
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Canvas redirect to #{redirectUrl}"
|
478
|
-
render :text => "<fb:redirect url=\"#{redirectUrl}\" />"
|
479
|
-
|
480
|
-
# iframe redirect
|
481
|
-
elsif redirectUrl.match(/^https?:\/\/([^\/]*\.)?facebook\.com(:\d+)?/i)
|
482
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: iframe redirect to #{redirectUrl}"
|
483
|
-
render :text => %Q(<script type="text/javascript">\ntop.location.href='#{redirectUrl}';\n</script>)
|
484
|
-
|
485
|
-
# otherwise, we only need to do a standard redirect
|
486
|
-
else
|
487
|
-
RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Regular redirect_to"
|
488
|
-
redirect_to__ALIASED(options, *parameters)
|
489
|
-
end
|
490
|
-
end
|
491
|
-
|
492
|
-
|
493
|
-
################################################################################################
|
494
|
-
################################################################################################
|
495
|
-
# :section: Extension Helpers
|
496
|
-
################################################################################################
|
497
|
-
|
498
|
-
CLASSES_EXTENDED = [] # :nodoc:
|
499
|
-
|
500
|
-
def self.included(base) # :nodoc:
|
501
|
-
|
502
|
-
# check for a double include
|
503
|
-
doubleInclude = false
|
504
|
-
CLASSES_EXTENDED.each do |klass|
|
505
|
-
if base.allocate.is_a?(klass)
|
506
|
-
doubleInclude = true
|
507
|
-
end
|
508
|
-
end
|
509
|
-
|
510
|
-
if doubleInclude
|
511
|
-
RAILS_DEFAULT_LOGGER.info "** RFACEBOOK WARNING: detected double-include of RFacebook controller extensions. Please see instructions for RFacebook on Rails plugin usage (http://rfacebook.rubyforge.org). You may be including the deprecated RFacebook::RailsControllerExtensions in addition to the plugin."
|
512
|
-
|
513
|
-
else
|
514
|
-
|
515
|
-
# keep track that we have already extended this class
|
516
|
-
CLASSES_EXTENDED << base
|
517
|
-
|
518
|
-
# we need to use an eval since we will be overriding ActionController::Base methods
|
519
|
-
# and we need to be able to call the originals
|
520
|
-
base.class_eval '
|
521
|
-
alias_method(:url_for__ALIASED, :url_for)
|
522
|
-
alias_method(:url_for, :url_for__RFACEBOOK)
|
523
|
-
|
524
|
-
alias_method(:redirect_to__ALIASED, :redirect_to)
|
525
|
-
alias_method(:redirect_to, :redirect_to__RFACEBOOK)
|
526
|
-
'
|
527
|
-
|
528
|
-
# ensure that every action handles facebook login
|
529
|
-
base.before_filter(:handle_facebook_login)
|
530
|
-
|
531
|
-
# ensure that we persist the Facebook session into the Rails session (if possible)
|
532
|
-
base.after_filter(:rfacebook_persist_session_to_rails)
|
533
|
-
|
534
|
-
# fix third party cookies in IE
|
535
|
-
base.before_filter{ |c| c.headers['P3P'] = %|CP="NOI DSP COR NID ADMa OPTa OUR NOR"| }
|
536
|
-
|
537
|
-
end
|
538
|
-
end
|
539
|
-
|
540
|
-
|
541
|
-
end
|
542
|
-
end
|
543
|
-
end
|