omniauth-swedbank 0.1.0 → 0.3.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: 0c3ea7ae5231e19bb917c9286e2e868a3a0fea29
4
- data.tar.gz: e9bfe91613d52e239f93e75097c2dee22c51cbad
2
+ SHA256:
3
+ metadata.gz: '08dd6ff19fc5206753cdbaa5d52bd6e996bdc010c6a5ee5a2a1a3326c3b0377a'
4
+ data.tar.gz: e5f10b84a4bf54f2103b4b7ff2562e820934be35e390bae1e85dd4bd47703400
5
5
  SHA512:
6
- metadata.gz: ccb0883f008cfff47779ca1d6804edba0d9eb93b5de7e97854798b2966dfe3c17b75fb135a2de0ec201a99859a448626bbebdad39306958810a3eea98c3952c4
7
- data.tar.gz: 83752772955b7aee9046ac23fd530ef0a6c3512b49c556702bb9a9ffb1c27231b89719f9338db46ed677e103651ea18fa52bc82ac9a015c1c20c4880756709d8
6
+ metadata.gz: 624179716be3b0ffc26462e1fd11cdc9b532cde86ec059d2ba2fb927ec4ac06e1df436ee5dd43a6b1643bb3daffa522b1b3b8822090805ba514dd6acbfebaffd
7
+ data.tar.gz: a7f24969ca3acf4c424c2b65af68b5c46687ef4a722e95ffc9ae0bb971bc03cee8e31f08d5a8e27408bedc5652957624d2b57947adc77b7f9a800fe25b80b6c6
@@ -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/README.md CHANGED
@@ -2,22 +2,20 @@
2
2
 
