rest-core 0.4.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/.travis.yml +2 -7
  2. data/CHANGES.md +13 -2
  3. data/Gemfile +0 -3
  4. data/README.md +30 -34
  5. data/Rakefile +5 -46
  6. data/lib/rest-core.rb +0 -6
  7. data/lib/rest-core/version.rb +1 -1
  8. data/rest-core.gemspec +5 -83
  9. metadata +11 -87
  10. data/example/rails2/Gemfile +0 -21
  11. data/example/rails2/README +0 -4
  12. data/example/rails2/Rakefile +0 -11
  13. data/example/rails2/app/controllers/application_controller.rb +0 -128
  14. data/example/rails2/app/views/application/helper.html.erb +0 -2
  15. data/example/rails2/config/boot.rb +0 -130
  16. data/example/rails2/config/environment.rb +0 -15
  17. data/example/rails2/config/environments/development.rb +0 -17
  18. data/example/rails2/config/environments/production.rb +0 -28
  19. data/example/rails2/config/environments/test.rb +0 -30
  20. data/example/rails2/config/initializers/cookie_verification_secret.rb +0 -7
  21. data/example/rails2/config/initializers/new_rails_defaults.rb +0 -21
  22. data/example/rails2/config/initializers/session_store.rb +0 -15
  23. data/example/rails2/config/preinitializer.rb +0 -23
  24. data/example/rails2/config/rest-core.yaml +0 -16
  25. data/example/rails2/config/routes.rb +0 -43
  26. data/example/rails2/log +0 -0
  27. data/example/rails2/test/functional/application_controller_test.rb +0 -197
  28. data/example/rails2/test/test_helper.rb +0 -18
  29. data/example/rails2/test/unit/rails_util_test.rb +0 -44
  30. data/example/rails3/Gemfile +0 -20
  31. data/example/rails3/README +0 -4
  32. data/example/rails3/Rakefile +0 -7
  33. data/example/rails3/app/controllers/application_controller.rb +0 -128
  34. data/example/rails3/app/views/application/helper.html.erb +0 -2
  35. data/example/rails3/config.ru +0 -4
  36. data/example/rails3/config/application.rb +0 -23
  37. data/example/rails3/config/environment.rb +0 -5
  38. data/example/rails3/config/environments/development.rb +0 -26
  39. data/example/rails3/config/environments/production.rb +0 -49
  40. data/example/rails3/config/environments/test.rb +0 -30
  41. data/example/rails3/config/initializers/secret_token.rb +0 -7
  42. data/example/rails3/config/initializers/session_store.rb +0 -8
  43. data/example/rails3/config/rest-core.yaml +0 -16
  44. data/example/rails3/config/routes.rb +0 -5
  45. data/example/rails3/test/functional/application_controller_test.rb +0 -197
  46. data/example/rails3/test/test_helper.rb +0 -18
  47. data/example/rails3/test/unit/rails_util_test.rb +0 -44
  48. data/example/sinatra/config.ru +0 -16
  49. data/lib/rest-core/client/facebook.rb +0 -251
  50. data/lib/rest-core/client/facebook/rails_util.rb +0 -333
  51. data/lib/rest-core/client/flurry.rb +0 -96
  52. data/lib/rest-core/client/flurry/rails_util.rb +0 -74
  53. data/lib/rest-core/client/github.rb +0 -18
  54. data/lib/rest-core/client/linkedin.rb +0 -59
  55. data/lib/rest-core/client/mixi.rb +0 -47
  56. data/lib/rest-core/client/twitter.rb +0 -101
  57. data/test/client/facebook/config/rest-core.yaml +0 -8
  58. data/test/client/facebook/test_api.rb +0 -97
  59. data/test/client/facebook/test_cache.rb +0 -58
  60. data/test/client/facebook/test_default.rb +0 -23
  61. data/test/client/facebook/test_error.rb +0 -65
  62. data/test/client/facebook/test_handler.rb +0 -84
  63. data/test/client/facebook/test_load_config.rb +0 -39
  64. data/test/client/facebook/test_misc.rb +0 -72
  65. data/test/client/facebook/test_oauth.rb +0 -38
  66. data/test/client/facebook/test_old.rb +0 -114
  67. data/test/client/facebook/test_page.rb +0 -106
  68. data/test/client/facebook/test_parse.rb +0 -128
  69. data/test/client/facebook/test_serialize.rb +0 -43
  70. data/test/client/facebook/test_timeout.rb +0 -22
  71. data/test/client/flurry/test_metrics.rb +0 -83
  72. data/test/client/twitter/test_api.rb +0 -37
