omniauth-tink 0.1.0
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/Gemfile +13 -0
- data/Guardfile +10 -0
- data/README.md +13 -0
- data/Rakefile +8 -0
- data/lib/omniauth-tink.rb +2 -0
- data/lib/omniauth-tink/version.rb +5 -0
- data/lib/omniauth/strategies/tink.rb +40 -0
- data/omniauth-tink.gemspec +25 -0
- data/spec/omniauth/strategies/tink_spec.rb +134 -0
- data/spec/spec_helper.rb +15 -0
- metadata +148 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c40a1ef61226020f93ef63ac000adabe05167f0c
|
4
|
+
data.tar.gz: b63e3ac173e528baae4b6089082f587e65543d91
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 14f5beaba80f6339c41e36dcfd5f8b3e68ca9506020408c3216654a813534987fd871e1389a83d5beb897dbdb81d03888e996b108e0042d912fd9dcf0d0feec8
|
7
|
+
data.tar.gz: 0617dcf9e76daa62f92ffd68771fafec6b48009b72aa49685ee5c7d1694b3076e83b648eba2b571f780df2f10e4048b189a34a56878ed25186eb811e38dfd4e9
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/Gemfile
ADDED
data/Guardfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# OmniAuth Tink
|
2
|
+
|
3
|
+
This is the official OmniAuth strategy for authenticating to Rabobank. To
|
4
|
+
use it, you'll need to sign up for an OAuth2 Application ID and Secret
|
5
|
+
on the [Tink Applications Page](https://docs.tink.se).
|
6
|
+
|
7
|
+
## Basic Usage
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
use OmniAuth::Builder do
|
11
|
+
provider :tink, ENV['TINK_KEY'], ENV['TINK_SECRET']
|
12
|
+
end
|
13
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'omniauth-oauth2'
|
2
|
+
|
3
|
+
module OmniAuth
|
4
|
+
module Strategies
|
5
|
+
class Tink < OmniAuth::Strategies::OAuth2
|
6
|
+
option :client_options, {
|
7
|
+
site: "https://api.tink.se/api/v1",
|
8
|
+
authorize_url: "https://oauth.tink.se/0.4/authorize",
|
9
|
+
token_url: "/oauth/token"
|
10
|
+
}
|
11
|
+
|
12
|
+
uid { raw_info["id"] }
|
13
|
+
|
14
|
+
info do
|
15
|
+
prune!({
|
16
|
+
"email" => raw_info["username"]
|
17
|
+
})
|
18
|
+
end
|
19
|
+
|
20
|
+
def callback_url
|
21
|
+
full_host + script_name + callback_path
|
22
|
+
end
|
23
|
+
|
24
|
+
def raw_info
|
25
|
+
@raw_info ||= access_token.get("/user", info_options).parsed || {}
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def prune!(hash)
|
31
|
+
hash.delete_if do |_, value|
|
32
|
+
prune!(value) if value.is_a?(Hash)
|
33
|
+
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
OmniAuth.config.add_camelization "tink", "Tink"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/omniauth-tink/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Dunya Kirkali"]
|
6
|
+
gem.email = ["dunyakirkali@gmail.com"]
|
7
|
+
gem.description = %q{Official OmniAuth strategy for Tink.}
|
8
|
+
gem.summary = %q{Official OmniAuth strategy for Tink.}
|
9
|
+
gem.homepage = "https://github.com/ahtung/omniauth-tink"
|
10
|
+
gem.license = "MIT"
|
11
|
+
|
12
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
13
|
+
gem.files = `git ls-files`.split("\n")
|
14
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
gem.name = "omniauth-tink"
|
16
|
+
gem.require_paths = ["lib"]
|
17
|
+
gem.version = OmniAuth::Tink::VERSION
|
18
|
+
|
19
|
+
gem.add_dependency 'omniauth', '~> 1.5'
|
20
|
+
gem.add_dependency 'omniauth-oauth2', '>= 1.4.0', '< 2.0'
|
21
|
+
gem.add_development_dependency 'rspec', '~> 3.5'
|
22
|
+
gem.add_development_dependency 'rack-test'
|
23
|
+
gem.add_development_dependency 'simplecov'
|
24
|
+
gem.add_development_dependency 'webmock'
|
25
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OmniAuth::Strategies::Tink do
|
4
|
+
let(:access_token) { instance_double('AccessToken', :options => {}) }
|
5
|
+
let(:parsed_response) { instance_double('ParsedResponse') }
|
6
|
+
let(:response) { instance_double('Response', :parsed => parsed_response) }
|
7
|
+
|
8
|
+
let(:enterprise_site) { 'https://some.other.site.com/api/v3' }
|
9
|
+
let(:enterprise_authorize_url) { 'https://some.other.site.com/login/oauth/authorize' }
|
10
|
+
let(:enterprise_token_url) { 'https://some.other.site.com/login/oauth/access_token' }
|
11
|
+
let(:enterprise) do
|
12
|
+
OmniAuth::Strategies::Tink.new('TINK_KEY', 'TINK_SECRET',
|
13
|
+
{
|
14
|
+
:client_options => {
|
15
|
+
:site => enterprise_site,
|
16
|
+
:authorize_url => enterprise_authorize_url,
|
17
|
+
:token_url => enterprise_token_url
|
18
|
+
}
|
19
|
+
}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
subject do
|
24
|
+
OmniAuth::Strategies::Tink.new({})
|
25
|
+
end
|
26
|
+
|
27
|
+
before(:each) do
|
28
|
+
allow(subject).to receive(:access_token).and_return(access_token)
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'client options' do
|
32
|
+
it 'should have correct site' do
|
33
|
+
expect(subject.options.client_options.site).to eq('https://api.tink.se/api/v1')
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should have correct authorize url' do
|
37
|
+
expect(subject.options.client_options.authorize_url).to eq('https://oauth.tink.se/0.4/authorize')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should have correct token url' do
|
41
|
+
expect(subject.options.client_options.token_url).to eq('/oauth/token')
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'should be overrideable' do
|
45
|
+
it 'for site' do
|
46
|
+
expect(enterprise.options.client_options.site).to eq(enterprise_site)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'for authorize url' do
|
50
|
+
expect(enterprise.options.client_options.authorize_url).to eq(enterprise_authorize_url)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'for token url' do
|
54
|
+
expect(enterprise.options.client_options.token_url).to eq(enterprise_token_url)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context '#email' do
|
60
|
+
it 'should return email from raw_info if available' do
|
61
|
+
allow(subject).to receive(:raw_info).and_return({ 'email' => 'you@example.com' })
|
62
|
+
expect(subject.email).to eq('you@example.com')
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should return nil if there is no raw_info and email access is not allowed' do
|
66
|
+
allow(subject).to receive(:raw_info).and_return({})
|
67
|
+
expect(subject.email).to be_nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should not return the primary email if there is no raw_info and email access is allowed' do
|
71
|
+
emails = [
|
72
|
+
{ 'email' => 'secondary@example.com', 'primary' => false },
|
73
|
+
{ 'email' => 'primary@example.com', 'primary' => true }
|
74
|
+
]
|
75
|
+
allow(subject).to receive(:raw_info).and_return({})
|
76
|
+
subject.options['scope'] = 'user'
|
77
|
+
allow(subject).to receive(:emails).and_return(emails)
|
78
|
+
expect(subject.email).to be_nil
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should not return the first email if there is no raw_info and email access is allowed' do
|
82
|
+
emails = [
|
83
|
+
{ 'email' => 'first@example.com', 'primary' => false },
|
84
|
+
{ 'email' => 'second@example.com', 'primary' => false }
|
85
|
+
]
|
86
|
+
allow(subject).to receive(:raw_info).and_return({})
|
87
|
+
subject.options['scope'] = 'user'
|
88
|
+
allow(subject).to receive(:emails).and_return(emails)
|
89
|
+
expect(subject.email).to be_nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context '#raw_info' do
|
94
|
+
it 'should use relative paths' do
|
95
|
+
expect(access_token).to receive(:get).with('user').and_return(response)
|
96
|
+
expect(subject.raw_info).to eq(parsed_response)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context '#emails' do
|
101
|
+
it 'should use relative paths' do
|
102
|
+
expect(access_token).to receive(:get).with('user/emails', :headers => {
|
103
|
+
'Accept' => 'application/vnd.github.v3'
|
104
|
+
}).and_return(response)
|
105
|
+
|
106
|
+
subject.options['scope'] = 'user'
|
107
|
+
expect(subject.emails).to eq(parsed_response)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context '#info.email' do
|
112
|
+
it 'should use any available email' do
|
113
|
+
allow(subject).to receive(:raw_info).and_return({})
|
114
|
+
allow(subject).to receive(:email).and_return('you@example.com')
|
115
|
+
expect(subject.info['email']).to eq('you@example.com')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context '#info.urls' do
|
120
|
+
it 'should use html_url from raw_info' do
|
121
|
+
allow(subject).to receive(:raw_info).and_return({ 'login' => 'me', 'html_url' => 'http://enterprise/me' })
|
122
|
+
expect(subject.info['urls']['GitHub']).to eq('http://enterprise/me')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe '#callback_url' do
|
127
|
+
it 'is a combination of host, script name, and callback path' do
|
128
|
+
allow(subject).to receive(:full_host).and_return('https://example.com')
|
129
|
+
allow(subject).to receive(:script_name).and_return('/sub_uri')
|
130
|
+
|
131
|
+
expect(subject.callback_url).to eq('https://example.com/sub_uri/auth/tink/callback')
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
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-tink'
|
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
|
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: omniauth-tink
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dunya Kirkali
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-09-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: omniauth
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: omniauth-oauth2
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.4.0
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '2.0'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.4.0
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.5'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.5'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rack-test
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: simplecov
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: webmock
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
description: Official OmniAuth strategy for Tink.
|
104
|
+
email:
|
105
|
+
- dunyakirkali@gmail.com
|
106
|
+
executables: []
|
107
|
+
extensions: []
|
108
|
+
extra_rdoc_files: []
|
109
|
+
files:
|
110
|
+
- ".gitignore"
|
111
|
+
- ".rspec"
|
112
|
+
- Gemfile
|
113
|
+
- Guardfile
|
114
|
+
- README.md
|
115
|
+
- Rakefile
|
116
|
+
- lib/omniauth-tink.rb
|
117
|
+
- lib/omniauth-tink/version.rb
|
118
|
+
- lib/omniauth/strategies/tink.rb
|
119
|
+
- omniauth-tink.gemspec
|
120
|
+
- spec/omniauth/strategies/tink_spec.rb
|
121
|
+
- spec/spec_helper.rb
|
122
|
+
homepage: https://github.com/ahtung/omniauth-tink
|
123
|
+
licenses:
|
124
|
+
- MIT
|
125
|
+
metadata: {}
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 2.5.1
|
143
|
+
signing_key:
|
144
|
+
specification_version: 4
|
145
|
+
summary: Official OmniAuth strategy for Tink.
|
146
|
+
test_files:
|
147
|
+
- spec/omniauth/strategies/tink_spec.rb
|
148
|
+
- spec/spec_helper.rb
|