rest-graph 2.0.0 → 2.0.1

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/CHANGES.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # CHANGES
2
2
 
3
+ ## rest-graph 2.0.1 -- 2011-11-25
4
+
5
+ ### Bugs fixes back ported from [rest-more][]
6
+
7
+ * [RestGraph] Now we're using POST in `authorize!` to exchange the
8
+ access_token with the code instead of GET. If we're using GET,
9
+ we would run into a risk where a user might use the code to
10
+ get other people's access_token via the cache. Using POST would
11
+ prevent this because POSTs are not cached.
12
+
13
+ * [RestGraph::RailsUtil] Fixed a serious bug. The bug would jump up if
14
+ you're using :write_session or :write_cookies or :write_handler along
15
+ with :auto_authorize, for example:
16
+ `rest_graph_setup(:auto_authorize => true, :write_session => true)`
17
+ The problem is that RestGraph::RailsUtil is not removing the invalid
18
+ access_token stored in session or cookie, and yet it is considered
19
+ authorized, making redirecting to Facebook and redirecting back doesn't
20
+ update the access_token. `rest_graph_cleanup` is introduced to remove
21
+ all invalid access_tokens, which would get called once the user is
22
+ redirected to Facebook, fixing this bug.
23
+
24
+ [rest-more]: https://github.com/cardinalblue/rest-more
25
+
3
26
  ## rest-graph 2.0.0 -- 2011-10-08
4
27
 
5
28
  We have moved the development from rest-graph to [rest-core][].
data/README.md CHANGED
@@ -13,7 +13,7 @@ an experienced Ruby programmer, you might also want to look at
13
13
  ## LINKS:
14
14
 
