omniauth-dnb 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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