authpwn_rails 0.9.6 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.travis.yml +6 -0
  2. data/Gemfile +3 -2
  3. data/Gemfile.lock +38 -36
  4. data/README.rdoc +6 -11
  5. data/VERSION +1 -1
  6. data/authpwn_rails.gemspec +30 -22
  7. data/lib/authpwn_rails.rb +2 -2
  8. data/lib/authpwn_rails/credential_model.rb +38 -0
  9. data/lib/authpwn_rails/credentials.rb +10 -0
  10. data/lib/authpwn_rails/credentials/email.rb +30 -0
  11. data/lib/authpwn_rails/credentials/facebook.rb +77 -0
  12. data/lib/authpwn_rails/credentials/password.rb +63 -0
  13. data/lib/authpwn_rails/engine.rb +5 -7
  14. data/lib/authpwn_rails/facebook_session.rb +5 -5
  15. data/lib/authpwn_rails/generators/{session_generator.rb → all_generator.rb} +28 -9
  16. data/lib/authpwn_rails/generators/templates/001_create_users.rb +3 -11
  17. data/lib/authpwn_rails/generators/templates/002_create_credentials.rb +19 -0
  18. data/lib/authpwn_rails/generators/templates/credential.rb +16 -0
  19. data/lib/authpwn_rails/generators/templates/credentials.yml +34 -0
  20. data/lib/authpwn_rails/generators/templates/session/forbidden.html.erb +2 -2
  21. data/lib/authpwn_rails/generators/templates/session/home.html.erb +1 -1
  22. data/lib/authpwn_rails/generators/templates/session/new.html.erb +6 -6
  23. data/lib/authpwn_rails/generators/templates/session_controller.rb +1 -1
  24. data/lib/authpwn_rails/generators/templates/session_controller_test.rb +2 -2
  25. data/lib/authpwn_rails/generators/templates/user.rb +2 -2
  26. data/lib/authpwn_rails/generators/templates/users.yml +5 -8
  27. data/lib/authpwn_rails/session.rb +7 -7
  28. data/lib/authpwn_rails/session_controller.rb +15 -13
  29. data/lib/authpwn_rails/test_extensions.rb +6 -6
  30. data/lib/authpwn_rails/user_model.rb +23 -92
  31. data/test/email_credential_test.rb +50 -0
  32. data/test/facebook_controller_test.rb +7 -2
  33. data/test/facebook_credential_test.rb +74 -0
  34. data/test/helpers/db_setup.rb +4 -4
  35. data/test/helpers/fbgraph.rb +6 -2
  36. data/test/password_credential_test.rb +67 -0
  37. data/test/session_controller_api_test.rb +12 -12
  38. data/test/test_helper.rb +1 -0
  39. data/test/user_test.rb +11 -100
  40. metadata +41 -25
  41. data/lib/authpwn_rails/facebook_token_model.rb +0 -66
  42. data/lib/authpwn_rails/generators/facebook_generator.rb +0 -18
  43. data/lib/authpwn_rails/generators/templates/002_create_facebook_tokens.rb +0 -15
  44. data/lib/authpwn_rails/generators/templates/facebook_token.rb +0 -6
  45. data/lib/authpwn_rails/generators/templates/facebook_tokens.yml +0 -10
  46. data/lib/authpwn_rails/generators/users_generator.rb +0 -16
  47. data/test/facebook_token_test.rb +0 -28
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - rbx-2.0
6
+ - jruby
data/Gemfile CHANGED
@@ -1,10 +1,11 @@
1
1
  source "http://rubygems.org"
2
2
  gem "fbgraph_rails", ">= 0.2.2"
3
- gem "rails", ">= 3.1.0"
3
+ gem "rails", ">= 3.1.3"
4
4
 
5
5
  group :development do
6
6
  gem "bundler", "~> 1.0.0"
7
+ gem "flexmock", "~> 0.9.0"
7
8
  gem "jeweler", "~> 1.6.0"
8
- gem "rcov", ">= 0"
9
+ gem "rcov", ">= 0", :platform => :mri
9
10
  gem "sqlite3", ">= 1.3.3"
10
11
  end