15
15
  * [github](https://ithub.com/cardinalblue/rest-graph)
16
- * [rubygems](http://rubygems.org/gems/rest-graph)
16
+ * [rubygems](https://rubygems.org/gems/rest-graph)
17
17
  * [rdoc](http://rdoc.info/projects/cardinalblue/rest-graph)
18
18
  * [mailing list](http://groups.google.com/group/rest-graph/topics)
19
19
 
@@ -118,10 +118,10 @@ class ApplicationController < ActionController::Base
118
118
  end
119
119
 
120
120
  def filter_session
121
- rest_graph_setup(:write_session => true)
121
+ rest_graph_setup(:write_session => true, :auto_authorize => true)
122
122
  end
123
123
 
124
124
  def filter_cookies
125
- rest_graph_setup(:write_cookies => true)
125
+ rest_graph_setup(:write_cookies => true, :auto_authorize => true)
126
126
  end
127
127
  end
@@ -3,6 +3,16 @@
3
3
  # Specifies gem version of Rails to use when vendor/rails is not present
4
4
  RAILS_GEM_VERSION = '2.3.14' unless defined? RAILS_GEM_VERSION
5
5
 
6
+ # monkey patch from https://github.com/rails/rails/pull/3473
7
+ class MissingSourceFile < LoadError #:nodoc:
8
+ REGEXPS = [
9
+ [/^no such file to load -- (.+)$/i, 1],
10
+ [/^Missing \w+ (file\s*)?([^\s]+.rb)$/i, 2],
11
+ [/^Missing API definition file in (.+)$/i, 1],
12
+ [/^cannot load such file -- (.+)$/i, 1]
13
+ ]
14
+ end
15
+
6
16
  # Bootstrap the Rails environment, frameworks, and default configuration
7
17
  require File.join(File.dirname(__FILE__), 'boot')
8
18
 
@@ -166,6 +166,32 @@ class ApplicationControllerTest < ActionController::TestCase
166
166
  assert_equal '["yeti"]', @response.body
167
167
  end
168
168
 
169
+ def test_wrong_session
170
+ WebMock.reset!
171
+ stub_request(:get, 'https://graph.facebook.com/me').
172
+ to_return(:body => '{"error":{"type":"OAuthException"}}')
173
+
174
+ session = @request.session
175
+ key = RestGraph::RailsUtil.rest_graph_storage_key
176
+ session[key] = 'bad'
177
+
178
+ get(:session_)
179
+ assert_equal nil, session[key]
180
+ end
181
+
182
+ def test_wrong_cookies
183
+ WebMock.reset!
184
+ stub_request(:get, 'https://graph.facebook.com/me').
185
+ to_return(:body => '{"error":{"type":"OAuthException"}}')
186
+
187
+ cookies = @request.cookies
188
+ key = RestGraph::RailsUtil.rest_graph_storage_key
189
+ session[key] = 'bad'
190
+
191
+ get(:cookies_)
192
+ assert_equal nil, cookies[key]
193
+ end
194
+
169
195
  def test_error
170
196
  get(:error)
171
197
  rescue => e
@@ -118,10 +118,10 @@ class ApplicationController < ActionController::Base
118
118
  end
119
119
 
120
120
  def filter_session
121
- rest_graph_setup(:write_session => true)
121
+ rest_graph_setup(:write_session => true, :auto_authorize => true)
122
122
  end
123
123
 
124
124
  def filter_cookies
125
- rest_graph_setup(:write_cookies => true)
125
+ rest_graph_setup(:write_cookies => true, :auto_authorize => true)
126
126
  end
127
127
  end
@@ -166,6 +166,32 @@ class ApplicationControllerTest < ActionController::TestCase
166
166
  assert_equal '["yeti"]', @response.body
167
167
  end
168
168
 
169
+ def test_wrong_session
170
+ WebMock.reset!
171
+ stub_request(:get, 'https://graph.facebook.com/me').
172
+ to_return(:body => '{"error":{"type":"OAuthException"}}')
173
+
174
+ session = @request.session
175
+ key = RestGraph::RailsUtil.rest_graph_storage_key
176
+ session[key] = 'bad'
177
+
178
+ get(:session_)
179
+ assert_equal nil, session[key]
180
+ end
181
+
182
+ def test_wrong_cookies
183
+ WebMock.reset!
184
+ stub_request(:get, 'https://graph.facebook.com/me').
185
+ to_return(:body => '{"error":{"type":"OAuthException"}}')
186
+
187
+ cookies = @request.cookies
188
+ key = RestGraph::RailsUtil.rest_graph_storage_key
189
+ session[key] = 'bad'
190
+
191
+ get(:cookies_)
192
+ assert_equal nil, cookies[key]
193
+ end
194
+
169
195
  def test_error
170
196
  get(:error)
171
197
  rescue => e
@@ -408,10 +408,10 @@ class RestGraph < RestGraphStruct
408
408
  end
409
409
 
410
410
  def authorize! opts={}
411
- query = {:client_id => app_id, :client_secret => secret}.merge(opts)
411
+ payload = {:client_id => app_id, :client_secret => secret}.merge(opts)
412
412
  self.data = Rack::Utils.parse_query(
413
413
  request({:auto_decode => false}.merge(opts),
414
- [:get, url('oauth/access_token', query)]))
414
+ [:post, url('oauth/access_token'), payload]))
415
415
  end
416
416
 
417
417
 
@@ -122,7 +122,7 @@ module RestGraph::RailsUtil
122
122
 
123
123
  logger.debug("DEBUG: RestGraph: redirect to #{@rest_graph_authorize_url}")
124
124
 
125
- cookies.delete("fbs_#{rest_graph.app_id}")
125
+ rest_graph_cleanup
126
126
  rest_graph_authorize_redirect
127
127
  end
128
128
  end
@@ -318,6 +318,13 @@ module RestGraph::RailsUtil
318
318
 
319
319
 
320
320
  # ==================== begin misc ================================
321
+ def rest_graph_cleanup
322
+ cookies.delete("fbs_#{rest_graph.app_id}")
323
+ cookies.delete("fbsr_#{rest_graph.app_id}")
324
+ cookies.delete(rest_graph_storage_key)
325
+ session.delete(rest_graph_storage_key)
326
+ end
327
+
321
328
  def rest_graph_normalized_request_uri
322
329
  uri = if rest_graph_in_canvas?
323
330
  # rails 3 uses newer rack which has fullpath
@@ -1,4 +1,4 @@
1
1
 
2
2
  require 'rest-graph/core'
3
3
 
4
- RestGraph::VERSION = '2.0.0'
4
+ RestGraph::VERSION = '2.0.1'
@@ -2,13 +2,13 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rest-graph"
5
- s.version = "2.0.0"
5
+ s.version = "2.0.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = [
9
9
  "Cardinal Blue",
10
10
  "Lin Jen-Shin (godfat)"]
11
- s.date = "2011-10-08"
11
+ s.date = "2011-11-25"
12
12
  s.description = "A lightweight Facebook Graph API client\n\nWe have moved the development from rest-graph to [rest-core][].\nBy now on, we would only fix bugs in rest-graph rather than adding\nfeatures, and we would only backport important changes from rest-core\nonce in a period. If you want the latest goodies, please see [rest-core][]\nOtherwise, you can stay with rest-graph with bugs fixes.\n\n[rest-core]: https://github.com/cardinalblue/rest-core"
13
13
  s.email = ["dev (XD) cardinalblue.com"]
14
14
  s.files = [
@@ -22,9 +22,11 @@ describe RestGraph do
22
22
  end
23
23
 
24
24
  should 'do authorizing and parse result and save it in data' do
25
- stub_request(:get, 'https://graph.facebook.com/oauth/access_token?' \
26
- 'client_id=29&client_secret=18&code=zzz&' \
27
- 'redirect_uri=http%3A%2F%2Fzzz.tw').
25
+ stub_request(:post, 'https://graph.facebook.com/oauth/access_token'). \
26
+ with(:body => {'client_id' => '29' ,
27
+ 'client_secret' => '18' ,
28
+ 'redirect_uri' => 'http://zzz.tw',
29
+ 'code' => 'zzz'}).
28
30
  to_return(:body => 'access_token=baken&expires=2918')
29
31
 
30
32
  result = {'access_token' => 'baken', 'expires' => '2918'}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-graph
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-08 00:00:00.000000000Z
13
+ date: 2011-11-25 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: ! 'A lightweight Facebook Graph API client
16
16