rfacebook 0.9.7 → 0.9.8
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/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
|