authlogic-connect 0.0.2 → 0.0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -62,23 +62,11 @@ Otherwise, add this migration
62
62
 
63
63
  class AddAuthlogicConnectMigration < ActiveRecord::Migration
64
64
  def self.up
65
- add_column :users, :oauth_token, :string
66
- add_column :users, :oauth_secret, :string
67
- add_index :users, :oauth_token
68
-
69
- change_column :users, :login, :string, :default => nil, :null => true
70
- change_column :users, :crypted_password, :string, :default => nil, :null => true
71
- change_column :users, :password_salt, :string, :default => nil, :null => true
65
+ # TODO
72
66
  end
73
67
 
74
68
  def self.down
75
- remove_column :users, :oauth_token
76
- remove_column :users, :oauth_secret
77
-
78
- [:login, :crypted_password, :password_salt].each do |field|
79
- User.all(:conditions => "#{field} is NULL").each { |user| user.update_attribute(field, "") if user.send(field).nil? }
80
- change_column :users, field, :string, :default => "", :null => false
81
- end
69
+ # TODO
82
70
  end
83
71
  end
84
72
 
@@ -176,6 +164,14 @@ That's it! The rest is taken care of for you.
176
164
 
177
165
  This has no tests! I had to build this in a weekend and am not fluent with Shoulda, which I'd like to use. One of these days when I can breathe.
178
166
 
167
+ ## Goals
168
+
169
+ 1. It should require the end user ONE CLICK to create an account with your site.
170
+ 2. It should not depend on Javascript
171
+ 3. It should be enhanced by Javascript
172
+ 4. You should never have to touch the User/Session model/controller/migration if you are a just looking to get up and running quickly.
173
+ 5. You should be able to plugin ruby libraries that wrap an api, such as TwitterAuth via `@user.twitter`, and LinkedIn via `@user.linked_in`. Just because it's that easy.
174
+
179
175
  ## TODO
180
176
 
181
177
  - Change `register_with_oauth` and related to `register_method` and `login_method`: oauth, openid, traditional
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'rake/gempackagetask'
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = "authlogic-connect"
8
8
  s.author = "Lance Pollard"
9
- s.version = "0.0.2"
9
+ s.version = "0.0.3.2"
10
10
  s.summary = "Authlogic Connect: Let your app use all of Oauth and OpenID"
11
11
  s.homepage = "http://github.com/viatropos/authlogic-connect"
12
12
  s.email = "lancejpollard@gmail.com"
@@ -38,7 +38,7 @@ end
38
38
 
39
39
  desc "Publish gem to rubygems"
40
40
  task :publish => [:package] do
