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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: afb3d17a4c695e6756e167b7c2dc0fb518dbcab3
4
- data.tar.gz: d7fda4c9b2c7cfda35c02a83361a35c9b2d230ba
2
+ SHA256:
3
+ metadata.gz: 18f838ca9c3df9c7d34b50a2b1c0660dfad728a95dc1625e379f874bb0cbaa3d
4
+ data.tar.gz: 75bcd75b5d49015de40ebc8e3cc7c09c36b8cf3665671912de39f620af9216b3
5
5
  SHA512:
6
- metadata.gz: 4dc9f4bab2599bc0f5c98bc430983acb529c59e138bc5b3e59f552a103c5b157f2208656a47d7482da224b2923d12c6f1119f83620c9506509647ac1ef4a7348
7
- data.tar.gz: 29c699729f0c7b4748fa600500e287e8e3424dcc1cfb91703b960784a722f0e3a86ee760df17de25d374b217d2676d3363f8a7a3ad2d1e9e1e88850612949cbe
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
@@ -1,4 +1,4 @@
1
- Copyright (c) 2017 MAK IT
1
+ Copyright (c) 2017 Mitigate
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,13 +1,21 @@
1
1
  # OmniAuth DNB
2
2
 
3
- [![Build Status](https://travis-ci.org/mak-it/omniauth-dnb.svg?branch=master)](https://travis-ci.org/mak-it/omniauth-dnb)
3
+ Omniauth strategy for using [Luminor Link](https://www.luminor.lv/en/terms-conditions#luminor-link) as an authentication service provider.
4
4
 
5
- Omniauth strategy for using [DNB Link](https://www.dnb.lv/en/business/acceptance-payments-and-customer-authentication-online-dnb-link) as an authentication service provider.
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
 
@@ -1,5 +1,5 @@
1
1
  module Omniauth
2
2
  module Dnb
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -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' => 'LAT',
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>', '</form><script type="text/javascript">document.forms[0].submit();</script>'))
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 = ['MAK IT']
9
- spec.email = ['admin@makit.lv']
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.2.2'
20
+ spec.required_ruby_version = '>= 2.7'
21
21
 
22
- spec.add_runtime_dependency 'omniauth', '~> 1.0'
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', '~> 3.0'
27
- spec.add_development_dependency 'bundler', '~> 1.13'
28
- spec.add_development_dependency 'rake', '~> 12.0'
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: 'abc123'}
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){ get '/auth/dnb' }
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="LAT"').size).to eq(1)
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: 'abc123' }
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: 'abc123' }
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: 'abc123' }
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.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
- - MAK IT
8
- autorequire:
7
+ - Mitigate
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-10 00:00:00.000000000 Z
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.0'
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.0'
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: '3.0'
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: '3.0'
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: '1.13'
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: '1.13'
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: '12.0'
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: '12.0'
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
- description: OmniAuth strategy for DNB Link
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@makit.lv
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.2.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
- rubyforge_project:
155
- rubygems_version: 2.6.8
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
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.6
4
- - 2.3.3
5
- - 2.4.1
6
- before_install:
7
- - gem install bundler