fb_graph 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -13,6 +13,7 @@ begin
13
13
  gem.add_dependency 'json'
14
14
  gem.add_dependency 'activesupport'
15
15
  gem.add_dependency 'rest-client', '>= 1.4'
16
+ gem.add_dependency 'oauth2', '>= 0.0.10'
16
17
  gem.add_development_dependency 'rspec'
17
18
  gem.add_development_dependency 'rcov'
18
19
  gem.add_development_dependency 'fakeweb'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/fb_graph.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{fb_graph}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["nov matake"]
12
- s.date = %q{2010-08-04}
12
+ s.date = %q{2010-08-05}
13
13
  s.description = %q{A Ruby wrapper for Facebook Graph API}
14
14
  s.email = %q{nov@matake.jp}
15
15
  s.extra_rdoc_files = [
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
28
28
  "fb_graph.gemspec",
29
29
  "lib/fb_graph.rb",
30
30
  "lib/fb_graph/album.rb",
31
+ "lib/fb_graph/auth.rb",
32
+ "lib/fb_graph/auth/cookie.rb",
31
33
  "lib/fb_graph/collection.rb",
32
34
  "lib/fb_graph/comment.rb",
33
35
  "lib/fb_graph/comparison.rb",
@@ -262,6 +264,7 @@ Gem::Specification.new do |s|
262
264
  s.add_runtime_dependency(%q<json>, [">= 0"])
263
265
  s.add_runtime_dependency(%q<activesupport>, [">= 0"])
264
266
  s.add_runtime_dependency(%q<rest-client>, [">= 1.4"])
267
+ s.add_runtime_dependency(%q<oauth2>, [">= 0.0.10"])
265
268
  s.add_development_dependency(%q<rspec>, [">= 0"])
266
269
  s.add_development_dependency(%q<rcov>, [">= 0"])
267
270
  s.add_development_dependency(%q<fakeweb>, [">= 0"])
@@ -269,6 +272,7 @@ Gem::Specification.new do |s|
269
272
  s.add_dependency(%q<json>, [">= 0"])
270
273
  s.add_dependency(%q<activesupport>, [">= 0"])
271
274
  s.add_dependency(%q<rest-client>, [">= 1.4"])
275
+ s.add_dependency(%q<oauth2>, [">= 0.0.10"])
272
276
  s.add_dependency(%q<rspec>, [">= 0"])
273
277
  s.add_dependency(%q<rcov>, [">= 0"])
274
278
  s.add_dependency(%q<fakeweb>, [">= 0"])
@@ -277,6 +281,7 @@ Gem::Specification.new do |s|
277
281
  s.add_dependency(%q<json>, [">= 0"])
278
282
  s.add_dependency(%q<activesupport>, [">= 0"])
279
283
  s.add_dependency(%q<rest-client>, [">= 1.4"])
284
+ s.add_dependency(%q<oauth2>, [">= 0.0.10"])
280
285
  s.add_dependency(%q<rspec>, [">= 0"])
281
286
  s.add_dependency(%q<rcov>, [">= 0"])
282
287
  s.add_dependency(%q<fakeweb>, [">= 0"])
data/lib/fb_graph.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'json'
3
3
  require 'restclient'
4
+ require 'oauth2'
4
5
 
5
6
  # NOTE:
6
7
  # For some reason, ActiveSupport 3.0.0 doesn'tj load whole code.
@@ -37,6 +38,7 @@ module FbGraph
37
38
 
38
39
  end
39
40
 
41
+ require 'fb_graph/auth'
40
42
  require 'fb_graph/comparison'
41
43
  require 'fb_graph/collection'
42
44
  require 'fb_graph/connections'
@@ -0,0 +1,32 @@
1
+ module FbGraph
2
+ class Auth
3
+ class VerificationFailed < FbGraph::Exception; end
4
+
5
+ attr_accessor :client, :access_token, :user
6
+
7
+ def initialize(client_id, client_secret, options = {})
8
+ @client = OAuth2::Client.new(client_id, client_secret, options.merge(
9
+ :site => FbGraph::ROOT_URL
10
+ ))
11
+ if options[:cookie].present?
12
+ from_cookie(options[:cookie])
13
+ end
14
+ end
15
+
16
+ def from_cookie(cookie)
17
+ cookie = FbGraph::Auth::Cookie.parse(self.client, cookie)
18
+ self.access_token = OAuth2::AccessToken.new(
19
+ self.client,
20
+ cookie[:access_token],
21
+ cookie[:refresh_token],
22
+ cookie[:expires]
23
+ )
24
+ self.user = FbGraph::User.new(cookie[:uid], :access_token => self.access_token)
25
+ self
26
+ end
27
+ end
28
+ end
29
+
30
+ Dir[File.dirname(__FILE__) + '/auth/*.rb'].each do |file|
31
+ require file
32
+ end
@@ -0,0 +1,41 @@
1
+ require 'digest/md5'
2
+
3
+ module FbGraph
4
+ class Auth
5
+ class Cookie
6
+ def self.parse(client, cookie)
7
+ fb_cookie_string = if cookie.is_a?(Hash)
8
+ cookie["fbs_#{client.id}"]
9
+ else
10
+ cookie
11
+ end
12
+
13
+ raise VerificationFailed.new(401, 'Facebook cookie not found') if fb_cookie_string.blank?
14
+
15
+ fb_cookie_string.gsub!(/[\\"]/, '')
16
+ signature, fb_cookie = '', {}
17
+ fb_cookie_string.split('&').each do |kv|
18
+ k, v = kv.split('=')
19
+ if k == 'sig'
20
+ signature = v
21
+ else
22
+ v = v.to_i if ['uid', 'expires'].include?(k)
23
+ fb_cookie[k] = v
24
+ end
25
+ end
26
+
27
+ signature_base_string = fb_cookie.to_a.sort do |a, b|
28
+ a[0] <=> b[0] || a[1] <=> b[1]
29
+ end.map do |(k, v)|
30
+ "#{k}=#{v}"
31
+ end.join
32
+
33
+ unless Digest::MD5.hexdigest("#{signature_base_string}#{client.secret}") == signature
34
+ raise VerificationFailed.new(401, 'Facebook cookie signature invalid')
35
+ end
36
+
37
+ fb_cookie.with_indifferent_access
38
+ end
39
+ end
40
+ end
41
+ end
data/lib/fb_graph/node.rb CHANGED
@@ -13,7 +13,7 @@ module FbGraph
13
13
  def fetch(options = {})
14
14
  options[:access_token] ||= self.access_token if self.access_token
15
15
  _fetched_ = get(options)
16
- self.class.new(_fetched_.delete(:id), _fetched_)
16
+ self.class.new(_fetched_.delete(:id), _fetched_.merge(:access_token => options[:access_token]))
17
17
  end
18
18
 
19
19
  def self.fetch(identifier, options = {})
@@ -59,7 +59,12 @@ module FbGraph
59
59
  else
60
60
  self.endpoint
61
61
  end
62
+
62
63
  params[:access_token] ||= self.access_token
64
+ if params[:access_token].is_a?(OAuth2::AccessToken)
65
+ params[:access_token] = params[:access_token].token
66
+ end
67
+
63
68
  params.delete_if do |k, v|
64
69
  v.blank?
65
70
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - nov matake
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-04 00:00:00 +09:00
17
+ date: 2010-08-05 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -55,7 +55,7 @@ dependencies:
55
55
  type: :runtime
56
56
  version_requirements: *id003
57
57
  - !ruby/object:Gem::Dependency
58
- name: rspec
58
+ name: oauth2
59
59
  prerelease: false
60
60
  requirement: &id004 !ruby/object:Gem::Requirement
61
61
  requirements:
@@ -63,11 +63,13 @@ dependencies:
63
63
  - !ruby/object:Gem::Version
64
64
  segments:
65
65
  - 0
66
- version: "0"
67
- type: :development
66
+ - 0
67
+ - 10
68
+ version: 0.0.10
69
+ type: :runtime
68
70
  version_requirements: *id004
69
71
  - !ruby/object:Gem::Dependency
70
- name: rcov
72
+ name: rspec
71
73
  prerelease: false
72
74
  requirement: &id005 !ruby/object:Gem::Requirement
73
75
  requirements:
@@ -79,7 +81,7 @@ dependencies:
79
81
  type: :development
80
82
  version_requirements: *id005
81
83
  - !ruby/object:Gem::Dependency
82
- name: fakeweb
84
+ name: rcov
83
85
  prerelease: false
84
86
  requirement: &id006 !ruby/object:Gem::Requirement
85
87
  requirements:
@@ -90,6 +92,18 @@ dependencies:
90
92
  version: "0"
91
93
  type: :development
92
94
  version_requirements: *id006
95
+ - !ruby/object:Gem::Dependency
96
+ name: fakeweb
97
+ prerelease: false
98
+ requirement: &id007 !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ type: :development
106
+ version_requirements: *id007
93
107
  description: A Ruby wrapper for Facebook Graph API
94
108
  email: nov@matake.jp
95
109
  executables: []
@@ -111,6 +125,8 @@ files:
111
125
  - fb_graph.gemspec
112
126
  - lib/fb_graph.rb
113
127
  - lib/fb_graph/album.rb
128
+ - lib/fb_graph/auth.rb
129
+ - lib/fb_graph/auth/cookie.rb
114
130
  - lib/fb_graph/collection.rb
115
131
  - lib/fb_graph/comment.rb
116
132
  - lib/fb_graph/comparison.rb