Module: RestGraph::RailsUtil
- Defined in:
- lib/rest-graph/rails_util.rb
Defined Under Namespace
Modules: Helper
Class Method Summary collapse
- .included(controller) ⇒ Object
- .init(app = Rails) ⇒ Object
- .rest_graph_auto_authorize? ⇒ Boolean
-
.rest_graph_check_code ⇒ Object
exchange the code with access_token.
-
.rest_graph_check_cookie ⇒ Object
if we’re not in canvas nor code passed, we could check out cookies as well.
-
.rest_graph_check_params_session ⇒ Object
if the code is bad or not existed, check if there’s one in session, meanwhile, there the sig and access_token is correct, that means we’re in the context of canvas.
-
.rest_graph_check_params_signed_request ⇒ Object
begin facebook check ======================.
- .rest_graph_check_rg_cookies ⇒ Object
- .rest_graph_check_rg_fbs ⇒ Object
- .rest_graph_check_rg_handler(handler = rest_graph_oget(:check_handler)) ⇒ Object
- .rest_graph_check_rg_session ⇒ Object
- .rest_graph_extract_options(options, method) ⇒ Object
- .rest_graph_filter_uri(uri) ⇒ Object
- .rest_graph_in_canvas? ⇒ Boolean
-
.rest_graph_normalized_request_uri ⇒ Object
begin misc ================================.
-
.rest_graph_oget(key) ⇒ Object
begin options utility =======================.
- .rest_graph_options_ctl ⇒ Object
- .rest_graph_options_new ⇒ Object
-
.rest_graph_storage_key ⇒ Object
begin check ================================.
- .rest_graph_write_rg_cookies ⇒ Object
-
.rest_graph_write_rg_fbs ⇒ Object
end check ================================ ==================== begin write ================================.
- .rest_graph_write_rg_handler(handler = rest_graph_oget(:write_handler)) ⇒ Object
- .rest_graph_write_rg_session ⇒ Object
Instance Method Summary collapse
-
#rest_graph ⇒ Object
override this if you need different app_id and secret.
- #rest_graph_authorize(error = nil, force_redirect = true) ⇒ Object
- #rest_graph_authorize_body(redirect_url = @rest_graph_authorize_url) ⇒ Object
-
#rest_graph_authorize_redirect ⇒ Object
override this if you want the simple redirect_to.
- #rest_graph_js_redirect(redirect_url, body = '') ⇒ Object
- #rest_graph_on_access_token_error(error = nil) ⇒ Object (also: #rest_graph_on_error)
- #rest_graph_setup(options = {}) ⇒ Object
Class Method Details
.included(controller) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rest-graph/rails_util.rb', line 59 def self.included controller # skip if included already, any better way to detect this? return if controller.respond_to?(:rest_graph, true) controller.rescue_from(RestGraph::Error::AccessToken, :with => :rest_graph_on_access_token_error) controller.helper(RestGraph::RailsUtil::Helper) controller.instance_methods.select{ |method| method.to_s =~ /^rest_graph/ }.each{ |method| controller.send(:protected, method) } end |
.init(app = Rails) ⇒ Object
48 49 50 51 |
# File 'lib/rest-graph/rails_util.rb', line 48 def self.init app=Rails ActiveSupport::Cache::Store.send(:include, RestGraph::RailsCache) RestGraph::ConfigUtil.load_config_for_rails(app) end |
.rest_graph_auto_authorize? ⇒ Boolean
347 348 349 350 351 |
# File 'lib/rest-graph/rails_util.rb', line 347 def !rest_graph_oget(:auto_authorize_scope) .blank? || !rest_graph_oget(:auto_authorize_options).blank? || rest_graph_oget(:auto_authorize) end |
.rest_graph_check_code ⇒ Object
exchange the code with access_token
241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/rest-graph/rails_util.rb', line 241 def rest_graph_check_code return if rest_graph. || !params[:code] rest_graph.(:code => params[:code], :redirect_uri => rest_graph_normalized_request_uri) logger.debug( "DEBUG: RestGraph: detected code with " \ "#{rest_graph_normalized_request_uri}, " \ "parsed: #{rest_graph.data.inspect}") rest_graph_write_rg_fbs if rest_graph. end |
.rest_graph_check_cookie ⇒ Object
if we’re not in canvas nor code passed, we could check out cookies as well.
230 231 232 233 234 235 236 237 238 |
# File 'lib/rest-graph/rails_util.rb', line 230 def return if rest_graph. || (!["fbsr_#{rest_graph.app_id}"] && !["fbs_#{rest_graph.app_id}"]) rest_graph.() logger.debug("DEBUG: RestGraph: detected cookies, parsed:" \ " #{rest_graph.data.inspect}") end |
.rest_graph_check_params_session ⇒ Object
if the code is bad or not existed, check if there’s one in session, meanwhile, there the sig and access_token is correct, that means we’re in the context of canvas
214 215 216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/rest-graph/rails_util.rb', line 214 def rest_graph_check_params_session return if rest_graph. || !params[:session] rest_graph.parse_json!(params[:session]) logger.debug("DEBUG: RestGraph: detected session, parsed:" \ " #{rest_graph.data.inspect}") if rest_graph. rest_graph_write_rg_fbs else logger.warn("WARN: RestGraph: bad session: #{params[:session]}") end end |
.rest_graph_check_params_signed_request ⇒ Object
begin facebook check ======================
195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/rest-graph/rails_util.rb', line 195 def rest_graph_check_params_signed_request return if rest_graph. || !params[:signed_request] rest_graph.parse_signed_request!(params[:signed_request]) logger.debug("DEBUG: RestGraph: detected signed_request, parsed:" \ " #{rest_graph.data.inspect}") if rest_graph. rest_graph_write_rg_fbs else logger.warn( "WARN: RestGraph: bad signed_request: #{params[:signed_request]}") end end |
.rest_graph_check_rg_cookies ⇒ Object
283 284 285 286 287 288 289 |
# File 'lib/rest-graph/rails_util.rb', line 283 def return if rest_graph. || !rest_graph_oget(:write_cookies) || !(fbs = [rest_graph_storage_key]) rest_graph.parse_fbs!(fbs) logger.debug("DEBUG: RestGraph: detected rest-graph cookies, parsed:" \ " #{rest_graph.data.inspect}") end |
.rest_graph_check_rg_fbs ⇒ Object
262 263 264 265 266 |
# File 'lib/rest-graph/rails_util.rb', line 262 def rest_graph_check_rg_fbs rest_graph_check_rg_handler # custom method to store fbs rest_graph_check_rg_session # prefered way to store fbs # in canvas, session might not work.. end |
.rest_graph_check_rg_handler(handler = rest_graph_oget(:check_handler)) ⇒ Object
268 269 270 271 272 273 |
# File 'lib/rest-graph/rails_util.rb', line 268 def rest_graph_check_rg_handler handler=rest_graph_oget(:check_handler) return if rest_graph. || !handler rest_graph.parse_fbs!(handler.call) logger.debug("DEBUG: RestGraph: called check_handler, parsed:" \ " #{rest_graph.data.inspect}") end |
.rest_graph_check_rg_session ⇒ Object
275 276 277 278 279 280 281 |
# File 'lib/rest-graph/rails_util.rb', line 275 def rest_graph_check_rg_session return if rest_graph. || !rest_graph_oget(:write_session) || !(fbs = session[rest_graph_storage_key]) rest_graph.parse_fbs!(fbs) logger.debug("DEBUG: RestGraph: detected rest-graph session, parsed:" \ " #{rest_graph.data.inspect}") end |
.rest_graph_extract_options(options, method) ⇒ Object
353 354 355 356 |
# File 'lib/rest-graph/rails_util.rb', line 353 def , method # Hash[] is for ruby 1.8.7 Hash[.send(method){ |(k, v)| RestGraph::Attributes.member?(k) }] end |
.rest_graph_filter_uri(uri) ⇒ Object
334 335 336 337 338 339 340 341 |
# File 'lib/rest-graph/rails_util.rb', line 334 def rest_graph_filter_uri uri URI.parse(URI.encode(uri)).tap{ |uri| uri.query = uri.query.split('&').reject{ |q| q =~ /^(code|session|signed_request)\=/ }.join('&') if uri.query uri.query = nil if uri.query.blank? }.to_s end |
.rest_graph_in_canvas? ⇒ Boolean
343 344 345 |
# File 'lib/rest-graph/rails_util.rb', line 343 def rest_graph_in_canvas? !rest_graph_oget(:canvas).blank? end |
.rest_graph_normalized_request_uri ⇒ Object
begin misc ================================
321 322 323 324 325 326 327 328 329 330 331 332 |
# File 'lib/rest-graph/rails_util.rb', line 321 def rest_graph_normalized_request_uri uri = if rest_graph_in_canvas? # rails 3 uses newer rack which has fullpath "http://apps.facebook.com/#{rest_graph_oget(:canvas)}" + (request.respond_to?(:fullpath) ? request.fullpath : request.request_uri) else request.url end rest_graph_filter_uri(uri) end |
.rest_graph_oget(key) ⇒ Object
begin options utility =======================
175 176 177 178 179 180 181 |
# File 'lib/rest-graph/rails_util.rb', line 175 def rest_graph_oget key if .has_key?(key) [key] else RestGraph.send("default_#{key}") end end |
.rest_graph_options_ctl ⇒ Object
183 184 185 |
# File 'lib/rest-graph/rails_util.rb', line 183 def @rest_graph_options_ctl ||= {} end |
.rest_graph_options_new ⇒ Object
187 188 189 |
# File 'lib/rest-graph/rails_util.rb', line 187 def @rest_graph_options_new ||= {} end |
.rest_graph_storage_key ⇒ Object
begin check ================================
258 259 260 |
# File 'lib/rest-graph/rails_util.rb', line 258 def rest_graph_storage_key "rest_graph_fbs_#{rest_graph_oget(:app_id)}" end |
.rest_graph_write_rg_cookies ⇒ Object
311 312 313 314 315 |
# File 'lib/rest-graph/rails_util.rb', line 311 def return if !rest_graph_oget(:write_cookies) [rest_graph_storage_key] = fbs = rest_graph.fbs logger.debug("DEBUG: RestGraph: wrote cookies: fbs => #{fbs}") end |
.rest_graph_write_rg_fbs ⇒ Object
end check ================================
begin write ================================
292 293 294 295 296 297 |
# File 'lib/rest-graph/rails_util.rb', line 292 def rest_graph_write_rg_fbs .delete("fbs_#{rest_graph.app_id}") rest_graph_write_rg_handler rest_graph_write_rg_session end |
.rest_graph_write_rg_handler(handler = rest_graph_oget(:write_handler)) ⇒ Object
299 300 301 302 303 |
# File 'lib/rest-graph/rails_util.rb', line 299 def rest_graph_write_rg_handler handler=rest_graph_oget(:write_handler) return if !handler handler.call(fbs = rest_graph.fbs) logger.debug("DEBUG: RestGraph: called write_handler: fbs => #{fbs}") end |
.rest_graph_write_rg_session ⇒ Object
305 306 307 308 309 |
# File 'lib/rest-graph/rails_util.rb', line 305 def rest_graph_write_rg_session return if !rest_graph_oget(:write_session) session[rest_graph_storage_key] = fbs = rest_graph.fbs logger.debug("DEBUG: RestGraph: wrote session: fbs => #{fbs}") end |
Instance Method Details
#rest_graph ⇒ Object
override this if you need different app_id and secret
104 105 106 |
# File 'lib/rest-graph/rails_util.rb', line 104 def rest_graph @rest_graph ||= RestGraph.new() end |
#rest_graph_authorize(error = nil, force_redirect = true) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/rest-graph/rails_util.rb', line 114 def error=nil, force_redirect=true logger.warn("WARN: RestGraph: #{error.inspect}") if force_redirect || @rest_graph_authorize_url = rest_graph.( {:redirect_uri => rest_graph_normalized_request_uri, :scope => rest_graph_oget(:auto_authorize_scope)}. merge(rest_graph_oget(:auto_authorize_options))) logger.debug("DEBUG: RestGraph: redirect to #{@rest_graph_authorize_url}") .delete("fbs_#{rest_graph.app_id}") end end |
#rest_graph_authorize_body(redirect_url = @rest_graph_authorize_url) ⇒ Object
162 163 164 165 166 167 168 169 170 |
# File 'lib/rest-graph/rails_util.rb', line 162 def redirect_url=@rest_graph_authorize_url <<-HTML <div> Please <a href="#{CGI.escapeHTML(redirect_url)}" target="_top">authorize</a> if this page is not automatically redirected. </div> HTML end |
#rest_graph_authorize_redirect ⇒ Object
override this if you want the simple redirect_to
131 132 133 134 135 136 137 138 |
# File 'lib/rest-graph/rails_util.rb', line 131 def unless rest_graph_in_canvas? redirect_to @rest_graph_authorize_url else rest_graph_js_redirect(@rest_graph_authorize_url, ) end end |
#rest_graph_js_redirect(redirect_url, body = '') ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/rest-graph/rails_util.rb', line 140 def rest_graph_js_redirect redirect_url, body='' render :inline => <<-HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <script type="text/javascript"> window.top.location.href = '#{redirect_url}' </script> <noscript> <meta http-equiv="refresh" content="0;url=#{ CGI.escapeHTML(redirect_url)}"/> <meta http-equiv="window-target" content="_top"/> </noscript> </head> <body> #{body} </bodt> </html> HTML end |
#rest_graph_on_access_token_error(error = nil) ⇒ Object Also known as: rest_graph_on_error
108 109 110 |
# File 'lib/rest-graph/rails_util.rb', line 108 def rest_graph_on_access_token_error error=nil (error, false) end |
#rest_graph_setup(options = {}) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/rest-graph/rails_util.rb', line 71 def rest_graph_setup ={} .merge!((, :reject)) .merge!((, :select)) # we'll need to reinitialize rest_graph with the new options, # otherwise if you're calling rest_graph before rest_graph_setup, # you'll end up with default options without the ones you've passed # into rest_graph_setup. rest_graph.send(:initialize, ) rest_graph_check_params_signed_request # canvas rest_graph_check_params_session # i think it would be deprecated # for js sdk (canvas or not) rest_graph_check_code # oauth api # there are above 4 ways to check the user identity! # if nor of them passed, then we can suppose the user # didn't authorize for us, but we can check if user has authorized # before, in that case, the fbs would be inside session, # as we just saved it there rest_graph_check_rg_fbs # check rest-graph storage if rest_graph_oget(:ensure_authorized) && !rest_graph. ('ensure authorized') false # action halt, redirect to do authorize, # eagerly, as opposed to auto_authorize else true # keep going end end |