omniauth-hackid 0.0.1
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/.gitignore +8 -0
- data/.travis.yml +8 -0
- data/Gemfile +5 -0
- data/README.md +102 -0
- data/Rakefile +8 -0
- data/example/Gemfile +5 -0
- data/example/Gemfile.lock +53 -0
- data/example/config.ru +36 -0
- data/lib/omniauth-hackid.rb +1 -0
- data/lib/omniauth/hackid.rb +2 -0
- data/lib/omniauth/hackid/version.rb +5 -0
- data/lib/omniauth/strategies/hackid.rb +223 -0
- data/omniauth-hackid.gemspec +23 -0
- data/test/access_token_options_test.rb +9 -0
- data/test/authorize_params_test.rb +24 -0
- data/test/build_access_token_test.rb +48 -0
- data/test/callback_url_test.rb +23 -0
- data/test/client_test.rb +14 -0
- data/test/credentials_test.rb +51 -0
- data/test/extra_test.rb +15 -0
- data/test/helper.rb +58 -0
- data/test/info_test.rb +132 -0
- data/test/raw_info_test.rb +37 -0
- data/test/signed_request_test.rb +109 -0
- data/test/strategy_test.rb +3 -0
- data/test/support/shared_examples.rb +85 -0
- data/test/test.rb +162 -0
- data/test/token_params_test.rb +5 -0
- data/test/uid_test.rb +10 -0
- metadata +138 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
module SignedRequestHelpers
|
|
2
|
+
def signed_request(payload, secret)
|
|
3
|
+
encoded_payload = base64_encode_url(MultiJson.encode(payload))
|
|
4
|
+
encoded_signature = base64_encode_url(signature(encoded_payload, secret))
|
|
5
|
+
[encoded_signature, encoded_payload].join('.')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def base64_encode_url(value)
|
|
9
|
+
Base64.encode64(value).tr('+/', '-_').gsub(/\n/, '')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def signature(payload, secret, algorithm = OpenSSL::Digest::SHA256.new)
|
|
13
|
+
OpenSSL::HMAC.digest(algorithm, secret, payload)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module SignedRequestTests
|
|
18
|
+
class TestCase < StrategyTestCase
|
|
19
|
+
include SignedRequestHelpers
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class CookieAndParamNotPresentTest < TestCase
|
|
23
|
+
test 'is nil' do
|
|
24
|
+
assert_nil strategy.send(:signed_request)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class CookiePresentTest < TestCase
|
|
29
|
+
def setup
|
|
30
|
+
super
|
|
31
|
+
@payload = {
|
|
32
|
+
'algorithm' => 'HMAC-SHA256',
|
|
33
|
+
'code' => 'm4c0d3z',
|
|
34
|
+
'issued_at' => Time.now.to_i,
|
|
35
|
+
'user_id' => '123456'
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@request.stubs(:cookies).returns({"fbsr_#{@client_id}" => signed_request(@payload, @client_secret)})
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test 'parses the access code out from the cookie' do
|
|
42
|
+
assert_equal @payload, strategy.send(:signed_request)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class ParamPresentTest < TestCase
|
|
47
|
+
def setup
|
|
48
|
+
super
|
|
49
|
+
@payload = {
|
|
50
|
+
'algorithm' => 'HMAC-SHA256',
|
|
51
|
+
'oauth_token' => 'XXX',
|
|
52
|
+
'issued_at' => Time.now.to_i,
|
|
53
|
+
'user_id' => '123456'
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@request.stubs(:params).returns({'signed_request' => signed_request(@payload, @client_secret)})
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
test 'parses the access code out from the param' do
|
|
60
|
+
assert_equal @payload, strategy.send(:signed_request)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class CookieAndParamPresentTest < TestCase
|
|
65
|
+
def setup
|
|
66
|
+
super
|
|
67
|
+
@payload_from_cookie = {
|
|
68
|
+
'algorithm' => 'HMAC-SHA256',
|
|
69
|
+
'from' => 'cookie'
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@request.stubs(:cookies).returns({"fbsr_#{@client_id}" => signed_request(@payload_from_cookie, @client_secret)})
|
|
73
|
+
|
|
74
|
+
@payload_from_param = {
|
|
75
|
+
'algorithm' => 'HMAC-SHA256',
|
|
76
|
+
'from' => 'param'
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@request.stubs(:params).returns({'signed_request' => signed_request(@payload_from_param, @client_secret)})
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
test 'picks param over cookie' do
|
|
83
|
+
assert_equal @payload_from_param, strategy.send(:signed_request)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class RequestPhaseWithSignedRequestTest < StrategyTestCase
|
|
89
|
+
include SignedRequestHelpers
|
|
90
|
+
|
|
91
|
+
def setup
|
|
92
|
+
super
|
|
93
|
+
|
|
94
|
+
payload = {
|
|
95
|
+
'algorithm' => 'HMAC-SHA256',
|
|
96
|
+
'oauth_token' => 'm4c0d3z'
|
|
97
|
+
}
|
|
98
|
+
@raw_signed_request = signed_request(payload, @client_secret)
|
|
99
|
+
@request.stubs(:params).returns("signed_request" => @raw_signed_request)
|
|
100
|
+
|
|
101
|
+
strategy.stubs(:callback_url).returns('/')
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
test 'redirects to callback passing along signed request' do
|
|
105
|
+
strategy.expects(:redirect).with("/?signed_request=#{Rack::Utils.escape(@raw_signed_request)}").once
|
|
106
|
+
strategy.request_phase
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# NOTE it would be useful if this lived in omniauth-oauth2 eventually
|
|
2
|
+
module OAuth2StrategyTests
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.class_eval do
|
|
5
|
+
include ClientTests
|
|
6
|
+
include AuthorizeParamsTests
|
|
7
|
+
include CSRFAuthorizeParamsTests
|
|
8
|
+
include TokenParamsTests
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module ClientTests
|
|
13
|
+
extend BlockTestHelper
|
|
14
|
+
|
|
15
|
+
test 'should be initialized with symbolized client_options' do
|
|
16
|
+
@options = { :client_options => { 'authorize_url' => 'https://example.com' } }
|
|
17
|
+
assert_equal 'https://example.com', strategy.client.options[:authorize_url]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module AuthorizeParamsTests
|
|
22
|
+
extend BlockTestHelper
|
|
23
|
+
|
|
24
|
+
test 'should include any authorize params passed in the :authorize_params option' do
|
|
25
|
+
@options = { :authorize_params => { :foo => 'bar', :baz => 'zip' } }
|
|
26
|
+
assert_equal 'bar', strategy.authorize_params['foo']
|
|
27
|
+
assert_equal 'zip', strategy.authorize_params['baz']
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test 'should include top-level options that are marked as :authorize_options' do
|
|
31
|
+
@options = { :authorize_options => [:scope, :foo], :scope => 'bar', :foo => 'baz' }
|
|
32
|
+
assert_equal 'bar', strategy.authorize_params['scope']
|
|
33
|
+
assert_equal 'baz', strategy.authorize_params['foo']
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test 'should exclude top-level options that are not passed' do
|
|
37
|
+
@options = { :authorize_options => [:bar] }
|
|
38
|
+
refute_has_key :bar, strategy.authorize_params
|
|
39
|
+
refute_has_key 'bar', strategy.authorize_params
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
module CSRFAuthorizeParamsTests
|
|
44
|
+
extend BlockTestHelper
|
|
45
|
+
|
|
46
|
+
test 'should store random state in the session when none is present in authorize or request params' do
|
|
47
|
+
assert_includes strategy.authorize_params.keys, 'state'
|
|
48
|
+
refute_empty strategy.authorize_params['state']
|
|
49
|
+
refute_empty strategy.session['omniauth.state']
|
|
50
|
+
assert_equal strategy.authorize_params['state'], strategy.session['omniauth.state']
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
test 'should store state in the session when present in authorize params vs. a random one' do
|
|
54
|
+
@options = { :authorize_params => { :state => 'bar' } }
|
|
55
|
+
refute_empty strategy.authorize_params['state']
|
|
56
|
+
assert_equal 'bar', strategy.authorize_params[:state]
|
|
57
|
+
refute_empty strategy.session['omniauth.state']
|
|
58
|
+
assert_equal 'bar', strategy.session['omniauth.state']
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
test 'should store state in the session when present in request params vs. a random one' do
|
|
62
|
+
@request.stubs(:params).returns({ 'state' => 'foo' })
|
|
63
|
+
refute_empty strategy.authorize_params['state']
|
|
64
|
+
assert_equal 'foo', strategy.authorize_params[:state]
|
|
65
|
+
refute_empty strategy.session['omniauth.state']
|
|
66
|
+
assert_equal 'foo', strategy.session['omniauth.state']
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
module TokenParamsTests
|
|
71
|
+
extend BlockTestHelper
|
|
72
|
+
|
|
73
|
+
test 'should include any authorize params passed in the :token_params option' do
|
|
74
|
+
@options = { :token_params => { :foo => 'bar', :baz => 'zip' } }
|
|
75
|
+
assert_equal 'bar', strategy.token_params['foo']
|
|
76
|
+
assert_equal 'zip', strategy.token_params['baz']
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
test 'should include top-level options that are marked as :token_options' do
|
|
80
|
+
@options = { :token_options => [:scope, :foo], :scope => 'bar', :foo => 'baz' }
|
|
81
|
+
assert_equal 'bar', strategy.token_params['scope']
|
|
82
|
+
assert_equal 'baz', strategy.token_params['foo']
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
data/test/test.rb
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
require 'helper'
|
|
2
|
+
require 'omniauth-hackid'
|
|
3
|
+
require 'openssl'
|
|
4
|
+
require 'base64'
|
|
5
|
+
|
|
6
|
+
module SignedRequestHelpers
|
|
7
|
+
def signed_request(payload, secret)
|
|
8
|
+
encoded_payload = base64_encode_url(MultiJson.encode(payload))
|
|
9
|
+
encoded_signature = base64_encode_url(signature(encoded_payload, secret))
|
|
10
|
+
[encoded_signature, encoded_payload].join('.')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def base64_encode_url(value)
|
|
14
|
+
Base64.encode64(value).tr('+/', '-_').gsub(/\n/, '')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def signature(payload, secret, algorithm = OpenSSL::Digest::SHA256.new)
|
|
18
|
+
OpenSSL::HMAC.digest(algorithm, secret, payload)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
module SignedRequestTests
|
|
23
|
+
class TestCase < StrategyTestCase
|
|
24
|
+
include SignedRequestHelpers
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class CookieAndParamNotPresentTest < TestCase
|
|
28
|
+
test 'is nil' do
|
|
29
|
+
assert_nil strategy.send(:signed_request)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class CookiePresentTest < TestCase
|
|
34
|
+
def setup
|
|
35
|
+
super
|
|
36
|
+
@payload = {
|
|
37
|
+
'algorithm' => 'HMAC-SHA256',
|
|
38
|
+
'code' => 'm4c0d3z',
|
|
39
|
+
'issued_at' => Time.now.to_i,
|
|
40
|
+
'user_id' => '123456'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@request.stubs(:cookies).returns({"fbsr_#{@client_id}" => signed_request(@payload, @client_secret)})
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test 'parses the access code out from the cookie' do
|
|
47
|
+
assert_equal @payload, strategy.send(:signed_request)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class ParamPresentTest < TestCase
|
|
52
|
+
def setup
|
|
53
|
+
super
|
|
54
|
+
@payload = {
|
|
55
|
+
'algorithm' => 'HMAC-SHA256',
|
|
56
|
+
'oauth_token' => 'XXX',
|
|
57
|
+
'issued_at' => Time.now.to_i,
|
|
58
|
+
'user_id' => '123456'
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@request.stubs(:params).returns({'signed_request' => signed_request(@payload, @client_secret)})
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
test 'parses the access code out from the param' do
|
|
65
|
+
assert_equal @payload, strategy.send(:signed_request)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class CookieAndParamPresentTest < TestCase
|
|
70
|
+
def setup
|
|
71
|
+
super
|
|
72
|
+
@payload_from_cookie = {
|
|
73
|
+
'algorithm' => 'HMAC-SHA256',
|
|
74
|
+
'from' => 'cookie'
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@request.stubs(:cookies).returns({"fbsr_#{@client_id}" => signed_request(@payload_from_cookie, @client_secret)})
|
|
78
|
+
|
|
79
|
+
@payload_from_param = {
|
|
80
|
+
'algorithm' => 'HMAC-SHA256',
|
|
81
|
+
'from' => 'param'
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@request.stubs(:params).returns({'signed_request' => signed_request(@payload_from_param, @client_secret)})
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
test 'picks param over cookie' do
|
|
88
|
+
assert_equal @payload_from_param, strategy.send(:signed_request)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class RequestPhaseWithSignedRequestTest < StrategyTestCase
|
|
94
|
+
include SignedRequestHelpers
|
|
95
|
+
|
|
96
|
+
def setup
|
|
97
|
+
super
|
|
98
|
+
|
|
99
|
+
payload = {
|
|
100
|
+
'algorithm' => 'HMAC-SHA256',
|
|
101
|
+
'oauth_token' => 'm4c0d3z'
|
|
102
|
+
}
|
|
103
|
+
@raw_signed_request = signed_request(payload, @client_secret)
|
|
104
|
+
@request.stubs(:params).returns("signed_request" => @raw_signed_request)
|
|
105
|
+
|
|
106
|
+
strategy.stubs(:callback_url).returns('/')
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
test 'redirects to callback passing along signed request' do
|
|
110
|
+
strategy.expects(:redirect).with("/?signed_request=#{Rack::Utils.escape(@raw_signed_request)}").once
|
|
111
|
+
strategy.request_phase
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
module BuildAccessTokenTests
|
|
116
|
+
class TestCase < StrategyTestCase
|
|
117
|
+
include SignedRequestHelpers
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
class ParamsContainSignedRequestWithAccessTokenTest < TestCase
|
|
121
|
+
def setup
|
|
122
|
+
super
|
|
123
|
+
|
|
124
|
+
@payload = {
|
|
125
|
+
'algorithm' => 'HMAC-SHA256',
|
|
126
|
+
'oauth_token' => 'm4c0d3z',
|
|
127
|
+
'expires' => Time.now.to_i
|
|
128
|
+
}
|
|
129
|
+
@raw_signed_request = signed_request(@payload, @client_secret)
|
|
130
|
+
@request.stubs(:params).returns({"signed_request" => @raw_signed_request})
|
|
131
|
+
|
|
132
|
+
strategy.stubs(:callback_url).returns('/')
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
test 'returns a new access token from the signed request' do
|
|
136
|
+
result = strategy.build_access_token
|
|
137
|
+
assert_kind_of ::OAuth2::AccessToken, result
|
|
138
|
+
assert_equal @payload['oauth_token'], result.token
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
test 'returns an access token with the correct expiry time' do
|
|
142
|
+
result = strategy.build_access_token
|
|
143
|
+
assert_equal @payload['expires'], result.expires_at
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
class ParamsContainAccessTokenStringTest < TestCase
|
|
148
|
+
def setup
|
|
149
|
+
super
|
|
150
|
+
|
|
151
|
+
@request.stubs(:params).returns({'access_token' => 'm4c0d3z'})
|
|
152
|
+
|
|
153
|
+
strategy.stubs(:callback_url).returns('/')
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
test 'returns a new access token' do
|
|
157
|
+
result = strategy.build_access_token
|
|
158
|
+
assert_kind_of ::OAuth2::AccessToken, result
|
|
159
|
+
assert_equal 'm4c0d3z', result.token
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
data/test/uid_test.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: omniauth-hackid
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Steve Yadlowsky
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-09-03 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: omniauth-oauth2
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '1.1'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '1.1'
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: minitest
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ! '>='
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '0'
|
|
38
|
+
type: :development
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: mocha
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ! '>='
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
type: :development
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: rake
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ! '>='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
70
|
+
type: :development
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ! '>='
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '0'
|
|
78
|
+
description:
|
|
79
|
+
email:
|
|
80
|
+
- grizlo42@gmail.com
|
|
81
|
+
executables: []
|
|
82
|
+
extensions: []
|
|
83
|
+
extra_rdoc_files: []
|
|
84
|
+
files:
|
|
85
|
+
- .gitignore
|
|
86
|
+
- .travis.yml
|
|
87
|
+
- Gemfile
|
|
88
|
+
- README.md
|
|
89
|
+
- Rakefile
|
|
90
|
+
- example/Gemfile
|
|
91
|
+
- example/Gemfile.lock
|
|
92
|
+
- example/config.ru
|
|
93
|
+
- lib/omniauth-hackid.rb
|
|
94
|
+
- lib/omniauth/hackid.rb
|
|
95
|
+
- lib/omniauth/hackid/version.rb
|
|
96
|
+
- lib/omniauth/strategies/hackid.rb
|
|
97
|
+
- omniauth-hackid.gemspec
|
|
98
|
+
- test/access_token_options_test.rb
|
|
99
|
+
- test/authorize_params_test.rb
|
|
100
|
+
- test/build_access_token_test.rb
|
|
101
|
+
- test/callback_url_test.rb
|
|
102
|
+
- test/client_test.rb
|
|
103
|
+
- test/credentials_test.rb
|
|
104
|
+
- test/extra_test.rb
|
|
105
|
+
- test/helper.rb
|
|
106
|
+
- test/info_test.rb
|
|
107
|
+
- test/raw_info_test.rb
|
|
108
|
+
- test/signed_request_test.rb
|
|
109
|
+
- test/strategy_test.rb
|
|
110
|
+
- test/support/shared_examples.rb
|
|
111
|
+
- test/test.rb
|
|
112
|
+
- test/token_params_test.rb
|
|
113
|
+
- test/uid_test.rb
|
|
114
|
+
homepage: https://github.com/grizlo42/omniauth-hackid
|
|
115
|
+
licenses: []
|
|
116
|
+
post_install_message:
|
|
117
|
+
rdoc_options: []
|
|
118
|
+
require_paths:
|
|
119
|
+
- lib
|
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ! '>='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '0'
|
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
|
+
none: false
|
|
128
|
+
requirements:
|
|
129
|
+
- - ! '>='
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0'
|
|
132
|
+
requirements: []
|
|
133
|
+
rubyforge_project:
|
|
134
|
+
rubygems_version: 1.8.24
|
|
135
|
+
signing_key:
|
|
136
|
+
specification_version: 3
|
|
137
|
+
summary: HackID strategy for OmniAuth
|
|
138
|
+
test_files: []
|