data/Gemfile.lock CHANGED
@@ -1,33 +1,33 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- actionmailer (3.1.1)
5
- actionpack (= 3.1.1)
4
+ actionmailer (3.1.3)
5
+ actionpack (= 3.1.3)
6
6
  mail (~> 2.3.0)
7
- actionpack (3.1.1)
8
- activemodel (= 3.1.1)
9
- activesupport (= 3.1.1)
7
+ actionpack (3.1.3)
8
+ activemodel (= 3.1.3)
9
+ activesupport (= 3.1.3)
10
10
  builder (~> 3.0.0)
11
11
  erubis (~> 2.7.0)
12
12
  i18n (~> 0.6)
13
- rack (~> 1.3.2)
13
+ rack (~> 1.3.5)
14
14
  rack-cache (~> 1.1)
15
15
  rack-mount (~> 0.8.2)
16
16
  rack-test (~> 0.6.1)
17
- sprockets (~> 2.0.2)
18
- activemodel (3.1.1)
19
- activesupport (= 3.1.1)
17
+ sprockets (~> 2.0.3)
18
+ activemodel (3.1.3)
19
+ activesupport (= 3.1.3)
20
20
  builder (~> 3.0.0)
21
21
  i18n (~> 0.6)
22
- activerecord (3.1.1)
23
- activemodel (= 3.1.1)
24
- activesupport (= 3.1.1)
22
+ activerecord (3.1.3)
23
+ activemodel (= 3.1.3)
24
+ activesupport (= 3.1.3)
25
25
  arel (~> 2.2.1)
26
26
  tzinfo (~> 0.3.29)
27
- activeresource (3.1.1)
28
- activemodel (= 3.1.1)
29
- activesupport (= 3.1.1)
30
- activesupport (3.1.1)
27
+ activeresource (3.1.3)
28
+ activemodel (= 3.1.3)
29
+ activesupport (= 3.1.3)
30
+ activesupport (3.1.3)
31
31
  multi_json (~> 1.0)
32
32
  addressable (2.2.6)
33
33
  arel (2.2.1)
@@ -37,7 +37,7 @@ GEM
37
37
  addressable (~> 2.2.6)
38
38
  multipart-post (~> 1.1.3)
39
39
  rack (>= 1.1.0, < 2)
40
- fbgraph (1.8.4)
40
+ fbgraph (1.9.0)
41
41
  activesupport
42
42
  faraday (>= 0.7.5)
43
43
  hashie (>= 1.0.0)
@@ -51,8 +51,9 @@ GEM
51
51
  json (>= 1.6.1)
52
52
  oauth2 (>= 0.5.0)
53
53
  rails (>= 3.1.0)
54
+ flexmock (0.9.0)
54
55
  git (1.2.5)
55
- hashie (1.1.0)
56
+ hashie (1.2.0)
56
57
  hike (1.2.1)
57
58
  i18n (0.6.0)
58
59
  jeweler (1.6.4)
@@ -64,14 +65,14 @@ GEM
64
65
  i18n (>= 0.4.0)
65
66
  mime-types (~> 1.16)
66
67
  treetop (~> 1.4.8)
67
- mime-types (1.16)
68
+ mime-types (1.17.2)
68
69
  multi_json (1.0.3)
69
70
  multipart-post (1.1.3)
70
71
  oauth2 (0.5.1)
71
72
  faraday (~> 0.7.4)
72
73
  multi_json (~> 1.0.3)
73
- polyglot (0.3.2)
74
- rack (1.3.4)
74
+ polyglot (0.3.3)
75
+ rack (1.3.5)
75
76
  rack-cache (1.1)
76
77
  rack (>= 0.4)
77
78
  rack-mount (0.8.3)
@@ -80,28 +81,28 @@ GEM
80
81
  rack
81
82
  rack-test (0.6.1)
82
83
  rack (>= 1.0)
83
- rails (3.1.1)
84
- actionmailer (= 3.1.1)
85
- actionpack (= 3.1.1)
86
- activerecord (= 3.1.1)
87
- activeresource (= 3.1.1)
88
- activesupport (= 3.1.1)
84
+ rails (3.1.3)
85
+ actionmailer (= 3.1.3)
86
+ actionpack (= 3.1.3)
87
+ activerecord (= 3.1.3)
88
+ activeresource (= 3.1.3)
89
+ activesupport (= 3.1.3)
89
90
  bundler (~> 1.0)