41
- `gem push pkg/#{spec.name}-#{spec.version}.gem`
41
+ %x[gem push pkg/#{spec.name}-#{spec.version}.gem]
42
42
  end
43
43
 
44
44
  desc "Print a list of the files to be put into the gem"
@@ -3,6 +3,7 @@ require 'authlogic'
3
3
  require 'oauth'
4
4
  require 'oauth2'
5
5
 
6
+
6
7
  # Throw callback rack app into the middleware stack
7
8
  # TODO: Somehow do this for Rails 3?
8
9
  # For now it is in the sample Rails 3 app
@@ -78,7 +79,7 @@ module AuthlogicConnect
78
79
  end
79
80
 
80
81
  def token(key)
81
- throw Error unless AuthlogicConnect.include?(key) and !key.to_s.empty?
82
+ raise "can't find key '#{key.to_s}' in AuthlogicConnect.config" unless AuthlogicConnect.include?(key) and !key.to_s.empty?
82
83
  "#{key.to_s.camelcase}Token".constantize
83
84
  end
84
85
 
@@ -10,6 +10,14 @@ module AuthlogicConnect::Common
10
10
 
11
11
  module InstanceMethods
12
12
 
13
+ def authenticated_with
14
+ @authenticated_with ||= self.tokens.collect{|t| t.service_name.to_s}
15
+ end
16
+
17
+ def authenticated_with?(service)
18
+ self.tokens.detect{|t| t.service_name.to_s == service.to_s}
19
+ end
20
+
13
21
  # core save method coordinating how to save the user
14
22
  def save(perform_validation = true, &block)
15
23
  status = true
@@ -19,11 +27,10 @@ module AuthlogicConnect::Common
19
27
  status = save_with_oauth(perform_validation, &block)
20
28
  end
21
29
  if status
22
- result = super
30
+ result = super(:validate => true)
23
31
  yield(result) if block_given?
24
- result
25
32
  end
26
- status
33
+ result
27
34
  end
28
35
 
29
36
  def validate_password_with_oauth?
@@ -28,7 +28,7 @@ module AuthlogicConnect::Oauth
28
28
  else
29
29
  auth_controller.redirect_to oauth_consumer.web_server.authorize_url(
30
30
  :redirect_uri => oauth_callback_url,
31
- :scope => oauth_token.settings[:scope]
31
+ :scope => oauth_token.config[:scope]
32
32
  )
33
33
  end
34
34
  end
@@ -2,18 +2,10 @@
2
2
  # http://developers.facebook.com/setup/
3
3
  class FacebookToken < OauthToken
4
4
 
5
- class << self
6
- def settings
7
- @settings ||= {
8
- :site => "https://graph.facebook.com",
9
- :authorize_url => "https://graph.facebook.com/oauth/authorize",
10
- :oauth_version => "2.0",
11
- :scope => "email, offline_access"
12
- }
13
- end
14
-
15
- def oauth_version
16
- 2.0
17
- end
18
- end
19
- end
5
+ version 2.0
6
+
7
+ settings "https://graph.facebook.com",
8
+ :authorize_url => "https://graph.facebook.com/oauth/authorize",
9
+ :scope => "email, offline_access"
10
+
11
+ end
@@ -1,14 +1,9 @@
1
1
  # http://getsatisfaction.com/developers/oauth
2
2
  class GetSatisfactionToken < OauthToken
3
3
 
4
- class << self
5
- def settings
6
- @settings ||= {
7
- :site => "http://getsatisfaction.com",
8
- :request_token_path => "/api/request_token",
9
- :authorize_url => "/api/authorize",
10
- :access_token_path => "/api/access_token"
11
- }
12
- end
13
- end
4
+ settings "http://getsatisfaction.com",
5
+ :request_token_path => "/api/request_token",
6
+ :authorize_url => "/api/authorize",
7
+ :access_token_path => "/api/access_token"
8
+
14
9
  end
@@ -24,15 +24,10 @@
24
24
  # YouTube http://gdata.youtube.com
25
25
  class GoogleToken < OauthToken
26
26
 
27
- class << self
28
- def settings
29
- @settings ||= {
30
- :site => "https://www.google.com",
31
- :request_token_path => "/accounts/OAuthGetRequestToken",
32
- :authorize_path => "/accounts/OAuthAuthorizeToken",
33
- :access_token_path => "/accounts/OAuthGetAccessToken",
34
- :scope => "https://www.google.com/m8/feeds/"
35
- }
36
- end
37
- end
27
+ settings "https://www.google.com",
28
+ :request_token_path => "/accounts/OAuthGetRequestToken",
29
+ :authorize_path => "/accounts/OAuthAuthorizeToken",
30
+ :access_token_path => "/accounts/OAuthGetAccessToken",
31
+ :scope => "https://www.google.com/m8/feeds/"
32
+
38
33
  end
@@ -0,0 +1,10 @@
1
+ # http://developer.linkedin.com/docs/DOC-1008
2
+ # http://github.com/pengwynn/linkedin/tree/master/lib/linked_in/
3
+ class LinkedInToken < OauthToken
4
+
5
+ settings "https://api.linkedin.com",
6
+ :request_token_path => "/uas/oauth/requestToken",
7
+ :access_token_path => "/uas/oauth/accessToken",
8
+ :authorize_path => "/uas/oauth/authorize"
9
+
10
+ end
@@ -1,14 +1,11 @@
1
1
  # http://wiki.developer.myspace.com/index.php?title=Category:MySpaceID
2
+ # http://developerwiki.myspace.com/index.php?title=OAuth_REST_API_Usage_-_Authentication_Process
3
+ # http://developerwiki.myspace.com/index.php?title=How_to_Set_Up_a_New_Application_for_OpenID
2
4
  class MyspaceToken < OauthToken
3
5
 
4
- class << self
5
- def settings
6
- @settings ||= {
7
- :site => "https://www.google.com",
8
- :request_token_path => "/accounts/OAuthGetRequestToken",
9
- :authorize_path => "/accounts/OAuthAuthorizeToken",
10
- :access_token_path => "/accounts/OAuthGetAccessToken"
11
- }
12
- end
13
- end
6
+ settings "http://api.myspace.com",
7
+ :request_token_path => "/request_token",
8
+ :authorize_path => "/authorize",
9
+ :access_token_path => "/access_token"
10
+
14
11
  end
@@ -1,6 +1,5 @@
1
1
  class OauthToken < Token
2
- # Main client for interfacing with remote service. Override this to use
3
- # preexisting library eg. Twitter gem.
2
+
4
3
  def client
5
4
  unless @client
6
5
  if oauth_version == 1.0
@@ -13,14 +12,6 @@ class OauthToken < Token
13
12
  @client
14
13
  end
15
14
 
16
- def consumer
17
- self.class.consumer
18
- end
19
-
20
- def simple_client
21
- @simple_client ||= SimpleClient.new(OAuth::AccessToken.new(self.class.consumer, token, secret))
22
- end
23
-
24
15
  def oauth_version
25
16
  self.class.oauth_version
26
17
  end
@@ -31,20 +22,20 @@ class OauthToken < Token
31
22
 
32
23
  class << self
33
24
 
34
- def oauth_version
35
- 1.0
25
+ def version(value)
26
+ @oauth_version = value
36
27
  end
37
28
 
38
- def settings
39
- @settings ||= {}
29
+ def oauth_version
30
+ @oauth_version ||= 1.0
40
31
  end
41
32
 
42
33
  def consumer
43
34
  unless @consumer
44
35
  if oauth_version == 1.0
45
- @consumer = OAuth::Consumer.new(credentials[:key], credentials[:secret], settings.merge(credentials[:options] || {}))
36
+ @consumer = OAuth::Consumer.new(credentials[:key], credentials[:secret], config.merge(credentials[:options] || {}))
46
37
  else
47
- @consumer = OAuth2::Client.new(credentials[:key], credentials[:secret], settings)
38
+ @consumer = OAuth2::Client.new(credentials[:key], credentials[:secret], config)
48
39
  end
49
40
  end
50
41
 
@@ -56,7 +47,7 @@ class OauthToken < Token
56
47
  end
57
48
 
58
49
  def get_request_token(callback_url)
59
- consumer.get_request_token({:oauth_callback => callback_url}, settings)
50
+ consumer.get_request_token({:oauth_callback => callback_url}, config)
60
51
  end
61
52
 
62
53
  def get_access_token(oauth_verifier)
@@ -1,11 +1,6 @@
1
1
  class TwitterToken < OauthToken
2
2
 
3
- class << self
4
- def settings
5
- @settings ||= {
6
- :site => "http://twitter.com",
7
- :authorize_url => "http://twitter.com/oauth/authenticate"
8
- }
9
- end
10
- end
3
+ settings "http://twitter.com",
4
+ :authorize_url => "http://twitter.com/oauth/authenticate"
5
+
11
6
  end
@@ -2,12 +2,7 @@
2
2
  # http://www.vimeo.com/api/applications/new
3
3
  class VimeoToken < OauthToken
4
4
 
5
- class << self
6
- def settings
7
- @settings ||= {
8
- :site => "http://vimeo.com",
9
- :authorize_url => "http://vimeo.com/oauth/authorize"
10
- }
11
- end
12
- end
5
+ settings "http://vimeo.com",
6
+ :authorize_url => "http://vimeo.com/oauth/authorize"
7
+
13
8
  end
@@ -2,19 +2,11 @@
2
2
  # http://developer.yahoo.com/oauth/guide/oauth-accesstoken.html
3
3
  class YahooToken < OauthToken
4
4
 
5
- class << self
6
- def settings
7
- @settings ||= {
8
- :site => "https://api.login.yahoo.com",
9
- :request_token_path => '/oauth/v2/get_request_token',
10
- :access_token_path => '/oauth/v2/get_token',
11
- :authorize_path => '/oauth/v2/request_auth'
12
- }
13
- end
14
-
15
- def oauth_version
16
- 2.0
17
- end
18
- end
5
+ version 2
6
+
7
+ settings "https://api.login.yahoo.com",
8
+ :request_token_path => '/oauth/v2/get_request_token',
9
+ :access_token_path => '/oauth/v2/get_token',
10
+ :authorize_path => '/oauth/v2/request_auth'
19
11
 
20
12
  end
@@ -14,6 +14,10 @@ class Token < ActiveRecord::Base
14
14
  self.class.service_name
15
15
  end
16
16
 
17
+ def settings
18
+ self.class.settings
19
+ end
20
+
17
21
  def get(path)
18
22
 
19
23
  end
@@ -31,6 +35,14 @@ class Token < ActiveRecord::Base
31
35
  raise "implement consumer in subclass"
32
36
  end
33
37
 
38
+ def settings(site, hash = {})
39
+ @settings = hash.merge(:site => site)
40
+ end
41
+
42
+ def config
43
+ @settings ||= {}
44
+ end
45
+
34
46
  protected
35
47
 
36
48
  def credentials
metadata CHANGED
@@ -5,8 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
+ - 3
8
9
  - 2
9
- version: 0.0.2
10
+ version: 0.0.3.2
10
11
  platform: ruby
11
12
  authors:
12
13
  - Lance Pollard
@@ -115,15 +116,13 @@ files:
115
116
  - lib/authlogic_connect/oauth/helper.rb
116
117
  - lib/authlogic_connect/oauth/process.rb
117
118
  - lib/authlogic_connect/oauth/session.rb
118
- - lib/authlogic_connect/oauth/tokens/delicious_token.rb
119
119
  - lib/authlogic_connect/oauth/tokens/facebook_token.rb
120
120
  - lib/authlogic_connect/oauth/tokens/get_satisfaction_token.rb
121
121
  - lib/authlogic_connect/oauth/tokens/google_token.rb
122
+ - lib/authlogic_connect/oauth/tokens/linked_in_token.rb
122
123
  - lib/authlogic_connect/oauth/tokens/myspace_token.rb
123
124
  - lib/authlogic_connect/oauth/tokens/oauth_token.rb
124
125
  - lib/authlogic_connect/oauth/tokens/opensocial_token.rb
125
- - lib/authlogic_connect/oauth/tokens/photobucket_token.rb
126
- - lib/authlogic_connect/oauth/tokens/smug_mug_token.rb
127
126
  - lib/authlogic_connect/oauth/tokens/twitter_token.rb
128
127
  - lib/authlogic_connect/oauth/tokens/vimeo_token.rb
129
128
  - lib/authlogic_connect/oauth/tokens/yahoo_token.rb
@@ -1,12 +0,0 @@
1
- class DeliciousToken < OauthToken
2
-
3
- class << self
4
- def settings
5
- @settings ||= {
6
- :site => "http://api.del.icio.us",
7
- :realm => "yahooapis.com"
8
- }
9
- end
10
- end
11
-
12
- end
@@ -1,13 +0,0 @@
1
- # http://photobucket.com/developer/
2
- # https://login.photobucket.com/developer/register
3
- class PhotobucketToken < OauthToken
4
-
5
- class << self
6
- def settings
7
- @settings ||= {
8
- :site => "http://twitter.com",
9
- :authorize_url => "http://twitter.com/oauth/authenticate"
10
- }
11
- end
12
- end
13
- end
@@ -1,14 +0,0 @@
1
- # http://wiki.smugmug.net/display/API/OAuth
2
- class SmugMugToken < OauthToken
3
-
4
- class << self
5
- def settings
6
- @settings ||= {
7
- :site => "http://api.smugmug.com",
8
- :request_token_path => "/services/oauth/getRequestToken.mg",
9
- :authorize_url => "/services/oauth/authorize.mg",
10
- :access_token_path => "/services/oauth/getAccessToken.mg"
11
- }
12
- end
13
- end
14
- end