omniauth-active_passport 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +4 -0
- data/Gemfile.lock +44 -0
- data/README.md +70 -0
- data/Rakefile +12 -0
- data/lib/oauth2_patch/client.rb +20 -0
- data/lib/omniauth-active_passport.rb +2 -0
- data/lib/omniauth-active_passport/version.rb +5 -0
- data/lib/omniauth/strategies/active_passport.rb +42 -0
- data/omniauth-active_passport.gemspec +21 -0
- data/spec/omniauth/strategies/active_passport_spec.rb +29 -0
- data/spec/spec_helper.rb +16 -0
- metadata +112 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
omniauth-active_passport (0.0.1)
|
5
|
+
omniauth (~> 1.0)
|
6
|
+
omniauth-oauth2 (~> 1.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
addressable (2.2.6)
|
12
|
+
diff-lcs (1.1.3)
|
13
|
+
faraday (0.7.5)
|
14
|
+
addressable (~> 2.2.6)
|
15
|
+
multipart-post (~> 1.1.3)
|
16
|
+
rack (>= 1.1.0, < 2)
|
17
|
+
hashie (1.2.0)
|
18
|
+
multi_json (1.0.4)
|
19
|
+
multipart-post (1.1.4)
|
20
|
+
oauth2 (0.5.1)
|
21
|
+
faraday (~> 0.7.4)
|
22
|
+
multi_json (~> 1.0.3)
|
23
|
+
omniauth (1.0.1)
|
24
|
+
hashie (~> 1.2)
|
25
|
+
rack
|
26
|
+
omniauth-oauth2 (1.0.0)
|
27
|
+
oauth2 (~> 0.5.0)
|
28
|
+
omniauth (~> 1.0)
|
29
|
+
rack (1.3.5)
|
30
|
+
rspec (2.7.0)
|
31
|
+
rspec-core (~> 2.7.0)
|
32
|
+
rspec-expectations (~> 2.7.0)
|
33
|
+
rspec-mocks (~> 2.7.0)
|
34
|
+
rspec-core (2.7.1)
|
35
|
+
rspec-expectations (2.7.0)
|
36
|
+
diff-lcs (~> 1.1.2)
|
37
|
+
rspec-mocks (2.7.0)
|
38
|
+
|
39
|
+
PLATFORMS
|
40
|
+
ruby
|
41
|
+
|
42
|
+
DEPENDENCIES
|
43
|
+
omniauth-active_passport!
|
44
|
+
rspec (~> 2.7)
|
data/README.md
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# OmniAuth Active Passport
|
2
|
+
|
3
|
+
This is the official OmniAuth strategy for authenticating to Active Passport. To
|
4
|
+
use it, you'll need to sign up for an OAuth2 Application ID and Secret
|
5
|
+
on the [Active Passport Applications Page](https://passport.active.com/passport/manage).
|
6
|
+
|
7
|
+
|
8
|
+
## Usage with Devise
|
9
|
+
|
10
|
+
Add the following code to devise.rb:
|
11
|
+
|
12
|
+
config.omniauth :active_passport, 'ACTIVE_PASSPORT_KEY', 'ACTIVE_PASSPORT_SECRET', :strategy_class => OmniAuth::Strategies::ActivePassport
|
13
|
+
|
14
|
+
|
15
|
+
Create a controller under users/omniauth_callbacks_controller.rb and add the following:
|
16
|
+
|
17
|
+
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
18
|
+
def passthru
|
19
|
+
render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false
|
20
|
+
end
|
21
|
+
|
22
|
+
def active_passport
|
23
|
+
# successful logic authentication goes here
|
24
|
+
# token will be in request.env['omniauth.auth']
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
Modify routes.rb to include the following:
|
30
|
+
|
31
|
+
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
|
32
|
+
|
33
|
+
devise_scope :user do
|
34
|
+
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
Make sure your model (e.g. user.rb) is omniauthable:
|
39
|
+
devise :omniauthable
|
40
|
+
|
41
|
+
|
42
|
+
Devise will create the following url method for linking to the provider:
|
43
|
+
|
44
|
+
user_omniauth_authorize_path(:active_passport)
|
45
|
+
|
46
|
+
|
47
|
+
## Testing
|
48
|
+
|
49
|
+
You will need to turn on "test mode" for OmniAuth:
|
50
|
+
|
51
|
+
OmniAuth.config.test_mode = true
|
52
|
+
|
53
|
+
|
54
|
+
Once test mode has been enabled, mock_auth will allow you to set provider authentication hash to return during testing:
|
55
|
+
|
56
|
+
OmniAuth.config.mock_auth[:active_passport] = {
|
57
|
+
:provider => 'active_passport',
|
58
|
+
:uid => '1234567890',
|
59
|
+
:info => {
|
60
|
+
:email => 'test@example.com'
|
61
|
+
}
|
62
|
+
})
|
63
|
+
|
64
|
+
|
65
|
+
The following two env variables are needed to prevent routing errors during OmniAuth controller tests:
|
66
|
+
|
67
|
+
before do
|
68
|
+
request.env["devise.mapping"] = Devise.mappings[:user]
|
69
|
+
request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:active_passport]
|
70
|
+
end
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Monkeypatching to work with how Active Passport names the access token on a successful response
|
2
|
+
|
3
|
+
module OAuth2
|
4
|
+
# The OAuth2::Client class
|
5
|
+
class Client
|
6
|
+
# Initializes an AccessToken by making a request to the token endpoint
|
7
|
+
def get_token(params, access_token_opts={})
|
8
|
+
opts = {:raise_errors => true, :parse => params.delete(:parse)}
|
9
|
+
if options[:token_method] == :post
|
10
|
+
opts[:body] = params
|
11
|
+
opts[:headers] = {'Content-Type' => 'application/x-www-form-urlencoded'}
|
12
|
+
else
|
13
|
+
opts[:params] = params
|
14
|
+
end
|
15
|
+
response = request(options[:token_method], token_url, opts)
|
16
|
+
raise Error.new(response) unless response.parsed.is_a?(Hash) && (response.parsed['access_token'] || response.parsed['accessToken'])
|
17
|
+
AccessToken.from_hash(self, response.parsed.merge(access_token_opts))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'omniauth-oauth2'
|
2
|
+
require 'oauth2_patch/client'
|
3
|
+
|
4
|
+
module OmniAuth
|
5
|
+
module Strategies
|
6
|
+
class ActivePassport < OmniAuth::Strategies::OAuth2
|
7
|
+
# Give your strategy a name.
|
8
|
+
option :name, "active_passport"
|
9
|
+
|
10
|
+
# This is where you pass the options you would pass when
|
11
|
+
# initializing your consumer from the OAuth gem.
|
12
|
+
option :client_options, {
|
13
|
+
:site => 'https://passport.active.com',
|
14
|
+
:authorize_url => '/oauth2/authorize',
|
15
|
+
:token_url => '/oauth2/token'
|
16
|
+
}
|
17
|
+
|
18
|
+
option :token_params, { :parse => :json }
|
19
|
+
|
20
|
+
uid { access_token.params['activeEnterprisePersonId'] }
|
21
|
+
|
22
|
+
info do
|
23
|
+
{
|
24
|
+
:email => access_token.params['userName'],
|
25
|
+
:expires_at => access_token.params['expireDateTime']
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
credentials do
|
30
|
+
{
|
31
|
+
:token => access_token.params['accessToken']
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
extra do
|
36
|
+
{
|
37
|
+
:access_token => access_token
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/omniauth-active_passport/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "omniauth-active_passport"
|
6
|
+
s.version = Omniauth::ActivePassport::VERSION
|
7
|
+
s.authors = ["Cesar Camacho"]
|
8
|
+
s.email = ["cesar.camacho@activenetwork.com"]
|
9
|
+
s.homepage = ""
|
10
|
+
s.summary = %q{Official OmniAuth strategy for Active Passport.}
|
11
|
+
s.description = %q{Official OmniAuth strategy for Active Passport.}
|
12
|
+
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
|
18
|
+
s.add_dependency 'omniauth', '~> 1.0'
|
19
|
+
s.add_dependency 'omniauth-oauth2', '~> 1.0'
|
20
|
+
s.add_development_dependency 'rspec', '~> 2.7'
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OmniAuth::Strategies::ActivePassport do
|
4
|
+
def app; lambda{|env| [200, {}, ["Hello."]]} end
|
5
|
+
let(:fresh_strategy){ Class.new(OmniAuth::Strategies::ActivePassport) }
|
6
|
+
|
7
|
+
describe '#client' do
|
8
|
+
subject{ fresh_strategy }
|
9
|
+
|
10
|
+
it 'should be initialized with symbolized client_options' do
|
11
|
+
instance = subject.new(app, :client_options => {'authorize_url' => 'https://example.com'})
|
12
|
+
instance.client.options[:authorize_url].should == 'https://example.com'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#token_params' do
|
17
|
+
subject { fresh_strategy }
|
18
|
+
|
19
|
+
it 'should include parse => json as well as any authorize params passed in the :authorize_params option' do
|
20
|
+
instance = subject.new('abc', 'def', :token_params => {:foo => 'bar', :baz => 'zip'})
|
21
|
+
instance.token_params.should == {'foo' => 'bar', 'baz' => 'zip', 'parse' => :json}
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should include parse => json as well as any top-level options that are marked as :authorize_options' do
|
25
|
+
instance = subject.new('abc', 'def', :token_options => [:scope, :foo], :scope => 'bar', :foo => 'baz')
|
26
|
+
instance.token_params.should == {'scope' => 'bar', 'foo' => 'baz', 'parse' => :json}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.unshift File.expand_path('..', __FILE__)
|
2
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start
|
5
|
+
require 'rspec'
|
6
|
+
require 'rack/test'
|
7
|
+
require 'webmock/rspec'
|
8
|
+
require 'omniauth'
|
9
|
+
require 'omniauth-active_passport'
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.include WebMock::API
|
13
|
+
config.include Rack::Test::Methods
|
14
|
+
config.extend OmniAuth::Test::StrategyMacros, :type => :strategy
|
15
|
+
end
|
16
|
+
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: omniauth-active_passport
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Cesar Camacho
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2012-01-23 00:00:00 -08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: omniauth
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 0
|
30
|
+
version: "1.0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: omniauth-oauth2
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 1
|
42
|
+
- 0
|
43
|
+
version: "1.0"
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 2
|
55
|
+
- 7
|
56
|
+
version: "2.7"
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id003
|
59
|
+
description: Official OmniAuth strategy for Active Passport.
|
60
|
+
email:
|
61
|
+
- cesar.camacho@activenetwork.com
|
62
|
+
executables: []
|
63
|
+
|
64
|
+
extensions: []
|
65
|
+
|
66
|
+
extra_rdoc_files: []
|
67
|
+
|
68
|
+
files:
|
69
|
+
- Gemfile
|
70
|
+
- Gemfile.lock
|
71
|
+
- README.md
|
72
|
+
- Rakefile
|
73
|
+
- lib/oauth2_patch/client.rb
|
74
|
+
- lib/omniauth-active_passport.rb
|
75
|
+
- lib/omniauth-active_passport/version.rb
|
76
|
+
- lib/omniauth/strategies/active_passport.rb
|
77
|
+
- omniauth-active_passport.gemspec
|
78
|
+
- spec/omniauth/strategies/active_passport_spec.rb
|
79
|
+
- spec/spec_helper.rb
|
80
|
+
has_rdoc: true
|
81
|
+
homepage: ""
|
82
|
+
licenses: []
|
83
|
+
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
103
|
+
requirements: []
|
104
|
+
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 1.3.6
|
107
|
+
signing_key:
|
108
|
+
specification_version: 3
|
109
|
+
summary: Official OmniAuth strategy for Active Passport.
|
110
|
+
test_files:
|
111
|
+
- spec/omniauth/strategies/active_passport_spec.rb
|
112
|
+
- spec/spec_helper.rb
|