rplatform-rails 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,218 @@
1
+ # AUTHORS:
2
+ # - Curtis Edmond (www.okwithfailure.com)
3
+ # thanks to matt for rfacebook
4
+ # - Matt Pizzimenti (www.livelearncode.com)
5
+
6
+ # LICENSE:
7
+ # Redistribution and use in source and binary forms, with or without modification,
8
+ # are permitted provided that the following conditions are met:
9
+ #
10
+ # Redistributions of source code must retain the above copyright notice,
11
+ # this list of conditions and the following disclaimer.
12
+ #
13
+ # Redistributions in binary form must reproduce the above copyright notice,
14
+ # this list of conditions and the following disclaimer in the documentation
15
+ # and/or other materials provided with the distribution.
16
+ #
17
+ # Neither the name of the original author nor the names of contributors
18
+ # may be used to endorse or promote products derived from this software
19
+ # without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+
33
+ module RPlatform
34
+ module Rails
35
+ module ModelExtensions
36
+
37
+ ################################################################################################
38
+ ################################################################################################
39
+ # :section: Core API variables
40
+ ################################################################################################
41
+
42
+ def facebook_api_key(network)
43
+ NETWORKS[network]["key"] || super
44
+ end
45
+
46
+ def facebook_api_secret(network)
47
+ NETWORKS[network]["secret"] || super
48
+ end
49
+
50
+ ################################################################################################
51
+ ################################################################################################
52
+ # :section: Method mixing
53
+ ################################################################################################
54
+
55
+ def self.included(base) # :nodoc:
56
+ base.extend ActsAsMethods
57
+ end
58
+
59
+ module ActsAsMethods # :nodoc:all
60
+ def acts_as_facebook_user
61
+ RAILS_DEFAULT_LOGGER.info "** RFACEBOOK DEPRECATION WARNING: acts_as_facebook_user will probably be deprecated in a future version of the RFacebook plugin"
62
+ # TODO: remove the acts_as_facebook_user or at least update it
63
+ include RPlatform::Rails::ModelExtensions::ActsAsFacebookUser::InstanceMethods
64
+ extend RPlatform::Rails::ModelExtensions::ActsAsFacebookUser::ClassMethods
65
+ end
66
+ end
67
+
68
+
69
+ ##################################################################
70
+ ##################################################################
71
+ # :section: Acts As Facebook User
72
+ ##################################################################
73
+ module ActsAsFacebookUser
74
+
75
+ ACTORS = [] # holds a reference to all classes that have ActsAsFacebookUser injected
76
+
77
+ FIELDS = [
78
+ "about_me",
79
+ "activities",
80
+ "affiliations",
81
+ "birthday",
82
+ "books",
83
+ "current_location",
84
+ "education_history",
85
+ "name",
86
+ "first_name",
87
+ "last_name",
88
+ "hometown_location",
89
+ "hs_info",
90
+ "interests",
91
+ "relationship_status",
92
+ "meeting_for",
93
+ "meeting_sex",
94
+ "movies",
95
+ "music",
96
+ "notes_count",
97
+ "political",
98
+ "profile_update_time",
99
+ "quotes",
100
+ "religion",
101
+ "sex",
102
+ "significant_other_id",
103
+ "status",
104
+ "timezone",
105
+ "tv",
106
+ "wall_count",
107
+ "work_history",
108
+ "pic",
109
+ "pic_big",
110
+ "pic_small",
111
+ "pic_square"
112
+ ]
113
+
114
+
115
+ ######################
116
+ module ClassMethods
117
+
118
+ def find_or_create_by_facebook_session(options={})
119
+ RAILS_DEFAULT_LOGGER.info "** RFACEBOOK DEPRECATION WARNING: acts_as_facebook_user will probably be deprecated in a future version of the RFacebook plugin"
120
+
121
+ # parse the options (for backwards compatibility, options MIGHT be a FacebookWebSession)
122
+ if options.is_a?(RPlatform::FacebookWebSession)
123
+ fbsession = options
124
+ options = {}
125
+ else
126
+ fbsession = options[:facebook_session]
127
+ end
128
+
129
+ # check that we have an fbsession
130
+ unless fbsession.is_a?(Rplatform::FacebookWebSession)
131
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: find_or_create_by_facebook_session needs a :facebook_session specified"
132
+ return nil
133
+ end
134
+
135
+ # if the session is ready to use...
136
+ if fbsession.ready?
137
+
138
+ # find or create a user
139
+ instance = find_by_facebook_uid(fbsession.session_user_id) || self.new(options)
140
+
141
+ # update session info
142
+ instance.facebook_session = fbsession
143
+
144
+ # update (or create) the object and return it
145
+ if !instance.save
146
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: failed to update or create the Facebook user object in the database"
147
+ return nil
148
+ end
149
+ return instance
150
+
151
+ # session was not ready
152
+ else
153
+ RAILS_DEFAULT_LOGGER.info "** RFACEBOOK WARNING: tried to use an inactive session for acts_as_facebook_user (in find_or_create_by_facebook_session)"
154
+ return nil
155
+ end
156
+
157
+ end
158
+
159
+ end
160
+
161
+ ######################
162
+ module InstanceMethods
163
+
164
+ # TODO: to help developers stay within the TOS, we should have a method in here like "with_facebook_scope(fbsession){...}"
165
+
166
+ def facebook_session(network='facebook')
167
+ if !@facebook_session
168
+ @facebook_session = FacebookWebSession.new(self.facebook_api_key(network), self.facebook_api_secret(network))
169
+ begin
170
+ @facebook_session.activate_with_previous_session(self.facebook_session_key, self.facebook_uid)
171
+ rescue
172
+ # not a valid facebook session, should we nil it out?
173
+ end
174
+ end
175
+ return @facebook_session
176
+ end
177
+
178
+ def facebook_session=(sess)
179
+ @facebook_session = sess
180
+ self.facebook_session_key = @facebook_session.session_key
181
+ self.facebook_uid = @facebook_session.session_user_id
182
+ end
183
+
184
+ def has_infinite_session_key?
185
+ # TODO: this check should really look at expires
186
+ return self.facebook_session_key != nil
187
+ end
188
+
189
+ def self.included(base) # :nodoc:
190
+ ActsAsFacebookUser::ACTORS << base
191
+ ActsAsFacebookUser::FIELDS.each do |fieldname|
192
+ # TODO: do getInfo caching
193
+ base.class_eval <<-EOF
194
+
195
+ def #{fieldname}
196
+ if facebook_session.ready?
197
+ return facebook_session.users_getInfo(
198
+ :uids => [facebook_uid],
199
+ :fields => ActsAsFacebookUser::FIELDS).user.send(:#{fieldname})
200
+ else
201
+ return nil
202
+ end
203
+ end
204
+
205
+ EOF
206
+ end
207
+ end
208
+
209
+ end
210
+
211
+ end
212
+ ##################################################################
213
+ ##################################################################
214
+
215
+
216
+ end
217
+ end
218
+ end
@@ -0,0 +1,198 @@
1
+ # AUTHORS:
2
+ # - Curtis Edmond (www.okwithfailure.com)
3
+ # thanks to matt for rfacebook
4
+ # - Matt Pizzimenti (www.livelearncode.com)
5
+
6
+ # LICENSE:
7
+ # Redistribution and use in source and binary forms, with or without modification,
8
+ # are permitted provided that the following conditions are met:
9
+ #
10
+ # Redistributions of source code must retain the above copyright notice,
11
+ # this list of conditions and the following disclaimer.
12
+ #
13
+ # Redistributions in binary form must reproduce the above copyright notice,
14
+ # this list of conditions and the following disclaimer in the documentation
15
+ # and/or other materials provided with the distribution.
16
+ #
17
+ # Neither the name of the original author nor the names of contributors
18
+ # may be used to endorse or promote products derived from this software
19
+ # without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ require "digest/md5"
33
+ require "cgi"
34
+
35
+ module RPlatform::Rails::SessionExtensions # :nodoc:
36
+
37
+ # :section: New Methods
38
+ def force_to_be_new! # :nodoc:
39
+ @force_to_be_new = true
40
+ end
41
+
42
+ def using_facebook_session_id? # :nodoc:
43
+ return (@fb_sig_session_id != nil)
44
+ end
45
+
46
+ # :section: Base Overrides
47
+
48
+ def new_session_with_rplatform # :nodoc:
49
+ if @force_to_be_new
50
+ return true
51
+ else
52
+ return new_session_without_rplatform
53
+ end
54
+ end
55
+
56
+ def initialize_with_rplatform(request, options = {}) # :nodoc:
57
+
58
+ # only try to use the sig when we don't have a cookie (i.e., in the canvas)
59
+ if session_id_available?(request)
60
+
61
+ # try a few different ways
62
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: Attempting to use fb_sig_session_key as a session key, since we are inside the canvas"
63
+ @fb_sig_session_id = lookup_request_parameter(request, "fb_sig_session_key")
64
+
65
+ # we only want to change the session_id if we got one from the fb_sig
66
+ if @fb_sig_session_id
67
+ options["session_id"] = Digest::MD5.hexdigest(@fb_sig_session_id)
68
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: using MD5 of fb_sig_session_key [#{options['session_id']}] for the Rails session id"
69
+ end
70
+ end
71
+
72
+ # now call the default Rails session initialization
73
+ initialize_without_rplatform(request, options)
74
+ end
75
+
76
+ # :section: Extension Helpers
77
+
78
+ def self.included(base) # :nodoc:
79
+ base.class_eval do
80
+ alias_method_chain :initialize, :rplatform
81
+ alias_method_chain :new_session, :rplatform
82
+ end
83
+ end
84
+
85
+ # :section: Private Helpers
86
+
87
+ private
88
+
89
+ # TODO: it seems that there should be a better way to just get raw parameters
90
+ # (not sure why the nil key bug doesn't seem to be fixed in my installation)
91
+ # ...also, there seems to be some interaction with Mongrel as well that can
92
+ # cause the parameters to fail
93
+ def lookup_request_parameter(request, key) # :nodoc:
94
+
95
+ # Depending on the user's version of Rails, this may fail due to a bug in Rails parsing of
96
+ # nil keys: http://dev.rubyonrails.org/ticket/5137, so we have a backup plan
97
+ begin
98
+
99
+ # this should work on most Rails installations
100
+ return request[key]
101
+
102
+ rescue
103
+
104
+ # this saves most other Rails installations
105
+ begin
106
+
107
+ retval = nil
108
+
109
+ # try accessing raw_post (doesn't work in some mongrel installations)
110
+ if request.respond_to?(:raw_post)
111
+ return CGI::parse(request.send(:raw_post)).fetch(key){[]}.first
112
+ end
113
+
114
+ # try accessing the raw environment table
115
+ if !retval
116
+ envTable = nil
117
+
118
+ envTable = request.send(:env_table) if request.respond_to?(:env_table)
119
+ if !envTable
120
+ envTable = request.send(:env) if request.respond_to?(:env)
121
+ end
122
+
123
+ if envTable
124
+ # credit: Blake Carlson and David Troy
125
+ ["RAW_POST_DATA", "QUERY_STRING"].each do |tableSource|
126
+ if envTable[tableSource]
127
+ retval = CGI::parse(envTable[tableSource]).fetch(key){[]}.first
128
+ end
129
+ break if retval
130
+ end
131
+ end
132
+ end
133
+
134
+ # hopefully we got a parameter
135
+ return retval
136
+
137
+ rescue
138
+
139
+ # for some reason, we just can't get the parameters
140
+ RAILS_DEFAULT_LOGGER.info "** RFACEBOOK WARNING: failed to access request.parameters"
141
+ return nil
142
+
143
+ end
144
+ end
145
+ end
146
+
147
+ def session_id_available?(request) # :nodoc:
148
+ # TODO: we should probably be checking the fb_sig for validity here (template method needed)
149
+ # ...we can only do this if we can grab the equivalent of a params hash
150
+ return (!lookup_request_parameter(request, "fb_sig_in_canvas").blank? or !lookup_request_parameter(request, "fb_sig_is_ajax").blank?)
151
+ end
152
+
153
+ end
154
+
155
+ # Special initialize method that attempts to force any session store to use the Facebook session
156
+ module RPlatform::Rails::SessionStoreExtensions # :nodoc:all
157
+
158
+ # :section: Base Overrides
159
+
160
+ def initialize_with_rplatform(session, options, *extraParams) # :nodoc:
161
+
162
+ if session.using_facebook_session_id?
163
+
164
+ # we got the fb_sig_session_key, so alter Rails' behavior to use that key to make a session
165
+ begin
166
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: using fb_sig_session_key for the #{self.class.to_s} session (session_id=#{session.session_id})"
167
+ initialize_without_rplatform(session, options, *extraParams)
168
+ rescue Exception => e
169
+ begin
170
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: failed to initialize session (session_id=#{session.session_id}), trying to force a new session"
171
+ if session.session_id
172
+ session.force_to_be_new!
173
+ end
174
+ initialize_without_rplatform(session, options, *extraParams)
175
+ rescue Exception => e
176
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: failed to force a new session, falling back to default Rails behavior"
177
+ raise e
178
+ end
179
+ end
180
+
181
+ else
182
+
183
+ # we didn't get the fb_sig_session_key, do not alter Rails' behavior
184
+ RAILS_DEFAULT_LOGGER.debug "** RFACEBOOK INFO: using default Rails sessions (since we didn't find an fb_sig_session_key in the environment)"
185
+ initialize_without_rplatform(session, options, *extraParams)
186
+
187
+ end
188
+ end
189
+
190
+ # :section: Extension Helpers
191
+
192
+ def self.included(base) # :nodoc:
193
+ base.class_eval do
194
+ alias_method_chain :initialize, :rplatform
195
+ end
196
+ end
197
+
198
+ end
@@ -0,0 +1,312 @@
1
+ # AUTHORS:
2
+ # - Curtis Edmond (www.okwithfailure.com)
3
+ # thanks to matt for rfacebook
4
+ # - Matt Pizzimenti (www.livelearncode.com)
5
+
6
+ # LICENSE:
7
+ # Redistribution and use in source and binary forms, with or without modification,
8
+ # are permitted provided that the following conditions are met:
9
+ #
10
+ # Redistributions of source code must retain the above copyright notice,
11
+ # this list of conditions and the following disclaimer.
12
+ #
13
+ # Redistributions in binary form must reproduce the above copyright notice,
14
+ # this list of conditions and the following disclaimer in the documentation
15
+ # and/or other materials provided with the distribution.
16
+ #
17
+ # Neither the name of the original author nor the names of contributors
18
+ # may be used to endorse or promote products derived from this software
19
+ # without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ module RPlatform
33
+ module Rails
34
+
35
+ class StatusManager
36
+
37
+ def initialize(checks)
38
+ @checks = checks
39
+ end
40
+
41
+ def all_valid?
42
+ allValid = true
43
+ @checks.each do |check|
44
+ allValid = false if !check.valid?
45
+ end
46
+ return allValid
47
+ end
48
+
49
+ def each_status_check
50
+ @checks.each do |check|
51
+ yield(check)
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ ###########################################
58
+ class StatusCheck
59
+ def valid?
60
+ return @valid
61
+ end
62
+ def message
63
+ if valid?
64
+ return valid_message
65
+ else
66
+ return invalid_message
67
+ end
68
+ end
69
+ end
70
+
71
+ ###########################################
72
+ class SessionStatusCheck < StatusCheck
73
+ def initialize(controller)
74
+ @controller = controller
75
+ @valid = false
76
+ begin
77
+ if controller.fbsession.ready?
78
+ @valid = true
79
+ end
80
+ rescue
81
+ end
82
+ end
83
+
84
+ def title
85
+ "fbsession"
86
+ end
87
+
88
+ def valid_message
89
+ "session is ready to make API calls"
90
+ end
91
+
92
+ def invalid_message
93
+ "session is invalid, you will not be able to make API calls (possibly due to a bad API key or secret)"
94
+ end
95
+
96
+ end
97
+ ###########################################
98
+ class FacebookParamsStatusCheck < StatusCheck
99
+ def initialize(controller)
100
+ @controller = controller
101
+ @valid = false
102
+ begin
103
+ if @controller.fbparams.size > 0
104
+ @valid = true
105
+ end
106
+ rescue
107
+ end
108
+ end
109
+
110
+ def title
111
+ "fbparams"
112
+ end
113
+
114
+ def valid_message
115
+ @controller.fbparams
116
+ end
117
+
118
+ def invalid_message
119
+ "fbparams is not populated since we weren't able to validate the signature (possibly due to a bad API key or secret)"
120
+ end
121
+
122
+ end
123
+ ###########################################
124
+ class InCanvasStatusCheck < StatusCheck
125
+ def initialize(controller)
126
+ @controller = controller
127
+ @valid = true
128
+ end
129
+
130
+ def title
131
+ "in_facebook_canvas?"
132
+ end
133
+
134
+ def valid_message
135
+ @controller.in_facebook_canvas? ? "yes" : "no"
136
+ end
137
+
138
+ def invalid_message
139
+ "this should never be invalid"
140
+ end
141
+
142
+ end
143
+ ###########################################
144
+ class InFrameStatusCheck < StatusCheck
145
+ def initialize(controller)
146
+ @controller = controller
147
+ @valid = true
148
+ end
149
+
150
+ def title
151
+ "in_facebook_frame?"
152
+ end
153
+
154
+ def valid_message
155
+ @controller.in_facebook_frame? ? "yes" : "no"
156
+ end
157
+
158
+ def invalid_message
159
+ "this should never be invalid"
160
+ end
161
+
162
+ end
163
+ ###########################################
164
+ class CanvasPathStatusCheck < StatusCheck
165
+ def initialize(controller)
166
+ @controller = controller
167
+ @valid = false
168
+ begin
169
+ @valid = @controller.facebook_canvas_path.size > 0
170
+ rescue
171
+ end
172
+ end
173
+
174
+ def title
175
+ "facebook_canvas_path"
176
+ end
177
+
178
+ def valid_message
179
+ @controller.facebook_canvas_path
180
+ end
181
+
182
+ def invalid_message
183
+ begin
184
+ FACEBOOK[:test]
185
+ return "you need to define <strong>canvas_path</strong> in facebook.yml"
186
+ rescue
187
+ return "you need to define s<strong>facebook_canvas_path</strong> in your controller"
188
+ end
189
+ end
190
+
191
+ end
192
+ ###########################################
193
+ class CallbackPathStatusCheck < StatusCheck
194
+ def initialize(controller)
195
+ @controller = controller
196
+ @valid = false
197
+ begin
198
+ @valid = @controller.facebook_callback_path.size > 0
199
+ rescue
200
+ end
201
+ end
202
+
203
+ def title
204
+ "facebook_callback_path"
205
+ end
206
+
207
+ def valid_message
208
+ @controller.facebook_callback_path
209
+ end
210
+
211
+ def invalid_message
212
+ begin
213
+ FACEBOOK[:test]
214
+ return "you need to define <strong>callback_path</strong> in facebook.yml"
215
+ rescue
216
+ return "you need to define s<strong>facebook_callback_path</strong> in your controller"
217
+ end
218
+ end
219
+
220
+ end
221
+ ###########################################
222
+ class APIKeyStatusCheck < StatusCheck
223
+ def initialize(controller)
224
+ @controller = controller
225
+ @valid = false
226
+ begin
227
+ if @controller.facebook_api_key.size > 0
228
+ @valid = true
229
+ end
230
+ rescue
231
+ end
232
+ end
233
+
234
+ def title
235
+ "facebook_api_key"
236
+ end
237
+
238
+ def valid_message
239
+ "XXXXXXXXXXXXXXXXXX#{@controller.facebook_api_key[-4,4]}"
240
+ end
241
+
242
+ def invalid_message
243
+ begin
244
+ FACEBOOK[:test]
245
+ return "you need to put your API <strong>key</strong> in facebook.yml"
246
+ rescue
247
+ return "you need to define s<strong>facebook_api_key</strong> in your controller"
248
+ end
249
+ end
250
+
251
+ end
252
+ ###########################################
253
+ class APISecretStatusCheck < StatusCheck
254
+ def initialize(controller)
255
+ @controller = controller
256
+ @valid = false
257
+ begin
258
+ if @controller.facebook_api_secret.size > 0
259
+ @valid = true
260
+ end
261
+ rescue
262
+ end
263
+ end
264
+
265
+ def title
266
+ "facebook_api_secret"
267
+ end
268
+
269
+ def valid_message
270
+ "XXXXXXXXXXXXXXXXXX#{@controller.facebook_api_secret[-4,4]}"
271
+ end
272
+
273
+ def invalid_message
274
+ begin
275
+ FACEBOOK[:test]
276
+ return "you need to put your API <strong>secret</strong> in facebook.yml"
277
+ rescue
278
+ return "you need to define s<strong>facebook_api_secret</strong> in your controller"
279
+ end
280
+ end
281
+
282
+ end
283
+
284
+ ###########################################
285
+ class FinishFacebookLoginStatusCheck < StatusCheck
286
+ def initialize(controller)
287
+ @controller = controller
288
+ @valid = false
289
+ begin
290
+ @controller.finish_facebook_login
291
+ @valid = true
292
+ rescue
293
+ end
294
+ end
295
+
296
+ def title
297
+ "finish_facebook_login"
298
+ end
299
+
300
+ def valid_message
301
+ "finisher method is defined (this is only for external web apps)"
302
+ end
303
+
304
+ def invalid_message
305
+ "you need to define <strong>finish_facebook_login</strong> in your controller (this is only for external web apps)"
306
+ end
307
+
308
+ end
309
+
310
+
311
+ end
312
+ end