omniauth-tropo 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .DS_Store
data/Gemfile CHANGED
@@ -8,5 +8,7 @@ group :development, :test do
8
8
  gem 'guard-rspec'
9
9
  gem 'guard-bundler'
10
10
  gem 'growl'
11
+ gem 'fakeweb'
12
+ gem 'flexmock'
11
13
  gem 'rb-fsevent'
12
14
  end
data/README.md CHANGED
@@ -16,6 +16,12 @@ Add :tropo provider to omniauth builder (RAILS_ROOT/config/initializers/omniauth
16
16
  # provider ...
17
17
  end
18
18
 
19
+ If you want to pull roles from the ProvisioningAPI ( Premise only ) you can do so by adding :role_options hash in the builder:
20
+
21
+ Rails.application.config.middleware.use OmniAuth::Builder do
22
+ provider :tropo, "http://yourserver.com:8080/rest", :role_options=>{:admin_username=>'admin',:admin_password=>'admin'}
23
+ end
24
+
19
25
  ### Example:
20
26
 
21
27
  cd examples
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module Tropo
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -1,12 +1,18 @@
1
- require 'omniauth-http-basic'
2
- require 'multi_json'
1
+ %w(omniauth-http-basic multi_json faraday).each{|lib| require lib}
2
+
3
3
  module OmniAuth
4
4
  module Strategies
5
5
  class Tropo < OmniAuth::Strategies::HttpBasic
6
6
 
7
7
  option :title, "Tropo Login"
8
8
 
9
- uid { get_value('id') }
9
+ option :role_options, {
10
+ :path => 'roles',
11
+ :admin_username => nil,
12
+ :admin_password => nil
13
+ }
14
+
15
+ uid { get_value(:id) }
10
16
 
11
17
  credentials { {:username => username, :password => password}}
12
18
 
@@ -26,23 +32,43 @@ module OmniAuth
26
32
  :job_title => get_value('jobTitle'),
27
33
  :email => get_value('email'),
28
34
  :address => get_value('address'),
29
- :address2 => get_value('address2')
35
+ :address2 => get_value('address2'),
36
+ :roles => roles_enabled ? fetch_roles : nil
30
37
  }
31
38
  end
32
39
 
33
40
  protected
34
41
 
35
- def api_uri
36
- "#{options.endpoint}/users/#{username}"
37
- end
42
+ def api_uri
43
+ "#{options.endpoint}/users/#{username}"
44
+ end
45
+
46
+ def json_response
47
+ @json_response ||= MultiJson.load(authentication_response.body, :symbolize_keys => true)
48
+ end
49
+
50
+ def get_value(key)
51
+ json_response[key.to_sym]
52
+ end
38
53
 
39
- def json_response
40
- @json_response ||= MultiJson.load(authentication_response.body, :symbolize_keys => true)
54
+ def roles_enabled
55
+ if options.role_options.admin_username && options.role_options.admin_username
56
+ true
57
+ else
58
+ false
41
59
  end
60
+ end
42
61
 
43
- def get_value(key)
44
- json_response[key.to_sym]
62
+ def fetch_roles
63
+ conn = Faraday.new(:url => options.endpoint) do |builder|
64
+ builder.request :url_encoded
65
+ builder.response :logger
66
+ builder.adapter :net_http
45
67
  end
68
+ conn.basic_auth(options.role_options.admin_username,options.role_options.admin_password)
69
+ response = conn.get "/users/#{request['username']}/#{options.role_options.path}"
70
+ MultiJson.load(response.body).collect{|x| x["roleName"]} if response.status == 200
71
+ end
46
72
  end
47
73
  end
48
74
  end
@@ -23,31 +23,76 @@ RESPONSE_JSON = <<-EOF
23
23
  "status": "active"
24
24
  }
25
25
  EOF
26
-
27
26
  describe OmniAuth::Strategies::Tropo do
28
27
  def app; lambda {|env| [200, {}, ["Hello HttpBasic!"]]}; end
29
28
 
30
29
  let(:fresh_strategy) { Class.new OmniAuth::Strategies::Tropo }
31
- let(:instance) { subject.new(app, "http://www.example.com/rest")}
30
+ let(:instance) { subject.new(app, "http://www.example.com") }
32
31
  subject { fresh_strategy }
33
32
 
34
33
  it 'should be initialized with API endpoint' do
35
- instance.options.endpoint.should == "http://www.example.com/rest"
34
+ instance.options.endpoint.should == "http://www.example.com"
36
35
  end
