oa-oauth 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,5 +12,6 @@ module OmniAuth
12
12
  autoload :ThirtySevenSignals, 'omniauth/strategies/thirty_seven_signals'
13
13
  autoload :Foursquare, 'omniauth/strategies/foursquare'
14
14
  autoload :Gowalla, 'omniauth/strategies/gowalla'
15
+ autoload :Identica, 'omniauth/strategies/identica'
15
16
  end
16
17
  end
@@ -24,9 +24,9 @@ module OmniAuth
24
24
  @data ||= MultiJson.decode(@access_token.get('/me'))
25
25
  end
26
26
 
27
- def request_phase(options = {})
27
+ def request_phase
28
28
  options[:scope] ||= "email,offline_access"
29
- super(options)
29
+ super
30
30
  end
31
31
 
32
32
  def user_info
@@ -26,9 +26,9 @@ module OmniAuth
26
26
  @data ||= MultiJson.decode(@access_token.get("/users/me.json"))
27
27
  end
28
28
 
29
- def request_phase(options = {})
29
+ def request_phase
30
30
  options[:scope] ||= "email,offline_access"
31
- super(options)
31
+ super
32
32
  end
33
33
 
34
34
  def user_info
@@ -0,0 +1,49 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to Identica via OAuth and retrieve basic
8
+ # user information.
9
+ #
10
+ # Usage:
11
+ #
12
+ # use OmniAuth::Strategies::Identica, 'consumerkey', 'consumersecret'
13
+ #
14
+ class Identica < OmniAuth::Strategies::OAuth
15
+ def initialize(app, consumer_key, consumer_secret)
16
+ super(app, :identica, consumer_key, consumer_secret,
17
+ :site => 'http://identi.ca',
18
+ :request_token_path => "/api/oauth/request_token",
19
+ :access_token_path => "/api/oauth/access_token",
20
+ :authorize_path => "/api/oauth/authorize")
21
+ end
22
+
23
+ def auth_hash
24
+ OmniAuth::Utils.deep_merge(super, {
25
+ 'uid' => @access_token.params[:user_id],
26
+ 'user_info' => user_info,
27
+ 'extra' => {'user_hash' => user_hash}
28
+ })
29
+ end
30
+
31
+ def user_info
32
+ user_hash = self.user_hash
33
+
34
+ {
35
+ 'nickname' => user_hash['screen_name'],
36
+ 'name' => user_hash['name'],
37
+ 'location' => user_hash['location'],
38
+ 'image' => user_hash['profile_image_url'],
39
+ 'description' => user_hash['description'],
40
+ 'urls' => {'Website' => user_hash['url']}
41
+ }
42
+ end
43
+
44
+ def user_hash
45
+ @user_hash ||= MultiJson.decode(@access_token.get('/api/account/verify_credentials.json').body)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -8,25 +8,39 @@ module OmniAuth
8
8
  class OAuth2
9
9
  include OmniAuth::Strategy
10
10
 
11
+ attr_accessor :options, :client
12
+
13
+ class CallbackError < StandardError
14
+ attr_accessor :error, :error_reason, :error_uri
15
+
16
+ def initialize(error, error_reason=nil, error_uri=nil)
17
+ self.error = error
18
+ self.error_reason = error_reason
19
+ self.error_uri = error_uri
20
+ end
21
+ end
22
+
11
23
  def initialize(app, name, client_id, client_secret, options = {})
12
24
  super(app, name)
13
- @options = options
14
- @client = ::OAuth2::Client.new(client_id, client_secret, options)
25
+ self.options = options
26
+ self.client = ::OAuth2::Client.new(client_id, client_secret, options)
15
27
  end
16
28
 
17
29
  protected
18
-
19
- attr_accessor :client
20
-
21
- def request_phase(options = {})
30
+
31
+ def request_phase
22
32
  redirect client.web_server.authorize_url({:redirect_uri => callback_url}.merge(options))
23
33
  end
24
34
 
25
35
  def callback_phase
36
+ if request.params['error']
37
+ raise CallbackError.new(request.params['error'], request.params['error_description'] || request.params['error_reason'], request.params['error_uri'])
38
+ end
39
+
26
40
  verifier = request.params['code']
27
41
  @access_token = client.web_server.get_access_token(verifier, :redirect_uri => callback_url)
28
42
  super
29
- rescue ::OAuth2::HTTPError, ::OAuth2::AccessDenied => e
43
+ rescue ::OAuth2::HTTPError, ::OAuth2::AccessDenied, CallbackError => e
30
44
  fail!(:invalid_credentials, e)
31
45
  end
32
46
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oa-oauth
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Bleigh
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-11 00:00:00 -05:00
18
+ date: 2010-10-12 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,12 +24,12 @@ dependencies:
24
24
  requirements:
25
25
  - - "="
26
26
  - !ruby/object:Gem::Version
27
- hash: 29
27
+ hash: 19
28
28
  segments:
29
29
  - 0
30
30
  - 1
31
- - 3
32
- version: 0.1.3
31
+ - 4
32
+ version: 0.1.4
33
33
  requirement: *id001
34
34
  name: oa-core
35
35
  prerelease: false
@@ -206,6 +206,7 @@ files:
206
206
  - lib/omniauth/strategies/foursquare.rb
207
207
  - lib/omniauth/strategies/github.rb
208
208
  - lib/omniauth/strategies/gowalla.rb
209
+ - lib/omniauth/strategies/identica.rb
209
210
  - lib/omniauth/strategies/linked_in.rb
210
211
  - lib/omniauth/strategies/oauth.rb
211
212
  - lib/omniauth/strategies/oauth2.rb