90
- railties (= 3.1.1)
91
- railties (3.1.1)
92
- actionpack (= 3.1.1)
93
- activesupport (= 3.1.1)
91
+ railties (= 3.1.3)
92
+ railties (3.1.3)
93
+ actionpack (= 3.1.3)
94
+ activesupport (= 3.1.3)
94
95
  rack-ssl (~> 1.3.2)
95
96
  rake (>= 0.8.7)
96
97
  rdoc (~> 3.4)
97
98
  thor (~> 0.14.6)
98
- rake (0.9.2)
99
+ rake (0.9.2.2)
99
100
  rcov (0.9.11)
100
- rdoc (3.10)
101
+ rdoc (3.11)
101
102
  json (~> 1.4)
102
103
  rest-client (1.6.7)
103
104
  mime-types (>= 1.16)
104
- sprockets (2.0.2)
105
+ sprockets (2.0.3)
105
106
  hike (~> 1.2)
106
107
  rack (~> 1.0)
107
108
  tilt (~> 1.1, != 1.3.0)
@@ -111,7 +112,7 @@ GEM
111
112
  treetop (1.4.10)
112
113
  polyglot
113
114
  polyglot (>= 0.3.1)
114
- tzinfo (0.3.30)
115
+ tzinfo (0.3.31)
115
116
 
116
117
  PLATFORMS
117
118
  ruby
@@ -119,7 +120,8 @@ PLATFORMS
119
120
  DEPENDENCIES
120
121
  bundler (~> 1.0.0)
121
122
  fbgraph_rails (>= 0.2.2)
123
+ flexmock (~> 0.9.0)
122
124
  jeweler (~> 1.6.0)
123
- rails (>= 3.1.0)
125
+ rails (>= 3.1.3)
124
126
  rcov
125
127
  sqlite3 (>= 1.3.3)
data/README.rdoc CHANGED
@@ -4,17 +4,12 @@ User authentication for a Ruby on Rails 3 application. Works with Facebook.
4
4
 
5
5
  == Integration
6
6
 
7
- Scaffold user accounts, session controller views, and Facebook extensions.
8
- rails g authpwn:users
9
- rails g authpwn:session
10
- rails g authpwn:facebook
7
+ Scaffold user accounts, and session controller views.
8
+ rails g authpwn:all
11
9
 
12
10
  Wire authentication into your ApplicationController.
13
11
  authenticates_using_session
14
- authenticates_using_facebook
15
-
16
- Point the default route to the sessions controller in config/routes.rb
17
- root :to => "session#show"
12
+ authenticates_using_facebook
18
13
 
19
14
  Note: the code inside the models and controllers is tucked away in the plug-in.
20
15
  The scaffold models and controllers are there as extension points. You will be
@@ -24,12 +19,12 @@ able to update the plug-in without regenerating the scaffolds.
24
19
 
25
20
  * Fork the project.
26
21
  * Make your feature addition or bug fix.
27
- * Add tests for it. This is important so I don't break it in a
28
- future version unintentionally.
22
+ * Add tests for it. This is important so I don't break it in a future version
23
+ unintentionally.
29
24
  * Commit, do not mess with rakefile, version, or history.
30
25
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
31
26
  * Send me a pull request. Bonus points for topic branches.
32
27
 
33
28
  == Copyright
34
29
 
35
- Copyright (c) 2010 Victor Costan, released under the MIT license
30
+ Copyright (c) 2010-2012 Victor Costan, released under the MIT license
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.6
1
+ 0.10.0
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{authpwn_rails}
8
- s.version = "0.9.6"
7
+ s.name = "authpwn_rails"
8
+ s.version = "0.10.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{Victor Costan}]
12
- s.date = %q{2011-10-12}
13
- s.description = %q{Works with Facebook.}
14
- s.email = %q{victor@costan.us}
11
+ s.authors = ["Victor Costan"]
12
+ s.date = "2011-11-21"
13
+ s.description = "Works with Facebook."
14
+ s.email = "victor@costan.us"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
17
  "README.rdoc"
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".project",
22
+ ".travis.yml",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "LICENSE",
@@ -28,15 +29,18 @@ Gem::Specification.new do |s|
28
29
  "app/helpers/session_helper.rb",
