fbauth 1.2.0.1 → 1.2.0.2
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/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
|