3
3
  Omniauth strategy for using Swedbank as an authentication service provider.
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/omniauth-swedbank.png)](http://badge.fury.io/rb/omniauth-swedbank)
6
- [![Build Status](https://travis-ci.org/mak-it/omniauth-swedbank.svg?branch=master)](https://travis-ci.org/mak-it/omniauth-swedbank)
7
-
8
- Supported Ruby versions: 2.2+
5
+ Supported Ruby versions: 2.7+
9
6
 
10
7
  ## Related projects
11
8
 
12
- - [omniauth-citadele](https://github.com/mak-it/omniauth-citadele) - strategy for authenticating with Citadele
13
- - [omniauth-dnb](https://github.com/mak-it/omniauth-dnb) - strategy for authenticating with DNB
14
- - [omniauth-nordea](https://github.com/mak-it/omniauth-nordea) - strategy for authenticating with Nordea
15
- - [omniauth-seb-elink](https://github.com/mak-it/omniauth-seb-elink) - strategy for authenticating with SEB
9
+ - [omniauth-citadele](https://github.com/mitigate-dev/omniauth-citadele) - strategy for authenticating with Citadele
10
+ - [omniauth-dnb](https://github.com/mitigate-dev/omniauth-dnb) - strategy for authenticating with DNB
11
+ - [omniauth-nordea](https://github.com/mitigate-dev/omniauth-nordea) - strategy for authenticating with Nordea
12
+ - [omniauth-seb-elink](https://github.com/mitigate-dev/omniauth-seb-elink) - strategy for authenticating with SEB
16
13
 
17
14
  ## Installation
18
15
 
19
- Add this line to your application's Gemfile:
16
+ Add these lines to your application's Gemfile (omniauth-rails_csrf_protection is required if using Rails):
20
17
 
18
+ gem 'omniauth-rails_csrf_protection'
21
19
  gem 'omniauth-swedbank'
22
20
 
23
21
  And then execute:
@@ -26,7 +24,7 @@ And then execute:
26
24
 
27
25
  Or install it yourself as:
28
26
 
29
- $ gem install omniauth-swedbank
27
+ $ gem install omniauth-rails_csrf_protection omniauth-swedbank
30
28
 
31
29
  ## Usage
32
30
 
@@ -9,6 +9,14 @@ module OmniAuth
9
9
  AUTH_SERVICE = '4002'
10
10
  AUTH_VERSION = '008'
11
11
 
12
+ def self.render_nonce?
13
+ defined?(ActionDispatch::ContentSecurityPolicy::Request) != nil
14
+ end
15
+ if render_nonce?
16
+ include ActionDispatch::ContentSecurityPolicy::Request
17
+ delegate :get_header, :set_header, to: :request
18
+ end
19
+
12
20
  args [:private_key, :public_key, :snd_id, :rec_id]
13
21
 
14
22
  option :private_key, nil
@@ -17,7 +25,7 @@ module OmniAuth
17
25
  option :rec_id, nil
18
26
 
19
27
  option :name, 'swedbank'
20
- option :site, 'https://ib.swedbank.lv/banklink'
28
+ option :site, 'https://www.swedbank.lv/banklink'
21
29
 
22
30
  def stamp
23
31
  return @stamp if @stamp
@@ -102,6 +110,8 @@ module OmniAuth
102
110
  return fail!(:private_key_load_err, e)
103
111
  end
104
112
 
113
+ set_locale_from_query_param
114
+
105
115
  form = OmniAuth::Form.new(:title => I18n.t('omniauth.swedbank.please_wait'), :url => options.site)
106
116
 
107
117
  {
@@ -112,18 +122,45 @@ module OmniAuth
112
122
  'VK_NONCE' => stamp,
113
123
  'VK_RETURN' => callback_url,
114
124
  'VK_MAC' => signature(priv_key),
115
- 'VK_LANG' => 'LAT',
125
+ 'VK_LANG' => resolve_bank_ui_language,
116
126
  'VK_ENCODING' => 'UTF-8'
117
127
  }.each do |name, val|
118
- form.html "<input type=\"hidden\" name=\"#{name}\" value=\"#{val}\" />"
128
+ form.html "<input type=\"hidden\" name=\"#{name}\" value=\"#{escape(val)}\" />"
119
129
  end
120
130
 
121
131
  form.button I18n.t('omniauth.swedbank.click_here_if_not_redirected')
122
132
 
133
+ nonce_attribute = nil
134
+ if self.class.render_nonce?
135
+ nonce_attribute = " nonce='#{escape(content_security_policy_nonce)}'"
136
+ end
123
137
  form.instance_variable_set('@html',
124
- form.to_html.gsub('</form>', '</form><script type="text/javascript">document.forms[0].submit();</script>'))
138
+ form.to_html.gsub('</form>', "</form><script type=\"text/javascript\"#{nonce_attribute}>document.forms[0].submit();</script>"))
125
139
  form.to_response
126
140
  end
141
+
142
+ private
143
+
144
+ def set_locale_from_query_param
145
+ locale = request.params['locale']
146
+ if (locale != nil && locale.strip != '' && I18n.locale_available?(locale))
147
+ I18n.locale = locale
148
+ end
149
+ end
150
+
151
+ def resolve_bank_ui_language
152
+ case I18n.locale
153
+ when :ru then 'RUS'
154
+ when :en then 'ENG'
155
+ when :et then 'EST'
156
+ when :lt then 'LIT'
157
+ else 'LAT'
158
+ end
159
+ end
160
+
161
+ def escape(html_attribute_value)
162
+ CGI.escapeHTML(html_attribute_value) unless html_attribute_value.nil?
163
+ end
127
164
  end
128
165
  end
129
166
  end
@@ -1,5 +1,5 @@
1
1
  module Omniauth
2
2
  module Swedbank
3
- VERSION = '0.1.0'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
@@ -6,11 +6,11 @@ require 'omniauth/swedbank/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'omniauth-swedbank'
8
8
  spec.version = Omniauth::Swedbank::VERSION
9
- spec.authors = ['MAK IT', 'Jānis Kiršteins', 'Kristaps Ērglis']
10
- spec.email = ['admin@makit.lv', 'janis@montadigital.com', 'kristaps.erglis@gmail.com' ]
9
+ spec.authors = ['Mitigate', 'Jānis Kiršteins', 'Kristaps Ērglis']
10
+ spec.email = ['admin@mitigate.dev', 'janis@montadigital.com', 'kristaps.erglis@gmail.com' ]
11
11
  spec.description = %q{OmniAuth strategy for Swedbank Banklink}
12
12
  spec.summary = %q{OmniAuth strategy for Swedbank Banklink}
13
- spec.homepage = 'https://github.com/mak-it/omniauth-swedbank'
13
+ spec.homepage = 'https://github.com/mitigate-dev/omniauth-swedbank'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -18,13 +18,15 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.required_ruby_version = '>= 2.2.2'
21
+ spec.required_ruby_version = '>= 2.7'
22
22
 
23
- spec.add_runtime_dependency 'omniauth', '~> 1.0'
24
- spec.add_runtime_dependency "i18n"
23
+ spec.add_runtime_dependency 'omniauth', '~> 2.1'
24
+ spec.add_runtime_dependency 'i18n'
25
25
 
26
+ spec.add_development_dependency 'rack'
26
27
  spec.add_development_dependency 'rack-test'
27
- spec.add_development_dependency 'rspec', '~> 2.7'
28
- spec.add_development_dependency "bundler", "~> 1.3"
29
- spec.add_development_dependency "rake"
28
+ spec.add_development_dependency 'rspec'
29
+ spec.add_development_dependency 'bundler'
30
+ spec.add_development_dependency 'rake'
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::Swedbank do
4
6
 
@@ -6,11 +8,13 @@ describe OmniAuth::Strategies::Swedbank do
6
8
  PUBLIC_KEY = File.read(File.join(RSpec.configuration.cert_folder, 'response.public.pem'))
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::Swedbank, PRIVATE_KEY, PUBLIC_KEY, 'MY_SND_ID', 'MY_REC_ID')
11
13
  b.run lambda{|env| [404, {}, ['Not Found']]}
12
14
  end.to_app }
13
15
 
16
+ let(:token){ Rack::Protection::AuthenticityToken.random_token }
17
+
14
18
  let(:last_response_nonce) { last_response.body.match(/name="VK_NONCE" value="([^"]*)"/)[1] }
15
19
  let(:last_response_mac) { last_response.body.match(/name="VK_MAC" value="([^"]*)"/)[1] }
16
20
 
@@ -23,7 +27,14 @@ describe OmniAuth::Strategies::Swedbank do
23
27
  'VK_RETURN' => 'http://example.org/auth/swedbank/callback'
24
28
  }
25
29
 
26
- before(:each){ get '/auth/swedbank' }
30
+ before(:each) do
31
+ post(
32
+ '/auth/swedbank',
33
+ {},
34
+ 'rack.session' => {csrf: token},
35
+ 'HTTP_X_CSRF_TOKEN' => token
36
+ )
37
+ end
27
38
 
28
39
  it 'displays a single form' do
29
40
  expect(last_response.status).to eq(200)
@@ -61,17 +72,17 @@ describe OmniAuth::Strategies::Swedbank do
61
72
 
62
73
  context 'with default options' do
63
74
  it 'has the default action tag value' do
64
- expect(last_response.body).to be_include("action='https://ib.swedbank.lv/banklink'")
75
+ expect(last_response.body).to be_include("action='https://www.swedbank.lv/banklink'")
65
76
  end
66
77
 
67
78
  it 'has the default VK_LANG value' do
68
- expect(last_response.body).to be_include("action='https://ib.swedbank.lv/banklink'")
79
+ expect(last_response.body).to be_include("action='https://www.swedbank.lv/banklink'")
69
80
  end
70
81
  end
71
82
 
72
83
  context 'with custom options' do
73
84
  let(:app){ Rack::Builder.new do |b|
74
- b.use Rack::Session::Cookie, {secret: 'abc123'}
85
+ b.use Rack::Session::Cookie, {secret: '5242e6bd9daf0e9645c2d4e22b11ba8cee0bed44439906d5f1bd5dad409d8637'}
75
86
  b.use(OmniAuth::Strategies::Swedbank, PRIVATE_KEY, PUBLIC_KEY, 'MY_SND_ID', 'MY_REC_ID',
76
87
  site: 'https://test.lv/banklink')
77
88
  b.run lambda{|env| [404, {}, ['Not Found']]}
@@ -84,7 +95,7 @@ describe OmniAuth::Strategies::Swedbank do
84
95
 
85
96
  context 'with non-existant private key files' do
86
97
  let(:app){ Rack::Builder.new do |b|
87
- b.use Rack::Session::Cookie, {secret: 'abc123'}
98
+ b.use Rack::Session::Cookie, {secret: '5242e6bd9daf0e9645c2d4e22b11ba8cee0bed44439906d5f1bd5dad409d8637'}
88
99
  b.use(OmniAuth::Strategies::Swedbank, 'missing-private-key-file.pem', PUBLIC_KEY, 'MY_SND_ID', 'MY_REC_ID')
89
100
  b.run lambda{|env| [404, {}, ['Not Found']]}
90
101
  end.to_app }
@@ -124,7 +135,7 @@ describe OmniAuth::Strategies::Swedbank do
124
135
 
125
136
  context 'with non-existant public key file' do
126
137
  let(:app){ Rack::Builder.new do |b|
127
- b.use Rack::Session::Cookie, {secret: 'abc123'}
138
+ b.use Rack::Session::Cookie, {secret: '5242e6bd9daf0e9645c2d4e22b11ba8cee0bed44439906d5f1bd5dad409d8637'}
128
139
  b.use(OmniAuth::Strategies::Swedbank, PRIVATE_KEY, 'missing-public-key-file.pem', 'MY_SND_ID', 'MY_REC_ID')
129
140
  b.run lambda{|env| [404, {}, ['Not Found']]}
130
141
  end.to_app }
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-swedbank
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
- - MAK IT
7
+ - Mitigate
8
8
  - Jānis Kiršteins
9
9
  - Kristaps Ērglis
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-02-14 00:00:00.000000000 Z
13
+ date: 2023-09-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: omniauth
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '1.0'
21
+ version: '2.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '1.0'
28
+ version: '2.1'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: i18n
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -40,6 +40,20 @@ dependencies:
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: rack
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
43
57
  - !ruby/object:Gem::Dependency
44
58
  name: rack-test
45
59
  requirement: !ruby/object:Gem::Requirement
@@ -58,30 +72,30 @@ dependencies:
58
72
  name: rspec
59
73
  requirement: !ruby/object:Gem::Requirement
60
74
  requirements:
61
- - - "~>"
75
+ - - ">="
62
76
  - !ruby/object:Gem::Version
63
- version: '2.7'
77
+ version: '0'
64
78
  type: :development
65
79
  prerelease: false
66
80
  version_requirements: !ruby/object:Gem::Requirement
67
81
  requirements:
68
- - - "~>"
82
+ - - ">="
69
83
  - !ruby/object:Gem::Version
70
- version: '2.7'
84
+ version: '0'
71
85
  - !ruby/object:Gem::Dependency
72
86
  name: bundler
73
87
  requirement: !ruby/object:Gem::Requirement
74
88
  requirements:
75
- - - "~>"
89
+ - - ">="
76
90
  - !ruby/object:Gem::Version
77
- version: '1.3'
91
+ version: '0'
78
92
  type: :development
79
93
  prerelease: false
80
94
  version_requirements: !ruby/object:Gem::Requirement
81
95
  requirements:
82
- - - "~>"
96
+ - - ">="
83
97
  - !ruby/object:Gem::Version
84
- version: '1.3'
98
+ version: '0'
85
99
  - !ruby/object:Gem::Dependency
86
100
  name: rake
87
101
  requirement: !ruby/object:Gem::Requirement
@@ -96,17 +110,31 @@ dependencies:
96
110
  - - ">="
97
111
  - !ruby/object:Gem::Version
98
112
  version: '0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: rack-session
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
99
127
  description: OmniAuth strategy for Swedbank Banklink
100
128
  email:
101
- - admin@makit.lv
129
+ - admin@mitigate.dev
102
130
  - janis@montadigital.com
103
131
  - kristaps.erglis@gmail.com
104
132
  executables: []
105
133
  extensions: []
106
134
  extra_rdoc_files: []
107
135
  files:
136
+ - ".github/workflows/ruby.yml"
108
137
  - ".gitignore"
109
- - ".travis.yml"
110
138
  - Gemfile
111
139
  - LICENSE.txt
112
140
  - README.md
@@ -122,11 +150,11 @@ files:
122
150
  - spec/certs/response.public.pem
123
151
  - spec/omniauth/strategies/swedbank_spec.rb
124
152
  - spec/spec_helper.rb
125
- homepage: https://github.com/mak-it/omniauth-swedbank
153
+ homepage: https://github.com/mitigate-dev/omniauth-swedbank
126
154
  licenses:
127
155
  - MIT
128
156
  metadata: {}
129
- post_install_message:
157
+ post_install_message:
130
158
  rdoc_options: []
131
159
  require_paths:
132
160
  - lib
@@ -134,16 +162,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
162
  requirements:
135
163
  - - ">="
136
164
  - !ruby/object:Gem::Version
137
- version: 2.2.2
165
+ version: '2.7'
138
166
  required_rubygems_version: !ruby/object:Gem::Requirement
139
167
  requirements:
140
168
  - - ">="
141
169
  - !ruby/object:Gem::Version
142
170
  version: '0'
143
171
  requirements: []
144
- rubyforge_project:
145
- rubygems_version: 2.4.8
146
- signing_key:
172
+ rubygems_version: 3.3.26
173
+ signing_key:
147
174
  specification_version: 4
148
175
  summary: OmniAuth strategy for Swedbank Banklink
149
176
  test_files:
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.6
4
- - 2.3.3
5
- - 2.4.1
6
- script: bundle exec rspec