29
30
  "authpwn_rails.gemspec",
30
31
  "lib/authpwn_rails.rb",
32
+ "lib/authpwn_rails/credential_model.rb",
33
+ "lib/authpwn_rails/credentials.rb",
34
+ "lib/authpwn_rails/credentials/email.rb",
35
+ "lib/authpwn_rails/credentials/facebook.rb",
36
+ "lib/authpwn_rails/credentials/password.rb",
31
37
  "lib/authpwn_rails/engine.rb",
32
38
  "lib/authpwn_rails/facebook_session.rb",
33
- "lib/authpwn_rails/facebook_token_model.rb",
34
- "lib/authpwn_rails/generators/facebook_generator.rb",
35
- "lib/authpwn_rails/generators/session_generator.rb",
39
+ "lib/authpwn_rails/generators/all_generator.rb",
36
40
  "lib/authpwn_rails/generators/templates/001_create_users.rb",
37
- "lib/authpwn_rails/generators/templates/002_create_facebook_tokens.rb",
38
- "lib/authpwn_rails/generators/templates/facebook_token.rb",
39
- "lib/authpwn_rails/generators/templates/facebook_tokens.yml",
41
+ "lib/authpwn_rails/generators/templates/002_create_credentials.rb",
42
+ "lib/authpwn_rails/generators/templates/credential.rb",
43
+ "lib/authpwn_rails/generators/templates/credentials.yml",
40
44
  "lib/authpwn_rails/generators/templates/session/forbidden.html.erb",
41
45
  "lib/authpwn_rails/generators/templates/session/home.html.erb",
42
46
  "lib/authpwn_rails/generators/templates/session/new.html.erb",
@@ -45,51 +49,55 @@ Gem::Specification.new do |s|
45
49
  "lib/authpwn_rails/generators/templates/session_controller_test.rb",
46
50
  "lib/authpwn_rails/generators/templates/user.rb",
47
51
  "lib/authpwn_rails/generators/templates/users.yml",
48
- "lib/authpwn_rails/generators/users_generator.rb",
49
52
  "lib/authpwn_rails/session.rb",
50
53
  "lib/authpwn_rails/session_controller.rb",
51
54
  "lib/authpwn_rails/test_extensions.rb",
52
55
  "lib/authpwn_rails/user_model.rb",
53
56
  "test/cookie_controller_test.rb",
57
+ "test/email_credential_test.rb",
54
58
  "test/facebook_controller_test.rb",
55
- "test/facebook_token_test.rb",
59
+ "test/facebook_credential_test.rb",
56
60
  "test/helpers/application_controller.rb",
57
61
  "test/helpers/db_setup.rb",
58
62
  "test/helpers/fbgraph.rb",
59
63
  "test/helpers/routes.rb",
60
64
  "test/helpers/view_helpers.rb",
65
+ "test/password_credential_test.rb",
61
66
  "test/session_controller_api_test.rb",
62
67
  "test/test_helper.rb",
63
68
  "test/user_test.rb"
64
69
  ]
