exvo-auth 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -10,7 +10,9 @@ begin
10
10
  gem.homepage = "http://github.com/Exvo/Auth"
11
11
  gem.authors = ["Jacek Becela"]
12
12
  gem.add_dependency "oa-oauth", "0.0.1"
13
- gem.add_dependency "httparty", "0.6.1"
13
+ gem.add_dependency "httparty", ">= 0.6.1"
14
+ gem.add_development_dependency "mocha", ">= 0.9.8"
15
+ gem.add_development_dependency "test-unit", ">= 2.1.0"
14
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
17
  end
16
18
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.1
1
+ 0.6.2
data/exvo-auth.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{exvo-auth}
8
- s.version = "0.6.1"
8
+ s.version = "0.6.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jacek Becela"]
12
- s.date = %q{2010-07-19}
12
+ s.date = %q{2010-07-20}
13
13
  s.description = %q{Sign in with Exvo account}
14
14
  s.email = %q{jacek.becela@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "VERSION",
27
27
  "exvo-auth.gemspec",
28
28
  "lib/exvo-auth.rb",
29
+ "lib/exvo_auth/autonomous/base.rb",
29
30
  "lib/exvo_auth/autonomous/cache.rb",
30
31
  "lib/exvo_auth/autonomous/consumer.rb",
31
32
  "lib/exvo_auth/autonomous/provider.rb",
@@ -56,14 +57,20 @@ Gem::Specification.new do |s|
56
57
 
57
58
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
58
59
  s.add_runtime_dependency(%q<oa-oauth>, ["= 0.0.1"])
59
- s.add_runtime_dependency(%q<httparty>, ["= 0.6.1"])
60
+ s.add_runtime_dependency(%q<httparty>, [">= 0.6.1"])
61
+ s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
62
+ s.add_development_dependency(%q<test-unit>, [">= 2.1.0"])
60
63
  else
61
64
  s.add_dependency(%q<oa-oauth>, ["= 0.0.1"])
62
- s.add_dependency(%q<httparty>, ["= 0.6.1"])
65
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
66
+ s.add_dependency(%q<mocha>, [">= 0.9.8"])
67
+ s.add_dependency(%q<test-unit>, [">= 2.1.0"])
63
68
  end
64
69
  else
65
70
  s.add_dependency(%q<oa-oauth>, ["= 0.0.1"])
66
- s.add_dependency(%q<httparty>, ["= 0.6.1"])
71
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
72
+ s.add_dependency(%q<mocha>, [">= 0.9.8"])
73
+ s.add_dependency(%q<test-unit>, [">= 2.1.0"])
67
74
  end
68
75
  end
69
76
 
data/lib/exvo-auth.rb CHANGED
@@ -18,6 +18,7 @@ module ExvoAuth
18
18
  end
19
19
 
20
20
  module Autonomous
21
+ autoload :Base, 'exvo_auth/autonomous/base'
21
22
  autoload :Consumer, 'exvo_auth/autonomous/consumer'
22
23
  autoload :Provider, 'exvo_auth/autonomous/provider'
23
24
  autoload :Cache, 'exvo_auth/autonomous/cache'
@@ -0,0 +1,25 @@
1
+ class ExvoAuth::Autonomous::Base
2
+ attr_reader :options
3
+ @@cache = ExvoAuth::Autonomous::Cache.new
4
+
5
+ def initialize(options = {})
6
+ options[:site] ||= ExvoAuth::Config.host
7
+ options[:client_id] ||= ExvoAuth::Config.client_id
8
+ options[:client_secret] ||= ExvoAuth::Config.client_secret
9
+ @options = options
10
+
11
+ validate_options!(:site, :client_id, :client_secret)
12
+ end
13
+
14
+ protected
15
+
16
+ def validate_options!(*keys)
17
+ missing = keys - options.keys
18
+ raise(ArgumentError, "Please configure following keys: #{missing.join(", ")}") if missing.any?
19
+ end
20
+
21
+ # Makes testing easy
22
+ def httparty
23
+ HTTParty
24
+ end
25
+ end
@@ -4,11 +4,17 @@ class ExvoAuth::Autonomous::Cache
4
4
  end
5
5
 
6
6
  def read(key)
7
- @data[key]
7
+ o = @data[key]
8
+ o[:value] if o && (now - o[:timestamp]) < 3600 # cache for one hour
8
9
  end
9
10
 
10
11
  def write(key, value)
11
- @data[key] = value
12
+ @data[key] = {
13
+ :value => value,
14
+ :timestamp => now
15
+ }
16
+
17
+ value
12
18
  end
13
19
 
14
20
  def fetch(key)
@@ -18,4 +24,10 @@ class ExvoAuth::Autonomous::Cache
18
24
  read(key)
19
25
  end
20
26
  end
27
+
28
+ private
29
+
30
+ def now
31
+ Time.now
32
+ end
21
33
  end
@@ -1,17 +1,7 @@
1
- class ExvoAuth::Autonomous::Consumer
2
- attr_reader :options
3
- @@cache = ExvoAuth::Autonomous::Cache.new
4
-
1
+ class ExvoAuth::Autonomous::Consumer < ExvoAuth::Autonomous::Base
5
2
  def initialize(options = {})
6
- options[:site] ||= ExvoAuth::Config.host
7
- options[:client_id] ||= ExvoAuth::Config.client_id
8
- options[:client_secret] ||= ExvoAuth::Config.client_secret
9
-
10
- if options[:site].nil? || options[:client_id].nil? || options[:client_secret].nil? || options[:provider_id].nil?
11
- raise(ArgumentError, "Please configure site, client_id, client_secret and provider_id")
12
- end
13
-
14
- @options = options
3
+ super
4
+ validate_options!(:provider_id)
15
5
  end
16
6
 
17
7
  def access_token
@@ -21,7 +11,7 @@ class ExvoAuth::Autonomous::Consumer
21
11
  end
22
12
 
23
13
  def access_token!
24
- response = HTTParty.get("/apps/consumer/authorizations/#{options[:provider_id]}.json",
14
+ response = httparty.get("/apps/consumer/authorizations/#{options[:provider_id]}.json",
25
15
  :base_uri => options[:site],
26
16
  :basic_auth => {
27
17
  :username => options[:client_id],
@@ -1,17 +1,7 @@
1
- class ExvoAuth::Autonomous::Provider
2
- attr_reader :options
3
- @@cache = ExvoAuth::Autonomous::Cache.new
4
-
1
+ class ExvoAuth::Autonomous::Provider < ExvoAuth::Autonomous::Base
5
2
  def initialize(options = {})
6
- options[:site] ||= ExvoAuth::Config.host
7
- options[:client_id] ||= ExvoAuth::Config.client_id
8
- options[:client_secret] ||= ExvoAuth::Config.client_secret
9
-
10
- if options[:site].nil? || options[:client_id].nil? || options[:client_secret].nil? || options[:consumer_id].nil? || options[:access_token].nil?
11
- raise(ArgumentError, "Please configure site, client_id, client_secret, consumer_id and access_token")
12
- end
13
-
14
- @options = options
3
+ super
4
+ validate_options!(:consumer_id, :access_token)
15
5
  end
16
6
 
17
7
  def scopes
@@ -21,7 +11,7 @@ class ExvoAuth::Autonomous::Provider
21
11
  end
22
12
 
23
13
  def scopes!
24
- response = HTTParty.get("/apps/provider/authorizations/#{options[:consumer_id]}.json",
14
+ response = httparty.get("/apps/provider/authorizations/#{options[:consumer_id]}.json",
25
15
  :base_uri => options[:site],
26
16
  :basic_auth => {
27
17
  :username => options[:client_id],
@@ -30,6 +20,8 @@ class ExvoAuth::Autonomous::Provider
30
20
  :query => { :access_token => options[:access_token] }
31
21
  )
32
22
 
33
- @@cache.write(options, response["scope"].to_s.split)
23
+ if scope = response["scope"] # only cache positive responses
24
+ @@cache.write(options, scope.split)
25
+ end
34
26
  end
35
27
  end
@@ -46,6 +46,10 @@ module ExvoAuth::Controllers::Base
46
46
  return @current_user if defined?(@current_user)
47
47
  @current_user = session[:user_id] && find_user_by_id(session[:user_id])
48
48
  end
49
+
50
+ def current_consumer_id
51
+ @current_consumer_id
52
+ end
49
53
 
50
54
  def signed_in?
51
55
  !!current_user
@@ -12,12 +12,14 @@ module ExvoAuth::Controllers::Merb
12
12
 
13
13
  def authenticate_app_in_scope!(scope)
14
14
  basic_authentication do |consumer_id, access_token|
15
- @current_scopes = ExvoAuth::Autonomous::Provider.new(
15
+ current_scopes = ExvoAuth::Autonomous::Provider.new(
16
16
  :consumer_id => consumer_id,
17
17
  :access_token => access_token
18
18
  ).scopes
19
19
 
20
- @current_scopes.include?(scope)
20
+ @current_consumer_id = consumer_id
21
+
22
+ current_scopes.include?(scope)
21
23
  end
22
24
  end
23
25
 
@@ -8,12 +8,14 @@ module ExvoAuth::Controllers::Rails
8
8
  module InstanceMethods
9
9
  def authenticate_app_in_scope!(scope)
10
10
  authenticate_or_request_with_http_basic do |consumer_id, access_token|
11
- @current_scopes = ExvoAuth::Autonomous::Provider.new(
11
+ current_scopes = ExvoAuth::Autonomous::Provider.new(
12
12
  :consumer_id => consumer_id,
13
13
  :access_token => access_token
14
14
  ).scopes
15
15
 
16
- @current_scopes.include?(scope)
16
+ @current_consumer_id = consumer_id
17
+
18
+ current_scopes.include?(scope)
17
19
  end
18
20
  end
19
21
 
data/test/helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ gem 'test-unit'
2
3
  require 'test/unit'
3
-
4
+ require 'mocha'
4
5
  require 'exvo-auth'
@@ -1,7 +1,26 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestExvoAuth < Test::Unit::TestCase
4
- def test_something_for_real
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
4
+ def setup
5
+ ExvoAuth::Config.client_id = "foo"
6
+ ExvoAuth::Config.client_secret = "bar"
7
+ end
8
+
9
+ test "consumer sanity" do
10
+ c = ExvoAuth::Autonomous::Consumer.new(:provider_id => "baz")
11
+ httparty = stub(:get => {"access_token" => "qux"})
12
+ c.expects(:httparty).returns(httparty)
13
+
14
+ assert_equal "qux", c.access_token
15
+ assert_equal "qux", c.access_token # second time from cache, without touching httparty
16
+ end
17
+
18
+ test "provider sanity" do
19
+ c = ExvoAuth::Autonomous::Provider.new(:consumer_id => "baz", :access_token => "qux")
20
+ httparty = stub(:get => {"scope" => "qux quux"})
21
+ c.expects(:httparty).returns(httparty)
22
+
23
+ assert_equal ["qux", "quux"], c.scopes
24
+ assert_equal ["qux", "quux"], c.scopes # second time from cache, without touching httparty
6
25
  end
7
26
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 6
8
- - 1
9
- version: 0.6.1
8
+ - 2
9
+ version: 0.6.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jacek Becela
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-07-19 00:00:00 +02:00
17
+ date: 2010-07-20 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -36,7 +36,7 @@ dependencies:
36
36
  prerelease: false
37
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "="
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  segments:
42
42
  - 0
@@ -45,6 +45,34 @@ dependencies:
45
45
  version: 0.6.1
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: mocha
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 9
58
+ - 8
59
+ version: 0.9.8
60
+ type: :development
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: test-unit
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 2
71
+ - 1
72
+ - 0
73
+ version: 2.1.0
74
+ type: :development
75
+ version_requirements: *id004
48
76
  description: Sign in with Exvo account
49
77
  email: jacek.becela@gmail.com
50
78
  executables: []
@@ -64,6 +92,7 @@ files:
64
92
  - VERSION
65
93
  - exvo-auth.gemspec
66
94
  - lib/exvo-auth.rb
95
+ - lib/exvo_auth/autonomous/base.rb
67
96
  - lib/exvo_auth/autonomous/cache.rb
68
97
  - lib/exvo_auth/autonomous/consumer.rb
69
98
  - lib/exvo_auth/autonomous/provider.rb