omniauth-dnb 0.1.0 → 0.2.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 +5 -5
- data/.github/workflows/ruby.yml +24 -0
- data/LICENSE.txt +1 -1
- data/README.md +12 -4
- data/lib/omniauth/dnb/version.rb +1 -1
- data/lib/omniauth/strategies/dnb.rb +38 -2
- data/omniauth-dnb.gemspec +12 -10
- data/spec/omniauth/strategies/dnb_spec.rb +16 -6
- metadata +55 -28
- data/.travis.yml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 18f838ca9c3df9c7d34b50a2b1c0660dfad728a95dc1625e379f874bb0cbaa3d
|
4
|
+
data.tar.gz: 75bcd75b5d49015de40ebc8e3cc7c09c36b8cf3665671912de39f620af9216b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a12221292096135b63860ea5c61ea7678f7667478448680717e3f2d3649c0800a002dd5efd78e378ddf38f0aa1c8caee26f26061473a0da2cd47214dc5ffa3e
|
7
|
+
data.tar.gz: e6b82769967a12c2f161ac0f80f40583e50f09107be3fe5b4b0ce9feb0cca46f93b662cc79addffb43203009ae0216dfe6b4c629424901df5bb239250e528392
|
@@ -0,0 +1,24 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
15
|
+
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v4
|
18
|
+
- name: Set up Ruby
|
19
|
+
uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
23
|
+
- name: Run tests
|
24
|
+
run: bundle exec rspec
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
# OmniAuth DNB
|
2
2
|
|
3
|
-
[
|
3
|
+
Omniauth strategy for using [Luminor Link](https://www.luminor.lv/en/terms-conditions#luminor-link) as an authentication service provider.
|
4
4
|
|
5
|
-
|
5
|
+
Supported Ruby versions: 2.7+
|
6
|
+
|
7
|
+
## Related projects
|
8
|
+
|
9
|
+
- [omniauth-citadele](https://github.com/mitigate-dev/omniauth-citadele) - strategy for authenticating with Citadele
|
10
|
+
- [omniauth-nordea](https://github.com/mitigate-dev/omniauth-nordea) - strategy for authenticating with Nordea
|
11
|
+
- [omniauth-seb-elink](https://github.com/mitigate-dev/omniauth-seb-elink) - strategy for authenticating with SEB
|
12
|
+
- [omniauth-swedbank](https://github.com/mitigate-dev/omniauth-swedbank) - strategy for authenticating with Swedbank
|
6
13
|
|
7
14
|
## Installation
|
8
15
|
|
9
|
-
Add this line to your application's Gemfile:
|
16
|
+
Add this line to your application's Gemfile (omniauth-rails_csrf_protection is required if using Rails):
|
10
17
|
|
18
|
+
gem 'omniauth-rails_csrf_protection'
|
11
19
|
gem 'omniauth-dnb'
|
12
20
|
|
13
21
|
And then execute:
|
@@ -16,7 +24,7 @@ And then execute:
|
|
16
24
|
|
17
25
|
Or install it yourself as:
|
18
26
|
|
19
|
-
$ gem install omniauth-dnb
|
27
|
+
$ gem install omniauth-rails_csrf_protection omniauth-dnb
|
20
28
|
|
21
29
|
## Usage
|
22
30
|
|
data/lib/omniauth/dnb/version.rb
CHANGED
@@ -12,6 +12,14 @@ module OmniAuth
|
|
12
12
|
AUTH_SERVICE = '3001'
|
13
13
|
AUTH_VERSION = '101'
|
14
14
|
|
15
|
+
def self.render_nonce?
|
16
|
+
defined?(ActionDispatch::ContentSecurityPolicy::Request) != nil
|
17
|
+
end
|
18
|
+
if render_nonce?
|
19
|
+
include ActionDispatch::ContentSecurityPolicy::Request
|
20
|
+
delegate :get_header, :set_header, to: :request
|
21
|
+
end
|
22
|
+
|
15
23
|
args [:private_key, :public_key, :snd_id]
|
16
24
|
|
17
25
|
option :private_key, nil
|
@@ -118,6 +126,8 @@ module OmniAuth
|
|
118
126
|
return fail!(:private_key_load_err, e)
|
119
127
|
end
|
120
128
|
|
129
|
+
set_locale_from_query_param
|
130
|
+
|
121
131
|
form = OmniAuth::Form.new(:title => I18n.t('omniauth.dnb.please_wait'), :url => options.site)
|
122
132
|
|
123
133
|
{
|
@@ -127,17 +137,43 @@ module OmniAuth
|
|
127
137
|
'VK_STAMP' => stamp,
|
128
138
|
'VK_RETURN' => callback_url,
|
129
139
|
'VK_MAC' => signature(priv_key),
|
130
|
-
'VK_LANG' =>
|
140
|
+
'VK_LANG' => resolve_bank_ui_language,
|
131
141
|
}.each do |name, val|
|
132
142
|
form.html "<input type=\"hidden\" name=\"#{name}\" value=\"#{val}\" />"
|
133
143
|
end
|
134
144
|
|
135
145
|
form.button I18n.t('omniauth.dnb.click_here_if_not_redirected')
|
136
146
|
|
147
|
+
nonce_attribute = nil
|
148
|
+
if self.class.render_nonce?
|
149
|
+
nonce_attribute = " nonce='#{escape(content_security_policy_nonce)}'"
|
150
|
+
end
|
151
|
+
|
137
152
|
form.instance_variable_set('@html',
|
138
|
-
form.to_html.gsub('</form>',
|
153
|
+
form.to_html.gsub('</form>', "</form><script type=\"text/javascript\"#{nonce_attribute}>document.forms[0].submit();</script>"))
|
139
154
|
form.to_response
|
140
155
|
end
|
156
|
+
|
157
|
+
private
|
158
|
+
|
159
|
+
def set_locale_from_query_param
|
160
|
+
locale = request.params['locale']
|
161
|
+
if (locale != nil && locale.strip != '' && I18n.locale_available?(locale))
|
162
|
+
I18n.locale = locale
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def resolve_bank_ui_language
|
167
|
+
case I18n.locale
|
168
|
+
when :ru then 'RUS'
|
169
|
+
when :en then 'ENG'
|
170
|
+
else 'LAT'
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def escape(html_attribute_value)
|
175
|
+
CGI.escapeHTML(html_attribute_value) unless html_attribute_value.nil?
|
176
|
+
end
|
141
177
|
end
|
142
178
|
end
|
143
179
|
end
|
data/omniauth-dnb.gemspec
CHANGED
@@ -5,11 +5,11 @@ require 'omniauth/dnb/version'
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'omniauth-dnb'
|
7
7
|
spec.version = Omniauth::Dnb::VERSION
|
8
|
-
spec.authors = ['
|
9
|
-
spec.email = ['admin@
|
10
|
-
spec.description = %q{OmniAuth strategy for DNB Link}
|
11
|
-
spec.summary = %q{OmniAuth strategy for DNB Link}
|
12
|
-
spec.homepage = ''
|
8
|
+
spec.authors = ['Mitigate']
|
9
|
+
spec.email = ['admin@mitigate.dev']
|
10
|
+
spec.description = %q{OmniAuth strategy for Luminor (DNB) Link}
|
11
|
+
spec.summary = %q{OmniAuth strategy for Luminor (DNB) Link}
|
12
|
+
spec.homepage = 'https://github.com/mitigate-dev/omniauth-dnb'
|
13
13
|
spec.license = 'MIT'
|
14
14
|
|
15
15
|
spec.files = `git ls-files`.split($/)
|
@@ -17,14 +17,16 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.required_ruby_version = '>= 2.
|
20
|
+
spec.required_ruby_version = '>= 2.7'
|
21
21
|
|
22
|
-
spec.add_runtime_dependency 'omniauth', '~> 1
|
22
|
+
spec.add_runtime_dependency 'omniauth', '~> 2.1'
|
23
23
|
spec.add_runtime_dependency 'i18n'
|
24
24
|
|
25
|
+
spec.add_development_dependency 'rack'
|
25
26
|
spec.add_development_dependency 'rack-test'
|
26
|
-
spec.add_development_dependency 'rspec'
|
27
|
-
spec.add_development_dependency 'bundler'
|
28
|
-
spec.add_development_dependency 'rake'
|
27
|
+
spec.add_development_dependency 'rspec'
|
28
|
+
spec.add_development_dependency 'bundler'
|
29
|
+
spec.add_development_dependency 'rake'
|
29
30
|
spec.add_development_dependency 'byebug'
|
31
|
+
spec.add_development_dependency 'rack-session'
|
30
32
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'rack-protection'
|
3
|
+
require 'rack/session'
|
2
4
|
|
3
5
|
describe OmniAuth::Strategies::Dnb do
|
4
6
|
|
@@ -6,15 +8,23 @@ describe OmniAuth::Strategies::Dnb do
|
|
6
8
|
PUBLIC_KEY = File.read(File.join(RSpec.configuration.cert_folder, 'bank.crt'))
|
7
9
|
|
8
10
|
let(:app){ Rack::Builder.new do |b|
|
9
|
-
b.use Rack::Session::Cookie, { secret: '
|
11
|
+
b.use Rack::Session::Cookie, { secret: '5242e6bd9daf0e9645c2d4e22b11ba8cee0bed44439906d5f1bd5dad409d8637'}
|
10
12
|
b.use(OmniAuth::Strategies::Dnb, PRIVATE_KEY, PUBLIC_KEY, 'MY_SND_ID')
|
11
13
|
b.run lambda{|env| [404, {}, ['Not Found']]}
|
12
14
|
end.to_app }
|
15
|
+
let(:token){ Rack::Protection::AuthenticityToken.random_token }
|
13
16
|
let(:last_response_stamp) { last_response.body.match(/name="VK_STAMP" value="([^"]*)"/)[1] }
|
14
17
|
let(:last_response_mac) { last_response.body.match(/name="VK_MAC" value="([^"]*)"/)[1] }
|
15
18
|
|
16
19
|
context 'request phase' do
|
17
|
-
before(:each)
|
20
|
+
before(:each) do
|
21
|
+
post(
|
22
|
+
'/auth/dnb',
|
23
|
+
{},
|
24
|
+
'rack.session' => {csrf: token},
|
25
|
+
'HTTP_X_CSRF_TOKEN' => token
|
26
|
+
)
|
27
|
+
end
|
18
28
|
|
19
29
|
it 'displays a single form' do
|
20
30
|
expect(last_response.status).to eq(200)
|
@@ -61,13 +71,13 @@ describe OmniAuth::Strategies::Dnb do
|
|
61
71
|
end
|
62
72
|
|
63
73
|
it 'has the default VK_LANG value' do
|
64
|
-
expect(last_response.body.scan('<input type="hidden" name="VK_LANG" value="
|
74
|
+
expect(last_response.body.scan('<input type="hidden" name="VK_LANG" value="ENG"').size).to eq(1)
|
65
75
|
end
|
66
76
|
end
|
67
77
|
|
68
78
|
context 'with custom options' do
|
69
79
|
let(:app){ Rack::Builder.new do |b|
|
70
|
-
b.use Rack::Session::Cookie, { secret: '
|
80
|
+
b.use Rack::Session::Cookie, { secret: '5242e6bd9daf0e9645c2d4e22b11ba8cee0bed44439906d5f1bd5dad409d8637' }
|
71
81
|
b.use(OmniAuth::Strategies::Dnb, PRIVATE_KEY, PUBLIC_KEY, 'MY_SND_ID',
|
72
82
|
site: 'https://test.lv/banklink')
|
73
83
|
b.run lambda{|env| [404, {}, ['Not Found']]}
|
@@ -80,7 +90,7 @@ describe OmniAuth::Strategies::Dnb do
|
|
80
90
|
|
81
91
|
context 'with non-existant private key files' do
|
82
92
|
let(:app){ Rack::Builder.new do |b|
|
83
|
-
b.use Rack::Session::Cookie, { secret: '
|
93
|
+
b.use Rack::Session::Cookie, { secret: '5242e6bd9daf0e9645c2d4e22b11ba8cee0bed44439906d5f1bd5dad409d8637' }
|
84
94
|
b.use(OmniAuth::Strategies::Dnb, 'invalid_key', PUBLIC_KEY, 'MY_SND_ID')
|
85
95
|
b.run lambda{|env| [404, {}, ['Not Found']]}
|
86
96
|
end.to_app }
|
@@ -124,7 +134,7 @@ describe OmniAuth::Strategies::Dnb do
|
|
124
134
|
|
125
135
|
context 'with non-existant public key file' do
|
126
136
|
let(:app){ Rack::Builder.new do |b|
|
127
|
-
b.use Rack::Session::Cookie, { secret: '
|
137
|
+
b.use Rack::Session::Cookie, { secret: '5242e6bd9daf0e9645c2d4e22b11ba8cee0bed44439906d5f1bd5dad409d8637' }
|
128
138
|
b.use(OmniAuth::Strategies::Dnb, PRIVATE_KEY, 'invalid_crt', 'MY_SND_ID')
|
129
139
|
b.run lambda{|env| [404, {}, ['Not Found']]}
|
130
140
|
end.to_app }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-dnb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
7
|
+
- Mitigate
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
26
|
+
version: '2.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: i18n
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rack
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rack-test
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,44 +70,44 @@ dependencies:
|
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rake
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
103
|
+
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: byebug
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,15 +122,29 @@ dependencies:
|
|
108
122
|
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
|
-
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rack-session
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: OmniAuth strategy for Luminor (DNB) Link
|
112
140
|
email:
|
113
|
-
- admin@
|
141
|
+
- admin@mitigate.dev
|
114
142
|
executables: []
|
115
143
|
extensions: []
|
116
144
|
extra_rdoc_files: []
|
117
145
|
files:
|
146
|
+
- ".github/workflows/ruby.yml"
|
118
147
|
- ".gitignore"
|
119
|
-
- ".travis.yml"
|
120
148
|
- Gemfile
|
121
149
|
- LICENSE.txt
|
122
150
|
- README.md
|
@@ -132,11 +160,11 @@ files:
|
|
132
160
|
- spec/certs/bank.key
|
133
161
|
- spec/omniauth/strategies/dnb_spec.rb
|
134
162
|
- spec/spec_helper.rb
|
135
|
-
homepage:
|
163
|
+
homepage: https://github.com/mitigate-dev/omniauth-dnb
|
136
164
|
licenses:
|
137
165
|
- MIT
|
138
166
|
metadata: {}
|
139
|
-
post_install_message:
|
167
|
+
post_install_message:
|
140
168
|
rdoc_options: []
|
141
169
|
require_paths:
|
142
170
|
- lib
|
@@ -144,18 +172,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
172
|
requirements:
|
145
173
|
- - ">="
|
146
174
|
- !ruby/object:Gem::Version
|
147
|
-
version: 2.
|
175
|
+
version: '2.7'
|
148
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
177
|
requirements:
|
150
178
|
- - ">="
|
151
179
|
- !ruby/object:Gem::Version
|
152
180
|
version: '0'
|
153
181
|
requirements: []
|
154
|
-
|
155
|
-
|
156
|
-
signing_key:
|
182
|
+
rubygems_version: 3.3.26
|
183
|
+
signing_key:
|
157
184
|
specification_version: 4
|
158
|
-
summary: OmniAuth strategy for DNB Link
|
185
|
+
summary: OmniAuth strategy for Luminor (DNB) Link
|
159
186
|
test_files:
|
160
187
|
- spec/certs/bank.crt
|
161
188
|
- spec/certs/bank.key
|