@@ -1,16 +0,0 @@
1
-
2
- require 'sinatra'
3
- require 'rest-core'
4
-
5
- app_id = '123'
6
- secret = 'abc'
7
- config = {:app_id => app_id,
8
- :secret => secret}
9
-
10
- post '/' do
11
- fb = RestCore::Facebook.new(config)
12
- fb.parse_signed_request!(params['signed_request'])
13
- "#{fb.get('me').inspect.gsub('<', '&lt;')}\n"
14
- end
15
-
16
- run Sinatra::Application
@@ -1,251 +0,0 @@
1
-
2
- require 'rest-core'
3
- require 'rest-core/util/hmac'
4
-
5
- RestCore::Facebook = RestCore::Builder.client(
6
- :data, :app_id, :secret, :old_site) do
7
-
8
- s = self.class # this is only for ruby 1.8!
9
- use s::Timeout , 10
10
-
11
- use s::DefaultSite , 'https://graph.facebook.com/'
12
- use s::DefaultHeaders, {'Accept' => 'application/json',
13
- 'Accept-Language' => 'en-us'}
14
- use s::Oauth2Query , nil
15
-
16
- use s::CommonLogger , nil
17
- use s::Cache , nil, 600 do
18
- use s::ErrorHandler, lambda{ |env|
19
- raise ::RestCore::Facebook::Error.call(env) }
20
- use s::ErrorDetector, lambda{ |env|
21
- if env[s::RESPONSE_BODY].kind_of?(Hash)
22
- env[s::RESPONSE_BODY]['error'] ||
23
- env[s::RESPONSE_BODY]['error_code']
24
- end}
25
-
26
- use s::JsonDecode , true
27
- end
28
-
29
- use s::Defaults , :data => lambda{{}},
30
- :old_site => 'https://api.facebook.com/'
31
- end
32
-
33
- class RestCore::Facebook::Error < RestCore::Error
34
- include RestCore
35
- class AccessToken < Facebook::Error; end
36
- class InvalidAccessToken < AccessToken ; end
37
- class MissingAccessToken < AccessToken ; end
38
-
39
- attr_reader :error, :url
40
- def initialize error, url=''
41
- @error, @url = error, url
42
- super("#{error.inspect} from #{url}")
43
- end
44
-
45
- def self.call env
46
- error, url = env[RESPONSE_BODY], Middleware.request_uri(env)
47
- return new(env[FAIL], url) unless error.kind_of?(Hash)
48
- if invalid_token?(error)
49
- InvalidAccessToken.new(error, url)
50
- elsif missing_token?(error)
51
- MissingAccessToken.new(error, url)
52
- else
53
- new(error, url)
54
- end
55
- end
56
-
57
- def self.invalid_token? error
58
- (%w[OAuthInvalidTokenException
59
- OAuthException].include?((error['error'] || {})['type'])) ||
60
- (error['error_code'] == 190) # Invalid OAuth 2.0 Access Token
61
- end
62
-
63
- def self.missing_token? error
64
- (error['error'] || {})['message'] =~ /^An active access token/ ||
65
- (error['error_code'] == 104) # Requires valid signature
66
- end
67
- end
68
-
69
- module RestCore::Facebook::Client
70
- include RestCore
71
-
72
- def access_token
73
- data['access_token'] || data['oauth_token'] if data.kind_of?(Hash)
74
- end
75
-
76
- def access_token= token
77
- data['access_token'] = token if data.kind_of?(Hash)
78
- end
79
-
80
- def secret_access_token; "#{app_id}|#{secret}" ; end
81
- def accept ; headers['Accept'] ; end
82
- def accept= val; headers['Accept'] = val; end
83
- def lang ; headers['Accept-Language'] ; end
84
- def lang= val; headers['Accept-Language'] = val; end
85
-
86
- def authorized? ; !!access_token ; end
87
-
88
- def next_page hash, opts={}, &cb
89
- if hash['paging'].kind_of?(Hash) && hash['paging']['next']
90
- get(hash['paging']['next'], {}, opts, &cb)
91
- else
92
- yield(nil) if block_given?
93
- end
94
- end
95
-
96
- def prev_page hash, opts={}, &cb
97
- if hash['paging'].kind_of?(Hash) && hash['paging']['previous']
98
- get(hash['paging']['previous'], {}, opts, &cb)
99
- else
100
- yield(nil) if block_given?
101
- end
102
- end
103
- alias_method :previous_page, :prev_page
104
-
105
- def for_pages hash, pages=1, opts={}, kind=:next_page, &cb
106
- if pages > 1
107
- merge_data(send(kind, hash, opts){ |result|
108
- yield(result.freeze) if block_given?
109
- for_pages(result, pages - 1, opts, kind, &cb) if result
110
- }, hash)
111
- else
112
- yield(nil) if block_given?
113
- hash
114
- end
115
- end
116
-
117
- # cookies, app_id, secrect related below
118
-
119
- def parse_rack_env! env
120
- env['HTTP_COOKIE'].to_s =~ /fbs_#{app_id}=([^\;]+)/
121
- self.data = parse_fbs!($1)
122
- end
123
-
124
- def parse_cookies! cookies
125
- self.data = parse_fbs!(cookies["fbs_#{app_id}"])
126
- end
127
-
128
- def parse_fbs! fbs
129
- self.data = check_sig_and_return_data(
130
- # take out facebook sometimes there but sometimes not quotes in cookies
131
- Vendor.parse_query(fbs.to_s.sub(/^"/, '').sub(/"$/, '')))
132
- end
133
-
134
- def parse_json! json
135
- self.data = json &&
136
- check_sig_and_return_data(JsonDecode.json_decode(json))
137
- rescue JsonDecode::ParseError
138
- self.data = nil
139
- end
140
-
141
- def fbs
142
- "#{fbs_without_sig(data).join('&')}&sig=#{calculate_sig(data)}"
143
- end
144
-
145
- # facebook's new signed_request...
146
-
147
- def parse_signed_request! request
148
- sig_encoded, json_encoded = request.split('.')
149
- sig, json = [sig_encoded, json_encoded].map{ |str|
150
- "#{str.tr('-_', '+/')}==".unpack('m').first
151
- }
152
- self.data = check_sig_and_return_data(
153
- JsonDecode.json_decode(json).merge('sig' => sig)){
154
- Hmac.sha256(secret, json_encoded)
155
- }
156
- rescue JsonDecode::ParseError
157
- self.data = nil
158
- end
159
-
160
- # oauth related
161
-
162
- def authorize_url opts={}
163
- url('oauth/authorize',
164
- {:client_id => app_id, :access_token => nil}.merge(opts))
165
- end
166
-
167
- def authorize! opts={}
168
- query = {:client_id => app_id, :client_secret => secret}.merge(opts)
169
- self.data = Vendor.parse_query(
170
- get(url('oauth/access_token'), query,
171
- {:json_decode => false}.merge(opts)))
172
- end
173
-
174
- # old rest facebook api, i will definitely love to remove them someday
175
-
176
- def old_rest path, query={}, opts={}, &cb
177
- uri = url("method/#{path}", {:format => 'json'}.merge(query),
178
- {:site => old_site}.merge(opts))
179
- if opts[:post]
180
- post(url("method/#{path}", {:format => 'json'},
181
- {:site => old_site}.merge(opts)),
182
- query,
183
- {} ,
184
- opts.merge('cache.key' => uri, 'cache.post' => true),
185
- &cb)
186
- else
187
- get(uri, {}, opts, &cb)
188
- end
189
- end
190
-
191
- def secret_old_rest path, query={}, opts={}, &cb
192
- old_rest(path, query, {:secret => true}.merge(opts), &cb)
193
- end
194
-
195
- def fql code, query={}, opts={}, &cb
196
- old_rest('fql.query', {:query => code}.merge(query), opts, &cb)
197
- end
198
-
199
- def fql_multi codes, query={}, opts={}, &cb
200
- old_rest('fql.multiquery',
201
- {:queries => JsonDecode.json_encode(codes)}.merge(query), opts, &cb)
202
- end
203
-
204
- def exchange_sessions query={}, opts={}, &cb
205
- q = {:client_id => app_id, :client_secret => secret,
206
- :type => 'client_cred'}.merge(query)
207
- post(url('oauth/exchange_sessions', q),
208
- {}, {}, opts, &cb)
209
- end
210
-
211
- protected
212
- def build_env env={}
213
- super(env.inject({}){ |r, (k, v)|
214
- case k.to_s
215
- when 'secret' ; r['access_token'] = secret_access_token
216
- when 'cache' ; r['cache.update'] = !!!v
217
- else ; r[k.to_s] = v
218
- end
219
- r
220
- })
221
- end
222
-
223
- def check_sig_and_return_data cookies
224
- cookies if secret && if block_given?
225
- yield
226
- else
227
- calculate_sig(cookies)
228
- end == cookies['sig']
229
- end
230
-
231
- def calculate_sig cookies
232
- Digest::MD5.hexdigest(fbs_without_sig(cookies).join + secret)
233
- end
234
-
235
- def fbs_without_sig cookies
236
- cookies.reject{ |(k, v)| k == 'sig' }.sort.map{ |a| a.join('=') }
237
- end
238
-
239
- def merge_data lhs, rhs
240
- [lhs, rhs].each{ |hash|
241
- return rhs.reject{ |k, v| k == 'paging' } if
242
- !hash.kind_of?(Hash) || !hash['data'].kind_of?(Array)
243
- }
244
- lhs['data'].unshift(*rhs['data'])
245
- lhs
246
- end
247
- end
248
-
249
- RestCore::Facebook.send(:include, RestCore::Facebook::Client)
250
- require 'rest-core/client/facebook/rails_util' if
251
- Object.const_defined?(:Rails)
@@ -1,333 +0,0 @@
1
-
2
- require 'rest-core/util/rails_util_util'
3
-
4
- require 'cgi'
5
- require 'uri'
6
-
7
- module RestCore::Facebook::DefaultAttributes
8
- def default_log_method ; Rails.logger.method(:debug); end
9
- def default_cache ; Rails.cache ; end
10
- def default_canvas ; '' ; end
11
- def default_iframe ; false ; end
12
- def default_auto_authorize ; false ; end
13
- def default_auto_authorize_options; {} ; end
14
- def default_auto_authorize_scope ; '' ; end
15
- def default_ensure_authorized ; false ; end
16
- def default_write_session ; false ; end
17
- def default_write_cookies ; false ; end
18
- def default_write_handler ; nil ; end
19
- def default_check_handler ; nil ; end
20
- end
21
-
22
- module RestCore::Facebook::RailsUtil
23
- def self.init app=Rails
24
- RestCore::Config.load_for_rails(RestCore::Facebook, 'facebook', app)
25
- end
26
-
27
- module Helper
28
- def rc_facebook
29
- controller.send(:rc_facebook)
30
- end
31
- end
32
-
33
- def self.included controller
34
- # skip if included already, any better way to detect this?
35
- return if controller.respond_to?(:rc_facebook, true)
36
-
37
- controller.rescue_from(RestCore::Facebook::Error::AccessToken,
38
- :with => :rc_facebook_on_access_token_error)
39
- controller.helper(RestCore::Facebook::RailsUtil::Helper)
40
- controller.instance_methods.select{ |method|
41
- method.to_s =~ /^rc_facebook/
42
- }.each{ |method| controller.send(:protected, method) }
43
- end
44
-
45
- def rc_facebook_setup options={}
46
- rc_facebook_options_ctl.merge!(
47
- RestCore::RailsUtilUtil.extract_options(
48
- RestCore::Facebook.members, options, :reject))
49
- rc_facebook_options_new.merge!(
50
- RestCore::RailsUtilUtil.extract_options(
51
- RestCore::Facebook.members, options, :select))
52
-
53
- # we'll need to reinitialize rc_facebook with the new options,
54
- # otherwise if you're calling rc_facebook before rc_facebook_setup,
55
- # you'll end up with default options without the ones you've passed
56
- # into rc_facebook_setup.
57
- rc_facebook.send(:initialize, rc_facebook_options_new)
58
-
59
- rc_facebook_check_params_signed_request # canvas
60
- rc_facebook_check_params_session # i think it would be deprecated
61
- rc_facebook_check_cookie # for js sdk (canvas or not)
62
- rc_facebook_check_code # oauth api
63
-
64
- # there are above 4 ways to check the user identity!
65
- # if nor of them passed, then we can suppose the user
66
- # didn't authorize for us, but we can check if user has authorized
67
- # before, in that case, the fbs would be inside session,
68
- # as we just saved it there
69
-
70
- rc_facebook_check_rg_fbs # check rc_facebook storage
71
-
72
- if rc_facebook_oget(:ensure_authorized) && !rc_facebook.authorized?
73
- rc_facebook_authorize('ensure authorized')
74
- false # action halt, redirect to do authorize,
75
- # eagerly, as opposed to auto_authorize
76
- else
77
- true # keep going
78
- end
79
- end
80
-
81
- # override this if you need different app_id and secret
82
- def rc_facebook
83
- @rc_facebook ||= RestCore::Facebook.new(rc_facebook_options_new)
84
- end
85
-
86
- def rc_facebook_on_access_token_error error=nil
87
- rc_facebook_authorize(error, false)
88
- end
89
-
90
- def rc_facebook_authorize error=nil, force_redirect=true
91
- logger.warn("WARN: Facebook: #{error.inspect}")
92
-
93
- if force_redirect || rc_facebook_auto_authorize?
94
- @rc_facebook_authorize_url = rc_facebook.authorize_url(
95
- {:redirect_uri => rc_facebook_normalized_request_uri,
96
- :scope => rc_facebook_oget(:auto_authorize_scope)}.
97
- merge(rc_facebook_oget(:auto_authorize_options)))
98
-
99
- logger.debug(
100
- "DEBUG: Facebook: redirect to #{@rc_facebook_authorize_url}")
101
-
102
- cookies.delete("fbs_#{rc_facebook.app_id}")
103
- rc_facebook_authorize_redirect
104
- end
105
- end
106
-
107
- # override this if you want the simple redirect_to
108
- def rc_facebook_authorize_redirect
109
- unless rc_facebook_in_canvas?
110
- redirect_to @rc_facebook_authorize_url
111
- else
112
- rc_facebook_js_redirect(@rc_facebook_authorize_url,
113
- rc_facebook_authorize_body)
114
- end
115
- end
116
-
117
- def rc_facebook_js_redirect redirect_url, body=''
118
- render :inline => <<-HTML
119
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
120
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
121
- <html>
122
- <head>
123
- <script type="text/javascript">
124
- window.top.location.href = '#{redirect_url}'
125
- </script>
126
- <noscript>
127
- <meta http-equiv="refresh" content="0;url=#{
128
- CGI.escapeHTML(redirect_url)}"/>
129
- <meta http-equiv="window-target" content="_top"/>
130
- </noscript>
131
- </head>
132
- <body>
133
- #{body}
134
- </bodt>
135
- </html>
136
- HTML
137
- end
138
-
139
- def rc_facebook_authorize_body redirect_url=@rc_facebook_authorize_url
140
- <<-HTML
141
- <div>
142
- Please
143
- <a href="#{CGI.escapeHTML(redirect_url)}" target="_top">authorize</a>
144
- if this page is not automatically redirected.
145
- </div>
146
- HTML
147
- end
148
-
149
- module_function
150
-
151
- # ==================== begin options utility =======================
152
- def rc_facebook_oget key
153
- if rc_facebook_options_ctl.has_key?(key)
154
- rc_facebook_options_ctl[key]
155
- else
156
- RestCore::Facebook.send("default_#{key}")
157
- end
158
- end
159
-
160
- def rc_facebook_options_ctl
161
- @rc_facebook_options_ctl ||= {}
162
- end
163
-
164
- def rc_facebook_options_new
165
- @rc_facebook_options_new ||= {}
166
- end
167
- # ==================== end options utility =======================
168
-
169
-
170
-
171
- # ==================== begin facebook check ======================
172
- def rc_facebook_check_params_signed_request
173
- return if rc_facebook.authorized? || !params[:signed_request]
174
-
175
- rc_facebook.parse_signed_request!(params[:signed_request])
176
- logger.debug("DEBUG: Facebook: detected signed_request," \
177
- " parsed: #{rc_facebook.data.inspect}")
178
-
179
- if rc_facebook.authorized?
180
- rc_facebook_write_rg_fbs
181
- else
182
- logger.warn(
183
- "WARN: Facebook: bad signed_request: #{params[:signed_request]}")
184
- end
185
- end
186
-
187
- # if the code is bad or not existed,
188
- # check if there's one in session,
189
- # meanwhile, there the sig and access_token is correct,
190
- # that means we're in the context of canvas
191
- def rc_facebook_check_params_session
192
- return if rc_facebook.authorized? || !params[:session]
193
-
194
- rc_facebook.parse_json!(params[:session])
195
- logger.debug("DEBUG: Facebook: detected session, parsed:" \
196
- " #{rc_facebook.data.inspect}")
197
-
198
- if rc_facebook.authorized?
199
- rc_facebook_write_rg_fbs
200
- else
201
- logger.warn("WARN: Facebook: bad session: #{params[:session]}")
202
- end
203
- end
204
-
205
- # if we're not in canvas nor code passed,
206
- # we could check out cookies as well.
207
- def rc_facebook_check_cookie
208
- return if rc_facebook.authorized? ||
209
- !cookies["fbs_#{rc_facebook.app_id}"]
210
-
211
- rc_facebook.parse_cookies!(cookies)
212
- logger.debug("DEBUG: Facebook: detected cookies, parsed:" \
213
- " #{rc_facebook.data.inspect}")
214
- end
215
-
216
- # exchange the code with access_token
217
- def rc_facebook_check_code
218
- return if rc_facebook.authorized? || !params[:code]
219
-
220
- rc_facebook.authorize!(
221
- :code => params[:code],
222
- :redirect_uri => rc_facebook_normalized_request_uri)
223
-
224
- logger.debug(
225
- "DEBUG: Facebook: detected code with " \
226
- "#{rc_facebook_normalized_request_uri}," \
227
- " parsed: #{rc_facebook.data.inspect}")
228
-
229
- rc_facebook_write_rg_fbs if rc_facebook.authorized?
230
- end
231
- # ==================== end facebook check ======================
232
-
233
-
234
-
235
- # ==================== begin check ================================
236
- def rc_facebook_storage_key
237
- "rc_facebook_fbs_#{rc_facebook_oget(:app_id)}"
238
- end
239
-
240
- def rc_facebook_check_rg_fbs
241
- rc_facebook_check_rg_handler # custom method to store fbs
242
- rc_facebook_check_rg_session # prefered way to store fbs
243
- rc_facebook_check_rg_cookies # in canvas, session might not work..
244
- end
245
-
246
- def rc_facebook_check_rg_handler handler=rc_facebook_oget(:check_handler)
247
- return if rc_facebook.authorized? || !handler
248
- rc_facebook.parse_fbs!(handler.call)
249
- logger.debug("DEBUG: Facebook: called check_handler, parsed:" \
250
- " #{rc_facebook.data.inspect}")
251
- end
252
-
253
- def rc_facebook_check_rg_session
254
- return if rc_facebook.authorized? || !rc_facebook_oget(:write_session) ||
255
- !(fbs = session[rc_facebook_storage_key])
256
- rc_facebook.parse_fbs!(fbs)
257
- logger.debug("DEBUG: Facebook: detected rc_facebook session, parsed:" \
258
- " #{rc_facebook.data.inspect}")
259
- end
260
-
261
- def rc_facebook_check_rg_cookies
262
- return if rc_facebook.authorized? || !rc_facebook_oget(:write_cookies) ||
263
- !(fbs = cookies[rc_facebook_storage_key])
264
- rc_facebook.parse_fbs!(fbs)
265
- logger.debug("DEBUG: Facebook: detected rc_facebook cookies, parsed:" \
266
- " #{rc_facebook.data.inspect}")
267
- end
268
- # ==================== end check ================================
269
- # ==================== begin write ================================
270
- def rc_facebook_write_rg_fbs
271
- cookies.delete("fbs_#{rc_facebook.app_id}")
272
- rc_facebook_write_rg_handler
273
- rc_facebook_write_rg_session
274
- rc_facebook_write_rg_cookies
275
- end
276
-
277
- def rc_facebook_write_rg_handler handler=rc_facebook_oget(:write_handler)
278
- return if !handler
279
- handler.call(fbs = rc_facebook.fbs)
280
- logger.debug("DEBUG: Facebook: called write_handler: fbs => #{fbs}")
281
- end
282
-
283
- def rc_facebook_write_rg_session
284
- return if !rc_facebook_oget(:write_session)
285
- session[rc_facebook_storage_key] = fbs = rc_facebook.fbs
286
- logger.debug("DEBUG: Facebook: wrote session: fbs => #{fbs}")
287
- end
288
-
289
- def rc_facebook_write_rg_cookies
290
- return if !rc_facebook_oget(:write_cookies)
291
- cookies[rc_facebook_storage_key] = fbs = rc_facebook.fbs
292
- logger.debug("DEBUG: Facebook: wrote cookies: fbs => #{fbs}")
293
- end
294
- # ==================== end write ================================
295
-
296
-
297
-
298
- # ==================== begin misc ================================
299
- def rc_facebook_normalized_request_uri
300
- uri = if rc_facebook_in_canvas?
301
- # rails 3 uses newer rack which has fullpath
302
- "http://apps.facebook.com/#{rc_facebook_oget(:canvas)}" +
303
- (request.respond_to?(:fullpath) ?
304
- request.fullpath : request.request_uri)
305
- else
306
- request.url
307
- end
308
-
309
- rc_facebook_filter_uri(uri)
310
- end
311
-
312
- def rc_facebook_filter_uri uri
313
- URI.parse(URI.encode(uri)).tap{ |uri|
314
- uri.query = uri.query.split('&').reject{ |q|
315
- q =~ /^(code|session|signed_request)\=/
316
- }.join('&') if uri.query
317
- uri.query = nil if uri.query.blank?
318
- }.to_s
319
- end
320
-
321
- def rc_facebook_in_canvas?
322
- !rc_facebook_oget(:canvas).blank?
323
- end
324
-
325
- def rc_facebook_auto_authorize?
326
- !rc_facebook_oget(:auto_authorize_scope) .blank? ||
327
- !rc_facebook_oget(:auto_authorize_options).blank? ||
328
- rc_facebook_oget(:auto_authorize)
329
- end
330
- # ==================== end misc ================================
331
- end
332
-
333
- RestCore::Facebook::RailsUtil.init(Rails)