fbauth 1.2.0.1 → 1.2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/facebook_auth_functions.rb +2 -2
- data/lib/fbauth.rb +6 -6
- metadata +4 -10
- data/lib/facebook_auth.rb +0 -88
- data/lib/facebook_config.rb +0 -20
- data/lib/facebook_decoder.rb +0 -30
- data/lib/facebook_graph.rb +0 -26
- data/lib/facebook_http.rb +0 -97
- data/lib/facebook_query.rb +0 -16
@@ -11,11 +11,11 @@ module FacebookAuthFunctions
|
|
11
11
|
def require_facebook_auth
|
12
12
|
setup_facebook_auth
|
13
13
|
if @facebook_auth.nil?
|
14
|
-
redirect_to build_auth_url
|
14
|
+
redirect_to build_auth_url
|
15
15
|
end
|
16
16
|
if signed_params_present? && request.post?
|
17
17
|
# If Facebook POST with signed_params, redirect to original URI using GET
|
18
|
-
redirect_to request.request_uri
|
18
|
+
redirect_to request.request_uri
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
data/lib/fbauth.rb
CHANGED
@@ -9,9 +9,9 @@
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
require '
|
13
|
-
require '
|
14
|
-
require '
|
15
|
-
require '
|
16
|
-
require '
|
17
|
-
require '
|
12
|
+
require 'fbauth/decoder.rb'
|
13
|
+
require 'fbauth/auth.rb'
|
14
|
+
require 'fbauth/config.rb'
|
15
|
+
require 'fbauth/http.rb'
|
16
|
+
require 'fbauth/graph.rb'
|
17
|
+
require 'fbauth/query.rb'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fbauth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 75
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 1.2.0.
|
10
|
+
- 2
|
11
|
+
version: 1.2.0.2
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Three Wise Men Inc.
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-03-
|
19
|
+
date: 2011-03-09 00:00:00 -05:00
|
20
20
|
default_executable:
|
21
21
|
dependencies: []
|
22
22
|
|
@@ -29,12 +29,6 @@ extensions: []
|
|
29
29
|
extra_rdoc_files:
|
30
30
|
- README.mdown
|
31
31
|
files:
|
32
|
-
- lib/facebook_auth.rb
|
33
|
-
- lib/facebook_config.rb
|
34
|
-
- lib/facebook_decoder.rb
|
35
|
-
- lib/facebook_graph.rb
|
36
|
-
- lib/facebook_http.rb
|
37
|
-
- lib/facebook_query.rb
|
38
32
|
- lib/fbauth.rb
|
39
33
|
- app/controllers/facebook_auth_functions.rb
|
40
34
|
- app/helpers/fbauth_helper.rb
|
data/lib/facebook_auth.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
class FacebookAuth
|
2
|
-
|
3
|
-
attr_accessor :access_token, :expires, :uid
|
4
|
-
attr_accessor :user_data, :validation_error
|
5
|
-
|
6
|
-
def self.create parms
|
7
|
-
auth = self.new
|
8
|
-
# Sense old-style FB auth structure, or new-style
|
9
|
-
if parms.has_key?('access_token')
|
10
|
-
auth.access_token = parms['access_token']
|
11
|
-
auth.uid = parms['uid']
|
12
|
-
auth.expires_epoch = parms['expires'].to_i unless parms['expires'].nil?
|
13
|
-
elsif parms.has_key?('oauth_token')
|
14
|
-
auth.access_token = parms['oauth_token']
|
15
|
-
auth.uid = parms['user_id']
|
16
|
-
auth.expires_epoch = parms['expires'].to_i if parms.has_key?('expires')
|
17
|
-
end
|
18
|
-
auth
|
19
|
-
end
|
20
|
-
|
21
|
-
def expires_epoch= epoch
|
22
|
-
# Need to convolve for SanFran TZ?
|
23
|
-
self.expires = Time.at(epoch)
|
24
|
-
end
|
25
|
-
|
26
|
-
def is_expired?
|
27
|
-
if self.expires.nil?
|
28
|
-
true
|
29
|
-
else
|
30
|
-
self.expires < Time.now
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def validate
|
35
|
-
valid = false
|
36
|
-
msgs = []
|
37
|
-
unless self.uid.nil? || self.access_token.nil?
|
38
|
-
begin
|
39
|
-
self.user_data = FacebookGraph.new(self.access_token).call(self.uid)
|
40
|
-
rescue => e
|
41
|
-
msgs << "Error calling FacebookGraph - #{e}"
|
42
|
-
end
|
43
|
-
if self.user_data && self.user_data.has_key?('error')
|
44
|
-
msgs << self.user_data['error'].inspect
|
45
|
-
self.user_data = nil
|
46
|
-
elsif self.user_data
|
47
|
-
valid = true
|
48
|
-
end
|
49
|
-
else
|
50
|
-
msgs << "UID provided is nil" if self.uid.nil?
|
51
|
-
msgs << "access_token provided is nil" if self.access_token.nil?
|
52
|
-
end
|
53
|
-
self.validation_error = msgs.join(", ") unless valid
|
54
|
-
return valid
|
55
|
-
end
|
56
|
-
|
57
|
-
def session_data
|
58
|
-
return {
|
59
|
-
'access_token' => self.access_token,
|
60
|
-
'uid' => self.uid,
|
61
|
-
'expires' => self.expires.to_i
|
62
|
-
}.to_json
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
# User data typically looks like this:
|
68
|
-
#
|
69
|
-
# {
|
70
|
-
# "id"=>"849395216",
|
71
|
-
# "name"=>"Steven Vetzal",
|
72
|
-
# "first_name"=>"Steven"
|
73
|
-
# "last_name"=>"Vetzal",
|
74
|
-
# "gender"=>"male",
|
75
|
-
# "verified"=>true,
|
76
|
-
# "link"=>"http://www.facebook.com/svetzal",
|
77
|
-
# "timezone"=>-5,
|
78
|
-
# "locale"=>"en_US",
|
79
|
-
# "location"=>{
|
80
|
-
# "name"=>"Oshawa, Ontario",
|
81
|
-
# "id"=>"114418101908145"
|
82
|
-
# },
|
83
|
-
# "hometown"=>{
|
84
|
-
# "name"=>"Oshawa, Ontario",
|
85
|
-
# "id"=>"114418101908145"
|
86
|
-
# },
|
87
|
-
# "updated_time"=>"2010-04-28T12:57:20+0000",
|
88
|
-
# }
|
data/lib/facebook_config.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class FacebookConfig
|
2
|
-
def self.[](key)
|
3
|
-
get_environment[key].value
|
4
|
-
end
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def self.get_environment
|
9
|
-
read_yaml[ENV["RAILS_ENV"]]
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.read_yaml
|
13
|
-
file = File.join(::RAILS_ROOT, 'config', 'facebook.yml')
|
14
|
-
YAML.parse(ERB.new(IO.read(file)).result)
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.app_url
|
18
|
-
"http://apps.facebook.com/#{self['app_context']}/"
|
19
|
-
end
|
20
|
-
end
|
data/lib/facebook_decoder.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'active_support'
|
2
|
-
require 'digest/sha2'
|
3
|
-
|
4
|
-
class FacebookDecoder
|
5
|
-
|
6
|
-
def self.decode data
|
7
|
-
unless data.nil?
|
8
|
-
sig, b64udata = data.split('.')
|
9
|
-
unless b64udata.nil?
|
10
|
-
json = b64udata.tr('-_', '+/').unpack('m')[0]
|
11
|
-
begin
|
12
|
-
parms = JSON.parse(json)
|
13
|
-
rescue => e
|
14
|
-
begin
|
15
|
-
parms = JSON.parse(json + '"}')
|
16
|
-
rescue => e2
|
17
|
-
begin
|
18
|
-
parms = JSON.parse(json + '}')
|
19
|
-
rescue => e3
|
20
|
-
raise "Unable to parse json structure - '#{json}'"
|
21
|
-
parms = {}
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
parms
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
data/lib/facebook_graph.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'uri'
|
3
|
-
|
4
|
-
class FacebookGraph
|
5
|
-
include FacebookHttp
|
6
|
-
|
7
|
-
FB_GRAPH_URL = "https://graph.facebook.com"
|
8
|
-
|
9
|
-
def initialize(access_token = nil, options = {})
|
10
|
-
@options = options.merge({ :access_token => access_token })
|
11
|
-
end
|
12
|
-
|
13
|
-
# Generic Graph call to lookup data for any path
|
14
|
-
def call(path, options = {})
|
15
|
-
get "#{FB_GRAPH_URL}/#{path}", merged_options(options)
|
16
|
-
end
|
17
|
-
|
18
|
-
# Post item to member's wall
|
19
|
-
# Available options: message, picture, link, name, caption, description
|
20
|
-
def publish_to_member_feed(uid, options)
|
21
|
-
raise "access_token required" unless has_access_token?(options)
|
22
|
-
if %w{staging production}.include? Rails.env
|
23
|
-
post "#{FB_GRAPH_URL}/#{uid}/feed", merged_options(options)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/lib/facebook_http.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'benchmark'
|
2
|
-
require 'net/http'
|
3
|
-
require 'net/https' # Required for Ruby 1.8.7
|
4
|
-
require 'uri'
|
5
|
-
require 'cgi'
|
6
|
-
|
7
|
-
module FacebookHttp
|
8
|
-
|
9
|
-
def build_get_url(url, params = {})
|
10
|
-
q = build_query_string(params)
|
11
|
-
if q
|
12
|
-
url + q
|
13
|
-
else
|
14
|
-
url
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def caching_enabled?
|
19
|
-
ActionController::Base.cache_store.class.name == "ActiveSupport::Cache::MemCacheStore"
|
20
|
-
end
|
21
|
-
|
22
|
-
def get(url, params = {})
|
23
|
-
json = nil
|
24
|
-
uri = URI.parse(build_get_url(url, params))
|
25
|
-
|
26
|
-
json = Rails.cache.read(uri.to_s) if caching_enabled?
|
27
|
-
if json.nil?
|
28
|
-
bench = Benchmark.measure do
|
29
|
-
http = Net::HTTP.new uri.host, uri.port
|
30
|
-
begin
|
31
|
-
http.use_ssl = (uri.scheme == "https")
|
32
|
-
req = Net::HTTP::Get.new(uri.request_uri)
|
33
|
-
response = http.request(req)
|
34
|
-
raise "Facebook error response #{response.code} - #{response.body}" unless response.code == '200'
|
35
|
-
begin
|
36
|
-
json = JSON.parse(response.body)
|
37
|
-
rescue => e
|
38
|
-
raise "Error parsing facebook response: #{response.body}"
|
39
|
-
end
|
40
|
-
ensure
|
41
|
-
http.finish if http.started?
|
42
|
-
end
|
43
|
-
end
|
44
|
-
logger.warn("Facebook GET call to #{uri.to_s} completed in #{bench.real} seconds")
|
45
|
-
Rails.cache.write(uri.to_s, json, :expires_in => 60) if json && caching_enabled?
|
46
|
-
end
|
47
|
-
json
|
48
|
-
end
|
49
|
-
|
50
|
-
def post(url, params = {})
|
51
|
-
json = nil
|
52
|
-
uri = URI.parse(url)
|
53
|
-
bench = Benchmark.measure do
|
54
|
-
http = Net::HTTP.new uri.host, uri.port
|
55
|
-
begin
|
56
|
-
http.use_ssl = (uri.scheme == "https")
|
57
|
-
req = Net::HTTP::Post.new(uri.path)
|
58
|
-
req.set_form_data(params)
|
59
|
-
response = http.request(req)
|
60
|
-
raise "Facebook error response #{response.code} - #{response.body}" unless response.code == '200'
|
61
|
-
begin
|
62
|
-
json = JSON.parse(response.body)
|
63
|
-
rescue => e
|
64
|
-
raise "Error parsing Facebook response: #{response.body}"
|
65
|
-
end
|
66
|
-
ensure
|
67
|
-
http.finish if http.started?
|
68
|
-
end
|
69
|
-
end
|
70
|
-
logger.warn("Facebook POST call to #{uri.to_s} completed in #{bench.real} seconds")
|
71
|
-
json
|
72
|
-
end
|
73
|
-
|
74
|
-
def build_query_string options={}
|
75
|
-
params = []
|
76
|
-
str_keys = options.keys.collect{ |k| k.to_s }
|
77
|
-
str_keys.sort.each do |str_key|
|
78
|
-
key = str_key.to_sym
|
79
|
-
value = options[key]
|
80
|
-
params << "#{key.to_s}=#{URI.escape(value.to_s)}" unless value.nil?
|
81
|
-
end
|
82
|
-
"?#{params.join('&')}" unless params.empty?
|
83
|
-
end
|
84
|
-
|
85
|
-
def merged_options(options = {})
|
86
|
-
options.merge!(@options) if @options
|
87
|
-
options
|
88
|
-
end
|
89
|
-
|
90
|
-
def has_access_token?(options = {})
|
91
|
-
merged_options.has_key? :access_token
|
92
|
-
end
|
93
|
-
|
94
|
-
def logger
|
95
|
-
Rails.logger
|
96
|
-
end
|
97
|
-
end
|
data/lib/facebook_query.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'uri'
|
2
|
-
|
3
|
-
class FacebookQuery
|
4
|
-
include FacebookHttp
|
5
|
-
|
6
|
-
FB_API_URL = "https://api.facebook.com/method/fql.query"
|
7
|
-
|
8
|
-
def initialize(access_token = nil, options = {})
|
9
|
-
@options = options.merge({ :access_token => access_token })
|
10
|
-
@options.merge!({ :format => "JSON" }) unless @options.has_key?(:format)
|
11
|
-
end
|
12
|
-
|
13
|
-
def fql(query, options = {})
|
14
|
-
get FB_API_URL, merged_options(options.merge({ :query => query }))
|
15
|
-
end
|
16
|
-
end
|