65
- s.homepage = %q{http://github.com/pwnall/authpwn_rails}
66
- s.licenses = [%q{MIT}]
67
- s.require_paths = [%q{lib}]
68
- s.rubygems_version = %q{1.8.6}
69
- s.summary = %q{User authentication for Rails 3 applications.}
70
+ s.homepage = "http://github.com/pwnall/authpwn_rails"
71
+ s.licenses = ["MIT"]
72
+ s.require_paths = ["lib"]
73
+ s.rubygems_version = "1.8.11"
74
+ s.summary = "User authentication for Rails 3 applications."
70
75
 
71
76
  if s.respond_to? :specification_version then
72
77
  s.specification_version = 3
73
78
 
74
79
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
75
80
  s.add_runtime_dependency(%q<fbgraph_rails>, [">= 0.2.2"])
76
- s.add_runtime_dependency(%q<rails>, [">= 3.1.0"])
81
+ s.add_runtime_dependency(%q<rails>, [">= 3.1.3"])
77
82
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
83
+ s.add_development_dependency(%q<flexmock>, ["~> 0.9.0"])
78
84
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
79
85
  s.add_development_dependency(%q<rcov>, [">= 0"])
80
86
  s.add_development_dependency(%q<sqlite3>, [">= 1.3.3"])
81
87
  else
82
88
  s.add_dependency(%q<fbgraph_rails>, [">= 0.2.2"])
83
- s.add_dependency(%q<rails>, [">= 3.1.0"])
89
+ s.add_dependency(%q<rails>, [">= 3.1.3"])
84
90
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
91
+ s.add_dependency(%q<flexmock>, ["~> 0.9.0"])
85
92
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
86
93
  s.add_dependency(%q<rcov>, [">= 0"])
87
94
  s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
88
95
  end
89
96
  else
90
97
  s.add_dependency(%q<fbgraph_rails>, [">= 0.2.2"])
91
- s.add_dependency(%q<rails>, [">= 3.1.0"])
98
+ s.add_dependency(%q<rails>, [">= 3.1.3"])
92
99
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
100
+ s.add_dependency(%q<flexmock>, ["~> 0.9.0"])
93
101
  s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
94
102
  s.add_dependency(%q<rcov>, [">= 0"])
95
103
  s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
data/lib/authpwn_rails.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  # :nodoc: namespace
2
- module AuthpwnRails
2
+ module Authpwn
3
3
  end
4
4
 
5
+ require 'authpwn_rails/credential_model.rb'
5
6
  require 'authpwn_rails/facebook_session.rb'
6
- require 'authpwn_rails/facebook_token_model.rb'
7
7
  require 'authpwn_rails/session.rb'
8
8
  require 'authpwn_rails/session_controller.rb'
9
9
  require 'authpwn_rails/test_extensions.rb'
@@ -0,0 +1,38 @@
1
+ require 'active_support'
2
+
3
+ # :nodoc: namespace
4
+ module Authpwn
5
+
6
+ # Included by the model class that represents facebook tokens.
7
+ #
8
+ # Parts of the codebase assume the model will be named Credential.
9
+ module CredentialModel
10
+ extend ActiveSupport::Concern
11
+
12
+ included do
13
+ # The user whose token this is.
14
+ belongs_to :user, :inverse_of => :credentials
15
+ validates :user, :presence => true
16
+
17
+ # Name that can be used to find the token.
18
+ validates :name, :length => { :in => 1..128, :allow_nil => true },
19
+ :uniqueness => { :scope => [:type], :allow_nil => true }
20
+
21
+ # Secret information associated with the token.
22
+ validates :key, :length => { :in => 1..2.kilobytes, :allow_nil => true }
23
+ end
24
+
25
+ # Included in the metaclass of models that call pwnauth_facebook_token_model.
26
+ module ClassMethods
27
+
28
+ end # module Authpwn::FacebookTokenModel::ClassMethods
29
+
30
+
31
+ # Included in models that include Authpwn::FacebookTokenModel.
32
+ module InstanceMethods
33
+
34
+ end # module Authpwn::FacebookTokenModel::InstanceMethods
35
+
36
+ end # namespace Authpwn::FacebookTokenModel
37
+
38
+ end # namespace Authpwn
@@ -0,0 +1,10 @@
1
+ # Loads sub-classes of the Credential model.
2
+ #
3
+ # We allow the Credential model to be defined in the Rails application, so the
4
+ # application can choose the storage model (ActiveRecord vs Mongoid etc.). This
5
+ # means that we have to load the classes that inherit from Credential after it's
6
+ # defined, which is long after the authpwn_rails engine is loaded.
7
+
8
+ require 'authpwn_rails/credentials/email.rb'
9
+ require 'authpwn_rails/credentials/facebook.rb'
10
+ require 'authpwn_rails/credentials/password.rb'
@@ -0,0 +1,30 @@
1
+ # :namespace
2
+ module Credentials
3
+
4
+ # Associates an e-mail address with the user account.
5
+ class Email < ::Credential
6
+ # The e-mail address.
7
+ alias_attribute :email, :name
8
+ validates :name, :format => /^[A-Za-z0-9.+_]+@[^@]*\.(\w+)$/,
9
+ :presence => true, :uniqueness => { :scope => [:type],
10
+ :message => 'This e-mail address is already claimed by an account' }
11
+
12
+ # '1' if the user proved ownership of the e-mail address.
13
+ alias_attribute :verified, :key
14
+ validates :verified, :presence => true
15
+
16
+ before_validation :set_verified_to_false, :on => :create
17
+ # :nodoc: by default, e-mail addresses are not verified
18
+ def set_verified_to_false
19
+ self.verified ||= '0' if self.key.nil?
20
+ end
21
+ end # class Credentials::Email
22
+
23
+ end # namespace Credentials
24
+
25
+ # :nodoc: adds e-mail integration to the user model
26
+ module Authpwn::UserModel::InstanceMethods
27
+ def email_credential
28
+ credentials.find { |c| c.instance_of?(Credentials::Email) }
29
+ end
30
+ end # module Authpwn::UserModel::InstanceMethods
@@ -0,0 +1,77 @@
1
+ # :namespace
2
+ module Credentials
3
+
4
+ # Associates a Facebook account and OAuth2 token with an account.
5
+ class Facebook < ::Credential
6
+ # The Graph API object ID of the Facebook account.
7
+ alias_attribute :facebook_uid, :name
8
+ validates :name, :format => /^\d+$/, :presence => true,
9
+ :uniqueness => { :scope => [:type],
10
+ :message => 'Your Facebook user is already associated to an account' }
11
+
12
+ # A user can be associated to a single Facebook account.
13
+ validates :user_id, :uniqueness => {
14
+ :message => 'Your account is already associated to a Facebook user' }
15
+
16
+ # OAuth2 token issued by Facebook.
17
+ alias_attribute :access_token, :key
18
+ validates :key, :presence => true
19
+
20
+ # FBGraph client loaded with this access token.
21
+ def facebook_client
22
+ @client ||= FBGraphRails.fbclient(access_token)
23
+ end
24
+
25
+ # Finds or creates the model containing a token.
26
+ #
27
+ # If a model for the same user exists, the model is updated with the given
28
+ # token. Otherwise, a new model will be created, together with a user.
29
+ def self.for(access_token)
30
+ uid = uid_from_token access_token
31
+ credential = self.where(:name => uid.to_str).first
32
+ if credential
33
+ credential.update_attributes! :key => access_token
34
+ else
35
+ User.transaction do
36
+ user = User.create!
37
+ credential = self.create! :name => uid, :key => access_token,
38
+ :user => user
39
+ end
40
+ end
41
+ credential
42
+ end
43
+
44
+ # Extracts the Facebook user ID from a OAuth2 token.
45
+ #
46
+ # This used to be a hack that pulled the UID out of an OAuth2 token. The new
47
+ # encrypted OAuth2 tokens don't have UIDs anymore, so this method is an
48
+ # interim hack for old code that still depends on it.
49
+ def self.uid_from_token(access_token)
50
+ FBGraphRails.fbclient(access_token).selection.me.info!.id.to_s
51
+ end
52
+ end # class Credentials::Facebook
53
+
54
+ end # namespace Credentials
55
+
56
+ # :nodoc: adds Facebook integration methods to the User model.
57
+ module Authpwn::UserModel::ClassMethods
58
+ # Fills out a new user's information based on a Facebook access token.
59
+ def create_with_facebook_token(token)
60
+ self.create! :email => "#{token.external_uid}@graph.facebook.com"
61
+ end
62
+
63
+ # The user that owns a given Facebook OAuth2 token.
64
+ #
65
+ # A new user will be created if the token doesn't belong to any user. This
66
+ # is the case for a new visitor.
67
+ def for_facebook_token(access_token)
68
+ Credentials::Facebook.for(access_token).user
69
+ end
70
+ end # module Authpwn::UserModel::ClassMethods
71
+
72
+ # :nodoc: adds Facebook integration methods to the User model.
73
+ module Authpwn::UserModel::InstanceMethods
74
+ def facebook_credential
75
+ credentials.find { |c| c.instance_of?(Credentials::Facebook) }
76
+ end
77
+ end # module Authpwn::UserModel::InstanceMethods