ipizza 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/ipizza.gemspec +1 -1
- data/lib/ipizza/config.rb +11 -11
- data/lib/ipizza/provider/luminor.rb +4 -0
- data/lib/ipizza/provider/nordea.rb +1 -74
- data/lib/ipizza/provider.rb +2 -2
- data/lib/ipizza/version.rb +1 -1
- data/lib/ipizza.rb +1 -0
- data/spec/certificates/pangalink_luminor_bank.cert.pem +18 -0
- data/spec/certificates/pangalink_luminor_bank_cert.pem +17 -0
- data/spec/config/config.yml +11 -0
- data/spec/ipizza/provider/luminor_spec.rb +89 -0
- data/spec/ipizza/provider_spec.rb +12 -4
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 160c73db6da0b92bb8d59f3478ae2836a8efdfe57cbfe174a0715559a980273a
|
4
|
+
data.tar.gz: 40486a43f105c5ee73fb7d3f4e827124f7bff5cb8fb1bfa93c2fca677c06f9c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 173c0fd63f8e5c43c099a9871005db2bc83272455eb56c10c9c01fabb4a2ab2c42925d490f9608332aca2916ef172ef81bc204ae9f211d9a357a3a4989581f43
|
7
|
+
data.tar.gz: b702c29a1c3ccf89a46a10828c3911ab9d7d9880d43e79387ff4e5cd6284aabe83dcb81c28f65c19f484550f018c2fb93261b0e7a7939ed04c587a76a00ed2be
|
data/ipizza.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.homepage = 'https://github.com/Voog/ipizza'
|
12
12
|
s.summary = 'Implements iPizza protocol to communicate with Estonian Banks'
|
13
13
|
s.description = 'Simplifies generating payment requests and parsing responses from banks when using iPizza protocol.'
|
14
|
-
|
14
|
+
|
15
15
|
s.add_development_dependency 'rspec', '~> 2.9.0'
|
16
16
|
s.add_development_dependency 'guard-rspec'
|
17
17
|
s.add_development_dependency 'rb-fsevent'
|
data/lib/ipizza/config.rb
CHANGED
@@ -8,10 +8,10 @@ module Ipizza
|
|
8
8
|
|
9
9
|
def load_from_file(yaml_path)
|
10
10
|
@certs_root = File.dirname(yaml_path)
|
11
|
-
|
11
|
+
|
12
12
|
load_from_hash(YAML::load_file(yaml_path))
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def load_from_hash(config)
|
16
16
|
config.each do |bank, params|
|
17
17
|
params.each do |param, value|
|
@@ -21,19 +21,19 @@ module Ipizza
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def configure
|
26
26
|
yield self
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def method_missing(m, *args)
|
30
|
-
if /^(lhv|swedbank|seb|sampo|krediidipank|nordea)_(.*)=$/ =~ m.to_s
|
30
|
+
if /^(lhv|swedbank|seb|sampo|krediidipank|nordea|luminor)_(.*)=$/ =~ m.to_s
|
31
31
|
clz = Ipizza::Provider.const_get($1.capitalize)
|
32
32
|
key = $2
|
33
33
|
value = args.first
|
34
|
-
|
34
|
+
|
35
35
|
value = load_certificate(value) if /^file_(cert|key)/ =~ key
|
36
|
-
|
36
|
+
|
37
37
|
if clz.respond_to?(:"#{key}=")
|
38
38
|
return clz.send(:"#{key}=", *[value])
|
39
39
|
end
|
@@ -41,23 +41,23 @@ module Ipizza
|
|
41
41
|
|
42
42
|
super
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
private
|
46
|
-
|
46
|
+
|
47
47
|
def load_certificate(file_path)
|
48
48
|
if File.exist?(file_path)
|
49
49
|
file_path
|
50
50
|
else
|
51
51
|
file_path = File.expand_path(File.join(certs_root, file_path))
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
if File.exist?(file_path)
|
55
55
|
file_path
|
56
56
|
else
|
57
57
|
raise "Could not load certificate from file '#{file_path}'"
|
58
58
|
end
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -1,77 +1,4 @@
|
|
1
1
|
module Ipizza::Provider
|
2
|
-
|
3
|
-
# TODO: configure whether use sha-1 or md5 for signing and verification
|
4
|
-
class Nordea
|
5
|
-
|
6
|
-
require 'ipizza/provider/nordea/payment_request'
|
7
|
-
require 'ipizza/provider/nordea/payment_response'
|
8
|
-
require 'ipizza/provider/nordea/authentication_request'
|
9
|
-
require 'ipizza/provider/nordea/authentication_response'
|
10
|
-
|
11
|
-
class << self
|
12
|
-
attr_accessor :payments_service_url, :payments_return_url, :payments_reject_url, :payments_cancel_url
|
13
|
-
attr_accessor :payments_rcv_id, :payments_language
|
14
|
-
attr_accessor :auth_service_url, :auth_return_url, :auth_reject_url, :auth_cancel_url, :auth_language
|
15
|
-
attr_accessor :auth_rcv_id
|
16
|
-
attr_accessor :file_key, :rcv_account, :rcv_name, :confirm, :keyvers
|
17
|
-
end
|
18
|
-
|
19
|
-
def payment_request(payment, service = 1002)
|
20
|
-
req = Ipizza::Provider::Nordea::PaymentRequest.new
|
21
|
-
req.service_url = self.class.payments_service_url
|
22
|
-
req.params = {
|
23
|
-
'VERSION' => '0003',
|
24
|
-
'STAMP' => payment.stamp,
|
25
|
-
'RCV_ID' => self.class.payments_rcv_id,
|
26
|
-
# 'RCV_ACCOUNT' => self.rcv_account,
|
27
|
-
# 'RCV_NAME' => self.rcv_name,
|
28
|
-
'LANGUAGE' => self.class.payments_language,
|
29
|
-
'AMOUNT' => sprintf('%.2f', payment.amount),
|
30
|
-
'REF' => Ipizza::Util.sign_731(payment.refnum),
|
31
|
-
'DATE' => 'EXPRESS',
|
32
|
-
'MSG' => payment.message,
|
33
|
-
'CONFIRM' => self.class.confirm,
|
34
|
-
'CUR' => payment.currency,
|
35
|
-
'KEYVERS' => self.class.keyvers,
|
36
|
-
'REJECT' => self.class.payments_reject_url,
|
37
|
-
'RETURN' => self.class.payments_return_url,
|
38
|
-
'CANCEL' => self.class.payments_cancel_url
|
39
|
-
}
|
40
|
-
|
41
|
-
req.sign(self.class.file_key)
|
42
|
-
req
|
43
|
-
end
|
44
|
-
|
45
|
-
def payment_response(params)
|
46
|
-
response = Ipizza::Provider::Nordea::PaymentResponse.new(params)
|
47
|
-
response.verify(self.class.file_key)
|
48
|
-
return response
|
49
|
-
end
|
50
|
-
|
51
|
-
def authentication_request
|
52
|
-
req = Ipizza::Provider::Nordea::AuthenticationRequest.new
|
53
|
-
req.service_url = self.class.auth_service_url
|
54
|
-
req.params = {
|
55
|
-
'ACTION_ID' => '701',
|
56
|
-
'VERS' => '0002',
|
57
|
-
'RCVID' => self.class.auth_rcv_id,
|
58
|
-
'LANGCODE' => self.class.auth_language,
|
59
|
-
'STAMP' => Time.now.strftime('%Y%m%d%H%M%S'),
|
60
|
-
'IDTYPE' => '02',
|
61
|
-
'KEYVERS' => self.class.keyvers,
|
62
|
-
'RETLINK' => self.class.auth_return_url,
|
63
|
-
'CANLINK' => self.class.auth_cancel_url,
|
64
|
-
'REJLINK' => self.class.auth_reject_url,
|
65
|
-
'ALG' => '01'
|
66
|
-
}
|
67
|
-
req.sign(self.class.file_key)
|
68
|
-
req
|
69
|
-
end
|
70
|
-
|
71
|
-
def authentication_response(params)
|
72
|
-
response = Ipizza::Provider::Nordea::AuthenticationResponse.new(params)
|
73
|
-
response.verify(self.class.file_key)
|
74
|
-
return response
|
75
|
-
end
|
2
|
+
class Nordea < Ipizza::Provider::Base
|
76
3
|
end
|
77
4
|
end
|
data/lib/ipizza/provider.rb
CHANGED
data/lib/ipizza/version.rb
CHANGED
data/lib/ipizza.rb
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIC+jCCAeICCQDuCELf8TcV7DANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJF
|
3
|
+
RTEOMAwGA1UECAwFVGFydHUxDjAMBgNVBAcMBVRhcnR1MRAwDgYDVQQKDAdNaWxl
|
4
|
+
ZWRpMB4XDTIwMTIwMzA5NDkxMloXDTI1MTIwMTA5NDkxMlowPzELMAkGA1UEBhMC
|
5
|
+
RUUxDjAMBgNVBAgMBVRhcnR1MQ4wDAYDVQQHDAVUYXJ0dTEQMA4GA1UECgwHTWls
|
6
|
+
ZWVkaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALmozE2DIZyCddrW
|
7
|
+
AVoVkNWYRYDytAi5lefa5+PEAQLGFzzfTBRnClla/Qerfe4NBGjyiwu8W6VeLGQ9
|
8
|
+
+GGDw5uEQumII2t0f1vpKWiauyfM+MlSOB6cobf9bwlgs9gBss/PEAa8E4MhpS60
|
9
|
+
p7KNfR1qcq3AWgxpjE9ns7KheARW1q0vNZFzPkONyleZ4HJIC8rlta38/VMvbPnp
|
10
|
+
PLbMnVOvrOsxeDMCgGpD9hupxVsFnhsv/Y4F14W7f4XHl36FhDjP8dkrgrkQE4E1
|
11
|
+
dRnxx6GC4Lv71rQDu+gmgyKtZWmsym1b1Tzw3aCF27J1EReHvCxtkDfMH1VzQSad
|
12
|
+
FGF4yXsCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAQfs7p7MLZqtm9QxBkGcYALDw
|
13
|
+
q/f+5b+n1uPdFcXu8K26hG6RiVZTXUJrIqR71kGLG0mBJ3V6+vAM9gjsUJs20uiZ
|
14
|
+
qvdV2xQglTpJlNTG4Je3Sq4Lbyz4w+8e9VVrE3atfARHxA5FIewCviJNdXS+xeuh
|
15
|
+
GqKaGqLSf4sJlbe3hE69hzlDXmzUE+/OhoaSPS3zFAzcp9m50o7InhYy80eKDRFS
|
16
|
+
hBIDbLnyzb+97If9BMOhqQ/nfCrsX6TiTiqhIFB+qNSIZt733fx9AD3AwSxM51RC
|
17
|
+
V232swdtXx9d39S/DskhMkXkOiqpr+0P87Qyy8Y0/FoWO57i/jXb0uCccPatdw==
|
18
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICnzCCAYegAwIBAgIBATANBgkqhkiG9w0BAQUFADATMREwDwYDVQQDDAhCYW5r
|
3
|
+
bGluazAeFw0yMDEyMDMxMDUwNDJaFw0yMjEyMDMxMDUwNDJaMBMxETAPBgNVBAMM
|
4
|
+
CEJhbmtsaW5rMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgI7m13+Z
|
5
|
+
2B3aBtXE4/2YmsG9koPpD7RHj5B7uEozBCNM1MhfYoE7R7vP1tPm7lD/oJxKk0G3
|
6
|
+
gpODtGDqo+kMfI+TlJ/w2KzwS5YPEop7aliEQ1bbwjjjY2tXYwsBYa0uRvkbwizH
|
7
|
+
lp3PHmr4DBl+JxyETIWGX623nZxZcHAvwcM6VpTtd9+KEpgToQ2gPHHj4/svQfwm
|
8
|
+
mzhdEwFZjwjCaOEHssaUcLsyvKVoJ5OJqBWS1e0mVqWsuJJJnkeG7NVXY2LWDDfP
|
9
|
+
iGogVz9hqqxfNKhCTLGMCG8k8VDQdLTaR+vvmXSUBLh+4TbFA7ZPLSvgbRu3995F
|
10
|
+
CCY/wADRophRVQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQAcTtcH4m//FyGrNC2h
|
11
|
+
rcry6wt843xclEkLQSSNGz9wVCQW/D8I0VNjFPk4PgoUh4bTr+mKrZ6UrrIwBuO6
|
12
|
+
oFj2Nh+Y1wgkpd3LMKae5DvWLE4taZ4ylBGSUXOpQ062+pOtUldZQxBiczaUJWm4
|
13
|
+
4Ns+27Zi5oGyTNnlZXfguEnt54KA+63S4aiHWUSaaXkRN62LeNuyrX0ZdITEfTaz
|
14
|
+
0ZvVcn6FbL6OnsqoZn2MF9+xZfMqlu/K5HfGl928v0fzY8/jQygxUoGFIBfxhn46
|
15
|
+
NniPM9xtnPSu11ut1n0PQPP8K94+MUJz7GDw9o9z3X0zgy8SOFSpY8HNp0MEjN7l
|
16
|
+
MT8n
|
17
|
+
-----END CERTIFICATE-----
|
data/spec/config/config.yml
CHANGED
@@ -42,6 +42,17 @@ seb:
|
|
42
42
|
encoding: UTF-8
|
43
43
|
snd_id: sender
|
44
44
|
|
45
|
+
luminor:
|
46
|
+
service_url: https://banklink.luminor.ee/test
|
47
|
+
return_url: http://test.local/seb
|
48
|
+
cancel_url: http://test.local/seb
|
49
|
+
login: dealer
|
50
|
+
file_cert: ../certificates/pangalink_seb_bank_cert.pem
|
51
|
+
file_key: ../certificates/pangalink_seb_user_key.pem
|
52
|
+
key_secret: foobar
|
53
|
+
encoding: UTF-8
|
54
|
+
snd_id: sender
|
55
|
+
|
45
56
|
nordea:
|
46
57
|
payments_service_url: https://netbank.nordea.com/pnbepaytest/epayn.jsp
|
47
58
|
payments_return_url: http://test.local/nordea
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Ipizza::Provider::Luminor do
|
4
|
+
let(:response_time) { Ipizza::Util.time_to_iso8601(Time.now) }
|
5
|
+
let(:bank_key) { File.expand_path('../../../certificates/pangalink_luminor_bank_key.pem', __FILE__) }
|
6
|
+
|
7
|
+
describe '#payment_request' do
|
8
|
+
let(:payment) { Ipizza::Payment.new(stamp: 1, amount: '123.34', refnum: 1, message: 'Payment message', currency: 'EUR') }
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
req_time = Time.now
|
12
|
+
Time.stub!(:now).and_return(req_time)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should sign the request' do
|
16
|
+
req = Ipizza::Provider::Luminor.new.payment_request(payment)
|
17
|
+
params = {
|
18
|
+
'VK_SERVICE' => '1012',
|
19
|
+
'VK_VERSION' => '008',
|
20
|
+
'VK_SND_ID' => Ipizza::Provider::Luminor.snd_id,
|
21
|
+
'VK_STAMP' => payment.stamp,
|
22
|
+
'VK_AMOUNT' => sprintf('%.2f', payment.amount),
|
23
|
+
'VK_CURR' => payment.currency,
|
24
|
+
'VK_REF' => Ipizza::Util.sign_731(payment.refnum),
|
25
|
+
'VK_MSG' => payment.message,
|
26
|
+
'VK_RETURN' => Ipizza::Provider::Luminor.return_url,
|
27
|
+
'VK_CANCEL' => Ipizza::Provider::Luminor.cancel_url,
|
28
|
+
'VK_DATETIME' => Ipizza::Util.time_to_iso8601(Time.now)
|
29
|
+
}
|
30
|
+
signature = Ipizza::Util.sign(Ipizza::Provider::Luminor.file_key, Ipizza::Provider::Luminor.key_secret, Ipizza::Util.mac_data_string(params, Ipizza::Request::PARAM_ORDER['1012']))
|
31
|
+
req.sign_params['VK_MAC'].should == signature
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#payment_response' do
|
36
|
+
let(:params) {
|
37
|
+
{
|
38
|
+
'VK_SERVICE' => '1111', 'VK_VERSION' => '008', 'VK_SND_ID' => 'LUMINOR', 'VK_REC_ID' => 'sender',
|
39
|
+
'VK_STAMP' => '20150111000004', 'VK_T_NO' => '1143', 'VK_AMOUNT' => '.17', 'VK_CURR' => 'EUR',
|
40
|
+
'VK_REC_ACC' => 'EE411010002050618003', 'VK_REC_NAME' => 'ÕILIS OÜ',
|
41
|
+
'VK_SND_ACC' => 'EE541010010046155012', 'VK_SND_NAME' => 'TÕÄGER Leõpäöld¸´¨¦',
|
42
|
+
'VK_REF' => '201501110000048', 'VK_MSG' => 'Invoice #20150111000004', 'VK_T_DATETIME' => response_time,
|
43
|
+
'VK_ENCODING' => 'UTF-8', 'VK_LANG' => 'EST', 'VK_AUTO' => 'N'
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
it 'should parse and verify the payment response from bank' do
|
48
|
+
signature = Ipizza::Util.sign(bank_key, nil, Ipizza::Util.mac_data_string(params, Ipizza::Response::PARAM_ORDER['1111']))
|
49
|
+
Ipizza::Provider::Luminor.new.payment_response(params.merge('VK_MAC' => signature)).should be_valid
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#authentication_request' do
|
54
|
+
before(:each) do
|
55
|
+
req_time = Time.now
|
56
|
+
Time.stub!(:now).and_return(req_time)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should sign the request' do
|
60
|
+
req = Ipizza::Provider::Luminor.new.authentication_request
|
61
|
+
params = {
|
62
|
+
'VK_SERVICE' => '4011',
|
63
|
+
'VK_VERSION' => '008',
|
64
|
+
'VK_SND_ID' => Ipizza::Provider::Luminor.snd_id,
|
65
|
+
'VK_RETURN' => Ipizza::Provider::Luminor.return_url,
|
66
|
+
'VK_DATETIME' => Ipizza::Util.time_to_iso8601(Time.now),
|
67
|
+
'VK_RID' => '',
|
68
|
+
'VK_REPLY' => '3012'
|
69
|
+
}
|
70
|
+
signature = Ipizza::Util.sign(Ipizza::Provider::Luminor.file_key, Ipizza::Provider::Luminor.key_secret, Ipizza::Util.mac_data_string(params, Ipizza::Request::PARAM_ORDER['4011']))
|
71
|
+
req.sign_params['VK_MAC'].should == signature
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#authentication_response' do
|
76
|
+
let(:params) {
|
77
|
+
{
|
78
|
+
'VK_SERVICE' => '3012', 'VK_VERSION' => '008', 'VK_USER' => 'dealer', 'VK_DATETIME' => response_time,
|
79
|
+
'VK_SND_ID' => 'LUMINOR', 'VK_REC_ID' => 'sender', 'VK_USER_NAME' => 'TÕÄGER Leõpäöld¸´¨¦', 'VK_USER_ID' => '35511280268',
|
80
|
+
'VK_COUNTRY' => 'EE', 'VK_OTHER' => '', 'VK_TOKEN' => '7', 'VK_RID' => ''
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
it 'should parse and verify the authentication response from bank' do
|
85
|
+
signature = Ipizza::Util.sign(bank_key, nil, Ipizza::Util.mac_data_string(params, Ipizza::Response::PARAM_ORDER['3012']))
|
86
|
+
Ipizza::Provider::Luminor.new.authentication_response(params.merge('VK_MAC' => signature)).should be_valid
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -9,11 +9,11 @@ describe Ipizza::Provider do
|
|
9
9
|
it 'returns swedbank provider for "swedbank" attribute' do
|
10
10
|
Ipizza::Provider.get('swedbank').should be_a(Ipizza::Provider::Swedbank)
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it 'returns swedbank provider for "hp" attribute' do
|
14
14
|
Ipizza::Provider.get('hp').should be_a(Ipizza::Provider::Swedbank)
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it 'returns seb provider for "eyp" attribute' do
|
18
18
|
Ipizza::Provider.get('eyp').should be_a(Ipizza::Provider::Seb)
|
19
19
|
end
|
@@ -22,6 +22,14 @@ describe Ipizza::Provider do
|
|
22
22
|
Ipizza::Provider.get('seb').should be_a(Ipizza::Provider::Seb)
|
23
23
|
end
|
24
24
|
|
25
|
+
it 'returns luminor provider for "luminor" attribute' do
|
26
|
+
Ipizza::Provider.get('luminor').should be_a(Ipizza::Provider::Luminor)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns luminor provider for "testluminor" attribute' do
|
30
|
+
Ipizza::Provider.get('luminor').should be_a(Ipizza::Provider::Luminor)
|
31
|
+
end
|
32
|
+
|
25
33
|
it 'returns sampo provider for "sampo" attribute' do
|
26
34
|
Ipizza::Provider.get('sampo').should be_a(Ipizza::Provider::Sampo)
|
27
35
|
end
|
@@ -33,11 +41,11 @@ describe Ipizza::Provider do
|
|
33
41
|
it 'returns krediidipank provider for "krep" attribute' do
|
34
42
|
Ipizza::Provider.get('krep').should be_a(Ipizza::Provider::Krediidipank)
|
35
43
|
end
|
36
|
-
|
44
|
+
|
37
45
|
it 'returns krediidipank provider for "krediidipank" attribute' do
|
38
46
|
Ipizza::Provider.get('krediidipank').should be_a(Ipizza::Provider::Krediidipank)
|
39
47
|
end
|
40
|
-
|
48
|
+
|
41
49
|
it 'returns nordea provider for "nordea" attribute' do
|
42
50
|
Ipizza::Provider.get('nordea').should be_a(Ipizza::Provider::Nordea)
|
43
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ipizza
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Priit Haamer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-09-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- lib/ipizza/provider/base.rb
|
99
99
|
- lib/ipizza/provider/krediidipank.rb
|
100
100
|
- lib/ipizza/provider/lhv.rb
|
101
|
+
- lib/ipizza/provider/luminor.rb
|
101
102
|
- lib/ipizza/provider/nordea.rb
|
102
103
|
- lib/ipizza/provider/nordea/authentication_request.rb
|
103
104
|
- lib/ipizza/provider/nordea/authentication_response.rb
|
@@ -120,6 +121,8 @@ files:
|
|
120
121
|
- spec/certificates/pangalink_lhv_bank_cert.pem
|
121
122
|
- spec/certificates/pangalink_lhv_bank_key.pem
|
122
123
|
- spec/certificates/pangalink_lhv_user_key.pem
|
124
|
+
- spec/certificates/pangalink_luminor_bank.cert.pem
|
125
|
+
- spec/certificates/pangalink_luminor_bank_cert.pem
|
123
126
|
- spec/certificates/pangalink_seb_bank_cert.pem
|
124
127
|
- spec/certificates/pangalink_seb_bank_key.pem
|
125
128
|
- spec/certificates/pangalink_seb_user_key.pem
|
@@ -132,6 +135,7 @@ files:
|
|
132
135
|
- spec/ipizza/config_spec.rb
|
133
136
|
- spec/ipizza/provider/krediidipank_spec.rb
|
134
137
|
- spec/ipizza/provider/lhv_spec.rb
|
138
|
+
- spec/ipizza/provider/luminor_spec.rb
|
135
139
|
- spec/ipizza/provider/nordea/authentication_response_spec.rb
|
136
140
|
- spec/ipizza/provider/nordea/payment_request_spec.rb
|
137
141
|
- spec/ipizza/provider/nordea/payment_response_spec.rb
|
@@ -161,8 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
165
|
- !ruby/object:Gem::Version
|
162
166
|
version: '0'
|
163
167
|
requirements: []
|
164
|
-
|
165
|
-
rubygems_version: 2.2.2
|
168
|
+
rubygems_version: 3.0.3
|
166
169
|
signing_key:
|
167
170
|
specification_version: 4
|
168
171
|
summary: Implements iPizza protocol to communicate with Estonian Banks
|
@@ -177,6 +180,8 @@ test_files:
|
|
177
180
|
- spec/certificates/pangalink_lhv_bank_cert.pem
|
178
181
|
- spec/certificates/pangalink_lhv_bank_key.pem
|
179
182
|
- spec/certificates/pangalink_lhv_user_key.pem
|
183
|
+
- spec/certificates/pangalink_luminor_bank.cert.pem
|
184
|
+
- spec/certificates/pangalink_luminor_bank_cert.pem
|
180
185
|
- spec/certificates/pangalink_seb_bank_cert.pem
|
181
186
|
- spec/certificates/pangalink_seb_bank_key.pem
|
182
187
|
- spec/certificates/pangalink_seb_user_key.pem
|
@@ -189,6 +194,7 @@ test_files:
|
|
189
194
|
- spec/ipizza/config_spec.rb
|
190
195
|
- spec/ipizza/provider/krediidipank_spec.rb
|
191
196
|
- spec/ipizza/provider/lhv_spec.rb
|
197
|
+
- spec/ipizza/provider/luminor_spec.rb
|
192
198
|
- spec/ipizza/provider/nordea/authentication_response_spec.rb
|
193
199
|
- spec/ipizza/provider/nordea/payment_request_spec.rb
|
194
200
|
- spec/ipizza/provider/nordea/payment_response_spec.rb
|