36
+ describe "request" do
37
+ describe "role_options-defaults" do
38
+ it 'should use default options for role features' do
39
+ instance.options.role_options.admin_username.should == nil
40
+ instance.options.role_options.admin_password.should == nil
41
+ instance.options.role_options.path.should == "roles"
42
+ end
43
+ end
44
+
45
+ describe "role_options-overrides" do
46
+ let(:instance) { subject.new(app, "http://www.example.com", :role_options=>{:admin_username=> 'blah',:admin_password=>'blah',:path=>'blah'}) }
47
+ it 'should take options for roles features' do
48
+ instance.options.role_options.admin_username.should == "blah"
49
+ instance.options.role_options.admin_password.should == "blah"
50
+ instance.options.role_options.path.should == "blah"
51
+ end
52
+
53
+ it "should return roles when role_options is provided" do
54
+ json = MultiJson.load(RESPONSE_JSON, :symbolize_keys => true)
37
55
 
38
- it 'should set an expected auth hash' do
39
- json = MultiJson.load(RESPONSE_JSON, :symbolize_keys => true)
40
- instance.stub!(:request).and_return({'username' => 'jdyer', 'password' => '1234'})
41
- instance.stub!(:json_response).and_return(json)
42
- instance.uid.should == '12345'
43
- instance.credentials[:username].should == 'jdyer'
44
- instance.info[:name].should == 'John Dyer'
45
- instance.extra[:job_title].should == 'System Engineer'
46
- instance.extra[:state].should == 'FL'
47
- instance.extra[:zip_code].should == '32801'
48
- instance.extra[:number].should == '1234567890'
49
- instance.extra[:email].should == 'user@test.com'
50
- instance.extra[:address].should == '189 South Orange Avenue'
51
- instance.extra[:address2].should == '#1000'
56
+ FakeWeb.register_uri(:get,
57
+ "http://blah:blah@www.example.com/users/jdyer/roles",
58
+ :body=>'',
59
+ :content_type=>'application/json',
60
+ :status => ["200","OK"]
61
+ )
62
+
63
+ instance.stub!(:request).and_return({'username' => 'jdyer', 'password' => '1234'})
64
+ instance.stub!(:json_response).and_return(json)
65
+ instance.stub!(:fetch_roles).and_return(["VOXEO_EMPLOYEE", "TROPO_PRODUCTION_CUSTOMER"])
66
+ instance.extra[:roles].should include('VOXEO_EMPLOYEE')
67
+ end
68
+ end
52
69
  end
70
+
71
+ describe "response" do
72
+ let(:instance) { subject.new(app, "http://www.example.com")}
73
+ it 'should set an expected auth hash' do
74
+ json = MultiJson.load(RESPONSE_JSON, :symbolize_keys => true)
75
+ instance.stub!(:request).and_return({'username' => 'jdyer', 'password' => '1234'})
76
+ instance.stub!(:json_response).and_return(json)
77
+ instance.uid.should == '12345'
78
+ instance.credentials[:username].should == 'jdyer'
79
+ instance.info[:name].should == 'John Dyer'
80
+ instance.extra[:job_title].should == 'System Engineer'
81
+ instance.extra[:state].should == 'FL'
82
+ instance.extra[:zip_code].should == '32801'
83
+ instance.extra[:number].should == '1234567890'
84
+ instance.extra[:email].should == 'user@test.com'
85
+ instance.extra[:address].should == '189 South Orange Avenue'
86
+ instance.extra[:address2].should == '#1000'
87
+ end
88
+
89
+ it "should return empty roles by default" do
90
+ json = MultiJson.load(RESPONSE_JSON, :symbolize_keys => true)
91
+ instance.stub!(:request).and_return({'username' => 'jdyer', 'password' => '1234'})
92
+ instance.stub!(:json_response).and_return(json)
93
+ instance.extra[:roles].should == nil
94
+ end
95
+
96
+ end
97
+
53
98
  end
@@ -4,13 +4,16 @@ $:.unshift File.expand_path('../../lib', __FILE__)
4
4
  require 'simplecov'
5
5
  SimpleCov.start
6
6
  require 'rspec'
7
+ require 'faraday'
7
8
  require 'rack/test'
8
9
  require 'webmock/rspec'
9
10
  require 'omniauth'
11
+ require 'fakeweb'
10
12
  require 'omniauth-tropo'
11
13
 
14
+ FakeWeb.allow_net_connect = false
15
+
12
16
  RSpec.configure do |config|
13
- config.include WebMock::API
14
17
  config.include Rack::Test::Methods
15
18
  config.extend OmniAuth::Test::StrategyMacros, :type => :strategy
16
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-tropo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-15 00:00:00.000000000 Z
12
+ date: 2012-05-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: omniauth
@@ -175,7 +175,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
175
175
  version: '0'
176
176
  segments:
177
177
  - 0
178
- hash: 2352945515170662331
178
+ hash: 4379067423480031072
179
179
  required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  none: false
181
181
  requirements:
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  version: '0'
185
185
  segments:
186
186
  - 0
187
- hash: 2352945515170662331
187
+ hash: 4379067423480031072
188
188
  requirements: []
189
189
  rubyforge_project:
190
190
  rubygems_version: 1.8.24