fbauth 0.9.0

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/README.mdown ADDED
@@ -0,0 +1,3 @@
1
+ FBAuth
2
+ ------
3
+
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ ActionView::Base.send :include, FbauthHelper
@@ -0,0 +1,72 @@
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
+ auth.access_token = parms['access_token']
9
+ auth.uid = parms['uid']
10
+ auth.expires_epoch = parms['expires'].to_i unless parms['expires'].nil?
11
+ auth
12
+ end
13
+
14
+ def expires_epoch= epoch
15
+ # Need to convolve for SanFran TZ?
16
+ self.expires = Time.at(epoch)
17
+ end
18
+
19
+ def is_expired?
20
+ if self.expires.nil?
21
+ true
22
+ else
23
+ self.expires < Time.now
24
+ end
25
+ end
26
+
27
+ def validate
28
+ valid = false
29
+ unless self.uid.nil? || self.access_token.nil?
30
+ self.user_data = FacebookGraph.call(self.uid, self.access_token)
31
+ if self.user_data.has_key? 'error'
32
+ self.validation_error = self.user_data['error'].inspect
33
+ self.user_data = nil
34
+ else
35
+ valid = true
36
+ end
37
+ end
38
+ return valid
39
+ end
40
+
41
+ def session_data
42
+ return {
43
+ 'access_token' => self.access_token,
44
+ 'uid' => self.uid,
45
+ 'expires' => self.expires.to_i
46
+ }.to_json
47
+ end
48
+
49
+ end
50
+
51
+ # User data typically looks like this:
52
+ #
53
+ # {
54
+ # "id"=>"849395216",
55
+ # "name"=>"Steven Vetzal",
56
+ # "first_name"=>"Steven"
57
+ # "last_name"=>"Vetzal",
58
+ # "gender"=>"male",
59
+ # "verified"=>true,
60
+ # "link"=>"http://www.facebook.com/svetzal",
61
+ # "timezone"=>-5,
62
+ # "locale"=>"en_US",
63
+ # "location"=>{
64
+ # "name"=>"Oshawa, Ontario",
65
+ # "id"=>"114418101908145"
66
+ # },
67
+ # "hometown"=>{
68
+ # "name"=>"Oshawa, Ontario",
69
+ # "id"=>"114418101908145"
70
+ # },
71
+ # "updated_time"=>"2010-04-28T12:57:20+0000",
72
+ # }
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,47 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ class FacebookGraph
5
+
6
+ def self.call(path, access_token = nil, options = {})
7
+ params = []
8
+ options.keys.each do |k|
9
+ params << "#{k}=#{options[k]}" unless options[k].nil?
10
+ end
11
+ token = access_token ? CGI::escape(access_token) : nil
12
+ url = "https://graph.facebook.com/#{path}&access_token=#{token}"
13
+ url = "#{url}?#{params.join('&')}" unless params.empty?
14
+ uri = URI.parse(url)
15
+ http = Net::HTTP.new uri.host, uri.port
16
+ begin
17
+ http.use_ssl = (uri.scheme == "https")
18
+ req = Net::HTTP::Get.new(uri.path)
19
+ response = http.request(req)
20
+ json = JSON.parse(response.body)
21
+ ensure
22
+ http.finish if http.started?
23
+ end
24
+ json
25
+ end
26
+
27
+ # Available options:
28
+ # message, picture, link, name, caption, description
29
+ def self.publish_to_member_feed(uid, access_token, options)
30
+ token = access_token ? CGI::escape(access_token) : nil
31
+ if %w{staging production}.include? ENV['RAILS_ENV']
32
+ url = "https://graph.facebook.com/#{uid}/feed&access_token=#{token}"
33
+ uri = URI.parse(url)
34
+ http = Net::HTTP.new uri.host, uri.port
35
+ begin
36
+ http.use_ssl = (uri.scheme == "https")
37
+ req = Net::HTTP::Post.new(uri.path)
38
+ req.set_form_data(options)
39
+ response = http.request(req)
40
+ json = JSON.parse(response.body)
41
+ ensure
42
+ http.finish if http.started?
43
+ end
44
+ json
45
+ end
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fbauth
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 9
8
+ - 0
9
+ version: 0.9.0
10
+ platform: ruby
11
+ authors:
12
+ - Three Wise Men Inc.
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-16 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: This library simplifies life when it comes to authentication in a Facebook iFrame application
22
+ email: info @nospam@ threewisemen.ca
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - README.mdown
29
+ files:
30
+ - lib/facebook_auth.rb
31
+ - lib/facebook_config.rb
32
+ - lib/facebook_graph.rb
33
+ - init.rb
34
+ - README.mdown
35
+ has_rdoc: true
36
+ homepage: http://github.com/ThreeWiseMen/fbauth
37
+ licenses:
38
+ - Simplified BSD License
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ requirements: []
61
+
62
+ rubyforge_project:
63
+ rubygems_version: 1.3.7
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: Authentication framework for Rails Facebook apps
67
+ test_files: []
68
+