ipizza 0.4.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.
Files changed (53) hide show
  1. data/.gitignore +2 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +18 -0
  5. data/README.markdown +101 -0
  6. data/Rakefile +25 -0
  7. data/VERSION +1 -0
  8. data/autotest/discover.rb +1 -0
  9. data/init.rb +1 -0
  10. data/ipizza.gemspec +103 -0
  11. data/lib/ipizza.rb +13 -0
  12. data/lib/ipizza/authentication_request.rb +4 -0
  13. data/lib/ipizza/authentication_response.rb +24 -0
  14. data/lib/ipizza/config.rb +54 -0
  15. data/lib/ipizza/payment.rb +15 -0
  16. data/lib/ipizza/payment_request.rb +4 -0
  17. data/lib/ipizza/payment_response.rb +23 -0
  18. data/lib/ipizza/provider/nordea.rb +77 -0
  19. data/lib/ipizza/provider/nordea/authentication_request.rb +29 -0
  20. data/lib/ipizza/provider/nordea/authentication_response.rb +38 -0
  21. data/lib/ipizza/provider/nordea/payment_request.rb +33 -0
  22. data/lib/ipizza/provider/nordea/payment_response.rb +43 -0
  23. data/lib/ipizza/provider/sampo.rb +49 -0
  24. data/lib/ipizza/provider/seb.rb +81 -0
  25. data/lib/ipizza/provider/swedbank.rb +69 -0
  26. data/lib/ipizza/request.rb +17 -0
  27. data/lib/ipizza/response.rb +24 -0
  28. data/lib/ipizza/util.rb +74 -0
  29. data/spec/certificates/bank.crt +21 -0
  30. data/spec/certificates/bank.csr +17 -0
  31. data/spec/certificates/bank.key +27 -0
  32. data/spec/certificates/bank.pub +1 -0
  33. data/spec/certificates/dealer.key +30 -0
  34. data/spec/certificates/dealer.pub +1 -0
  35. data/spec/certificates/nordea_test_priv +1 -0
  36. data/spec/certificates/seb_test_priv.pem +16 -0
  37. data/spec/certificates/seb_test_pub.crt +20 -0
  38. data/spec/certificates/seb_test_pub.pem +20 -0
  39. data/spec/config/config.yml +38 -0
  40. data/spec/config/plain_config.yml +13 -0
  41. data/spec/ipizza/authentication_response_spec.rb +23 -0
  42. data/spec/ipizza/config_spec.rb +58 -0
  43. data/spec/ipizza/provider/nordea/authentication_response_spec.rb +41 -0
  44. data/spec/ipizza/provider/nordea/payment_request_spec.rb +4 -0
  45. data/spec/ipizza/provider/nordea/payment_response_spec.rb +4 -0
  46. data/spec/ipizza/provider/nordea_spec.rb +29 -0
  47. data/spec/ipizza/provider/sampo_spec.rb +4 -0
  48. data/spec/ipizza/provider/seb_spec.rb +46 -0
  49. data/spec/ipizza/provider/swedbank_spec.rb +46 -0
  50. data/spec/ipizza/util_spec.rb +21 -0
  51. data/spec/spec_helper.rb +9 -0
  52. data/spec/support/pizza.rb +8 -0
  53. metadata +129 -0
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDYjCCAkoCCQCFffTngA2a1jANBgkqhkiG9w0BAQUFADBzMQswCQYDVQQGEwJF
3
+ RTERMA8GA1UECBMIVGFydHVtYWExDjAMBgNVBAcTBVRhcnR1MQ4wDAYDVQQKEwVF
4
+ ZGljeTESMBAGA1UEAxMJU3Blcm1iYW5rMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHNw
5
+ ZXJtYmFuazAgFw0xMDEwMjMxMzUzMjZaGA8yMjg0MDgwNzEzNTMyNlowczELMAkG
6
+ A1UEBhMCRUUxETAPBgNVBAgTCFRhcnR1bWFhMQ4wDAYDVQQHEwVUYXJ0dTEOMAwG
7
+ A1UEChMFRWRpY3kxEjAQBgNVBAMTCVNwZXJtYmFuazEdMBsGCSqGSIb3DQEJARYO
8
+ aW5mb0BzcGVybWJhbmswggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQDa
9
+ qmkPniJgt51TQ9UcUeIcto06FfLuF59aDRkgJ12JhPJzV2Ec5nbydaHp3MyKtgr0
10
+ zuLiSGc/LH+RLgrKwpGpVNvvJYg6NZKIOW+noHSKBuzYT1JtaNkZSasl2RK9EjT6
11
+ qAJ8hzPPBaOu5amBEM4MesUStZ1KYSwElvFQysqJZfccOyjCAypOhPpUYlbsTH4W
12
+ 1+7h2uIjZPsafasludipxKM1ncwG2YF82uYPW+NyIrp87x1oJwfsGQBhstMKUtUx
13
+ DEQ0LwTzTYGCH/j+TLnCujSkQVsdYmNfje9PTQxGWLT92CjJ90dyePdwACDa7Qoi
14
+ kN+WLuESkSRT+OjV9Sa5AgEjMA0GCSqGSIb3DQEBBQUAA4IBAQB+Eq2qbKCmuAw+
15
+ pSzotW7JlhU1GW0nWbvGU2T7y4SgKuRfHBh5tujhKGxMP76pIp96MuRGYZzTrPhE
16
+ rxtXqEgh4b55iZDYK4EEspOaEnZgmktZgCRBLyGS95CVTxoKV20EYNxGQprMRu6T
17
+ ll1nV3YgEYpp5UdQs38fP3rY+Yx6C2Vi4p+DPD1MCDGtxfzDA5LSnHnKas82nR90
18
+ eHsacbmrkLMlBOuPGRMwRyGbOHNsFa1O6hLk8IFz1HZUJJepKnCLhC6zjl0AlMi5
19
+ gJ8iY0fhJKQSp50oJtb4MymTo2IZBlQL7or7kviNETpbdGfplKn8U11VTAUjRC5/
20
+ Tp9Eluhh
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIICtjCCAZ4CAQAwczELMAkGA1UEBhMCRUUxETAPBgNVBAgTCFRhcnR1bWFhMQ4w
3
+ DAYDVQQHEwVUYXJ0dTEOMAwGA1UEChMFRWRpY3kxEjAQBgNVBAMTCVNwZXJtYmFu
4
+ azEdMBsGCSqGSIb3DQEJARYOaW5mb0BzcGVybWJhbmswggEgMA0GCSqGSIb3DQEB
5
+ AQUAA4IBDQAwggEIAoIBAQDaqmkPniJgt51TQ9UcUeIcto06FfLuF59aDRkgJ12J
6
+ hPJzV2Ec5nbydaHp3MyKtgr0zuLiSGc/LH+RLgrKwpGpVNvvJYg6NZKIOW+noHSK
7
+ BuzYT1JtaNkZSasl2RK9EjT6qAJ8hzPPBaOu5amBEM4MesUStZ1KYSwElvFQysqJ
8
+ ZfccOyjCAypOhPpUYlbsTH4W1+7h2uIjZPsafasludipxKM1ncwG2YF82uYPW+Ny
9
+ Irp87x1oJwfsGQBhstMKUtUxDEQ0LwTzTYGCH/j+TLnCujSkQVsdYmNfje9PTQxG
10
+ WLT92CjJ90dyePdwACDa7QoikN+WLuESkSRT+OjV9Sa5AgEjoAAwDQYJKoZIhvcN
11
+ AQEFBQADggEBAIXdnuggh14uC9f+lReTa/XG3GK6guryVwDQ2kHhmfS+GNwc5wFp
12
+ 3hNNFnbsF/4jmszKRSgwwvy5x8ebTFfp5VklHHo/l5YSggiSBp8+IIAPS26WtclU
13
+ lJZAcwhr+3YG5phjqe4auJhXFrPU9HtyhC8MmALRHj2FWvkMizEGH4efLEbTETPp
14
+ zVAVienF8BJSsSUx1W5kG03OGPp6d7vFR/o2xgy+NmX1jrZvIz7MwMd/3x8Xclaj
15
+ /Huu1Gsnw0xELrzvftbi8LE0VEuKcSuqISiXGhLdzmCbRgEnzqU6WoJoge7kgYg+
16
+ WfPSzI0aDrhvZ95FVfyuBwNSvSFCPFBfP6M=
17
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEogIBAAKCAQEA2qppD54iYLedU0PVHFHiHLaNOhXy7hefWg0ZICddiYTyc1dh
3
+ HOZ28nWh6dzMirYK9M7i4khnPyx/kS4KysKRqVTb7yWIOjWSiDlvp6B0igbs2E9S
4
+ bWjZGUmrJdkSvRI0+qgCfIczzwWjruWpgRDODHrFErWdSmEsBJbxUMrKiWX3HDso
5
+ wgMqToT6VGJW7Ex+Ftfu4driI2T7Gn2rJbnYqcSjNZ3MBtmBfNrmD1vjciK6fO8d
6
+ aCcH7BkAYbLTClLVMQxENC8E802Bgh/4/ky5wro0pEFbHWJjX43vT00MRli0/dgo
7
+ yfdHcnj3cAAg2u0KIpDfli7hEpEkU/jo1fUmuQIBIwKCAQA4OnLJgG89cQsyqwrq
8
+ Bm1X1yuhONgRVogP13t9S/N7Ii+3QlrM6s4hFu8e4QFlf0SlWcVQIT8e346EauzV
9
+ DXXptrw2Ljj5BnYjB3R7j6jwSuxyIwaRKZbpPtQ87q0MC/7+oDsnVfdhHrUPt2YZ
10
+ 37/0lJkTcIeIJ52ax7plO3Xo0JnQMtuyLI6/JMmZ5yK9Ew/L7sb7qhA9kwuDI6Ja
11
+ 5SHMPVqQRqZi5YEjIQJ0PjP9M6FkEJdIdeUD/WkCVjUmsJOq2/JX7mK+xkutz4rs
12
+ /GhCjw/quH1vcfjBZDswDb/vhBF1+iGj1qLmCRDycRjVWDodytI0RdqtdowfkO9u
13
+ jiALAoGBAPk9eHG3dZP+iht7shF9X+Dhqn3o1Nwv9uZ/gJeI2KkduOWECSg3I6H7
14
+ rZ51MTGESw2Cm/88THvl1ROBKZgC18u6Rp+/8i+q6EdEwIGy20vMxIKmA0DyTxtn
15
+ Lo5V6imY3l+xTt7K37Oj4OzI15SOT1v+x11WlavPIPO7822dXL+JAoGBAOCYp5mO
16
+ ivlopLJlu6Hk99GN4jJCxf+upARHq2NX1+UAALLV1zkyqyIxdAUrca7cR8eRoNHZ
17
+ LIMvo1SCHYjGWpJQGPYB1qqbYhPuxpPquEpIdAJQ/t0H5key9gkFnzEmeLwP9XHX
18
+ RqiI5o/b4oEO8T3o0TRX3uLZv53kYBD8b7GxAoGAQBce+KuEomYGQZTWBH9TKzK2
19
+ z+tp73oMSeZFo08TJCw22+7Ahq8XypEspRbSIqz9Wz7XqAgw7KjQZBnmH8Y3fYer
20
+ wq2zThYBNuXLGglrlyYGpUChwD5O2ykpOose9MDouYVdbH1Pd1YGo0mWhUkqWXwH
21
+ YSTkqIW4BCkEFN9SXSMCgYEA2i3ko8xMfUEVBRJegAL/XdpJcqdD/7D3Ghm8byIi
22
+ LuoPTqPYY3MMpN+VRtm+5GD1RYYnMkCu5daBaAlehN3xlXJhZAHJOASoayJ3wuQD
23
+ e1xTb/bo8/kLlhuP64HN1/l8mW6WqRpEo7gwbn3Ut+KhNNOJZgw3mopiXt3ZqhnL
24
+ lqsCgYEA6P5SoSj3LOaPISNqwXKgz+JZc7fHuhcUNkg5gh7kzTqo2wtT1HHB/qgu
25
+ tr44JyzTRY5K2r9YYWctCA69rClYMiNds+XxhJ7TYdNzRv8/sTrWvn6t4/I+o8Ke
26
+ ETd6XQEi9EUpkfrsVyq9oMTYTZeUiEybDZuYdv2vJSB45X6e6pc=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA2qppD54iYLedU0PVHFHiHLaNOhXy7hefWg0ZICddiYTyc1dhHOZ28nWh6dzMirYK9M7i4khnPyx/kS4KysKRqVTb7yWIOjWSiDlvp6B0igbs2E9SbWjZGUmrJdkSvRI0+qgCfIczzwWjruWpgRDODHrFErWdSmEsBJbxUMrKiWX3HDsowgMqToT6VGJW7Ex+Ftfu4driI2T7Gn2rJbnYqcSjNZ3MBtmBfNrmD1vjciK6fO8daCcH7BkAYbLTClLVMQxENC8E802Bgh/4/ky5wro0pEFbHWJjX43vT00MRli0/dgoyfdHcnj3cAAg2u0KIpDfli7hEpEkU/jo1fUmuQ== priit@Priit.local
@@ -0,0 +1,30 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ Proc-Type: 4,ENCRYPTED
3
+ DEK-Info: DES-EDE3-CBC,DDB688B584D929BC
4
+
5
+ 9bETOPI7ZZyVtbGtMkFAaVwWSVPHOcTnRJMsBMBhArjLuR5P0m4LjDfscfA+9kW0
6
+ TBNL+79D9XbiSQQDtgA47KeplaZNBNV1RQJ4526XprWp9PIkzlFp6zHMU+doOEnY
7
+ eUHGPorFxvYJewO9KtkxCDDurBUckO19jepxBOTrmdsbouk2uTsNYfRu60EJtFoE
8
+ vGk+wlD8lI6UvNWmluBJHBYo/UR3dFaTXEpYVkIAhnOdG+mS0Bm1/aCQylH5pxRz
9
+ H0KcEqEAjwLDeLmGrdphYbpmwy1dCmyxC6H4cxzxXw1AvIM3f0m7H+qCuMY6gnYp
10
+ SNNerpCpujo/7/UesIW2sM9x/3db2DrrhuBka4prUvarbd1JweO5fb2yYIshEjNq
11
+ C+g8b6mzQN9wDiuJdZyjg69yXAtBbOnzujRVVoRmm2w4C0jS/Vudak3+C+75DzgR
12
+ n3QyrAY4wavMHvW716/gAw3oFlnmKyMX+kmxpeMu1Lh+HE3M3oFqULNxkXHkSn1f
13
+ HwhVn+ypf6G5hZb+wmWKMEzwISQTti/bhzXulmW4P4wQFGeHifOCAMDURIKd8Mv8
14
+ zSx5FUihVUwd8ZUKEfvt9o/voO8saIe4DA77jd3U3N8Vb8kkFbBaw6VOMVl59m6l
15
+ ctjBgmtCjKLPwYvlHm4OI73RQk5pN/3BJ3u3gZXb/Px4zmB3I+ErZCH7SXbNZhO3
16
+ 1JQ0XG1/10HtTDBMR1rcaP49E9xzw2nNqdjUi4zbMWxsCCSSg01oNUf3XjBBslJH
17
+ fjsdUAVK7MuIsBhicKsSDZ2XFa5QJHmrLCisVo/lvD7ZoEnHfYAaMdThYA4ZAyJf
18
+ J0h71N2U/vlHSZBY1S7yIGgViYKBqrXUylT3E7ESwisiblM+wkxhlCbMPOtPpzhq
19
+ u6UhPhga+C190I2FQpPN439q+FiIO7qPJw9jCZn/P3b5WM5aj6XjcxCvzqCLXaRx
20
+ uabx4ze+xCci7GeY4B5M7SkFEK2vYxSWTa3phjWxRMKTF02NNq4tCD45HqgphyP4
21
+ 5dvQvn6+RHjGaRmoV9vnU7cciuVrnw/6G4iIllZrulvwVozbIR1an02bJawK4WYC
22
+ inGFGdnY8xenEkKII8QmPmGEtJSt2XWHNd66wC0MGJH1gsgo1nbYrX3woHn4Vekz
23
+ zuGIsZM/+TtMpz/qbG4CS5wHVnloFr//FoFCPNKEqt79BmnsR2Xj05xLjDA4ENey
24
+ MZ0Jy2SulXP2xVauOCSnUJZvxpcue2wPXG5gzakzZ5GTrKOO3psLnA5N5M6kCLX+
25
+ LQHKzA6D+i1d3b+dP0SJQBDAkFGY0GvBOCbgIRs+/SCUNPXY9/GNlx11O+lQAjn6
26
+ BH6fuh2KYh1RoPdQISzCdzP3hhnwo6NEEioqtGA4yQJ6XFjsDb8VmI7O94QjloGd
27
+ uWvbppa3lKgDcQhPbru+R/M7kT15CDafR7NSlPCXJKSh0WO2SAHRjxOUN1/ABeSA
28
+ L484LL+d74CIiGMKJXv4nIvvtaR/gV4a7tfOdw2eJ7e2LPAD8UeBYCyxleTGPP1Y
29
+ aIQOe9025vIvdjBuws+pmsnCKuAVa1p853q17y2iQ8xYORT6tvtD8Q==
30
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA22gPnSfXmJIoCKiK9C5YVhRvkP1Y7z+wrHHB+X5z80MxmsL9q/dyjBoqbv0+ij4iW6ZJXWdJGeXFmjMT9fjb4mTiXNml4VEdeDKo1+nafpUngUjWMzjlyZq1noWBAOcPFbsUEas8dIBhrml+3c4Vyf372ikEknbDQFdE86+7b/sYM/OLAwLn1MzeI107c3ur6n3QgEa+cpJzSULjSUqwFZLUJ7ZasG5FlR+epmIELFubFFZFM8AID2rfBGNlGo49ge313baJHEcQkV2gEOc/bo2WLtEYq6AFsoFl0B3afj/u+Yn5xxZ2x933dIgxWjKhm3SCOWrww4V5qCCmBVywCQ== priit@Priit.local
@@ -0,0 +1 @@
1
+ LEHTI
@@ -0,0 +1,16 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXAIBAAKBgQC+AROlXiRvi1T7Q9fAh0Lw73szAn26mqfKDqd6Bdplq3v+gVWC
3
+ 3v0+bgtfNakRE/UVYOxEA0z0viqRpKzPuNy8OstTMe8fFKs19NW8lBYik6NzJ4Bk
4
+ +B6VmovOm0nJLQJytXKiJyuHP9DqPOVmP8S+azzX7Uqzov1nxo9fvH7y2QIDAQAB
5
+ AoGAFhbD9O6r57fYCloJxB01gBMnTHfWrBH8vbXUbJAvorA7+wuIKG3KHS7n7Yqs
6
+ fArI7FJXRVTo5m8RPdtaJ9ADAT9rjAi3A17TaEueyJl+B/hjHYhsd8MeFhTb2fh0
7
+ rY3F6diL8U/YDbiAIegnKO0zcc6ynJrsQZvzb6DlY/CLPe0CQQD3KXJzw1ZfJ1ts
8
+ c370b/ZC1YrRURw41Q0I8ljYJ8EJw/ngVxrnCIsd43bRnOVp9guJrjTQRkhDC3Gn
9
+ J2Y0+42LAkEAxMxmh7QY4nItBTS0fe1KCat4VDxhyxYEhZKlGDhxW75vNROrripB
10
+ 1ZfBsq5xkY2MM9R7WKmL7SpStrUPIvEVqwJBAOXA4ISd61cupbytrDEbNscv7Afh
11
+ pyNpYOGVLmNYqQgj5c7WCcsD1RYmkRgPCe8y6czFZJDLFHdGVxLz+/16bTsCQC9J
12
+ Ob2TnYMTkhO1JUU4tdh69e+vjoPgp3d80+Rs83fq2wey0UaI6saqryUC21Dw5OYz
13
+ QOv92RxEVhmGibuIl/8CQCiYrzwlZJDlsKrWPZT0E8rzNmLZkhNHzYJP9S7x+FKk
14
+ m3gFeXEBgzGn9UOd6xIAp0p7A1XVBN8XzDMa09gSOks=
15
+ -----END RSA PRIVATE KEY-----
16
+
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDRTCCAq6gAwIBAgIBADANBgkqhkiG9w0BAQQFADB7MQswCQYDVQQGEwJFRTEO
3
+ MAwGA1UECBMFSGFyanUxEDAOBgNVBAcTB1RhbGxpbm4xDDAKBgNVBAoTA0VZUDEL
4
+ MAkGA1UECxMCSVQxDDAKBgNVBAMTA2EuYTEhMB8GCSqGSIb3DQEJARYSYWxsYXIu
5
+ YWxsYXNAZXlwLmVlMB4XDTk5MTExNTA4MTAzM1oXDTk5MTIxNTA4MTAzM1owezEL
6
+ MAkGA1UEBhMCRUUxDjAMBgNVBAgTBUhhcmp1MRAwDgYDVQQHEwdUYWxsaW5uMQww
7
+ CgYDVQQKEwNFWVAxCzAJBgNVBAsTAklUMQwwCgYDVQQDEwNhLmExITAfBgkqhkiG
8
+ 9w0BCQEWEmFsbGFyLmFsbGFzQGV5cC5lZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
9
+ gYkCgYEAvgETpV4kb4tU+0PXwIdC8O97MwJ9upqnyg6negXaZat7/oFVgt79Pm4L
10
+ XzWpERP1FWDsRANM9L4qkaSsz7jcvDrLUzHvHxSrNfTVvJQWIpOjcyeAZPgelZqL
11
+ zptJyS0CcrVyoicrhz/Q6jzlZj/Evms81+1Ks6L9Z8aPX7x+8tkCAwEAAaOB2DCB
12
+ 1TAdBgNVHQ4EFgQUFivCzZNmegEoOxYtg20YMMRB98gwgaUGA1UdIwSBnTCBmoAU
13
+ FivCzZNmegEoOxYtg20YMMRB98ihf6R9MHsxCzAJBgNVBAYTAkVFMQ4wDAYDVQQI
14
+ EwVIYXJqdTEQMA4GA1UEBxMHVGFsbGlubjEMMAoGA1UEChMDRVlQMQswCQYDVQQL
15
+ EwJJVDEMMAoGA1UEAxMDYS5hMSEwHwYJKoZIhvcNAQkBFhJhbGxhci5hbGxhc0Bl
16
+ eXAuZWWCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBfkayuot+e
17
+ fwW8QmPwpWF5AY3oMT/fTncjCljDBOg39IQv4PjnpTdDfwwl3lUIZHHTLM2i0L/c
18
+ eD4D1UFM1qdp2VZzhBd1eeMjxYjCP8qL2v2MfLkCYcP30Sl6ISSkFjFc5qbGXZOc
19
+ C82uR/wUZJDw9kj+R1O46/byG8yA+S9FVw==
20
+ -----END CERTIFICATE-----
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDRTCCAq6gAwIBAgIBADANBgkqhkiG9w0BAQQFADB7MQswCQYDVQQGEwJFRTEO
3
+ MAwGA1UECBMFSGFyanUxEDAOBgNVBAcTB1RhbGxpbm4xDDAKBgNVBAoTA0VZUDEL
4
+ MAkGA1UECxMCSVQxDDAKBgNVBAMTA2EuYTEhMB8GCSqGSIb3DQEJARYSYWxsYXIu
5
+ YWxsYXNAZXlwLmVlMB4XDTk5MTExNTA4MTAzM1oXDTk5MTIxNTA4MTAzM1owezEL
6
+ MAkGA1UEBhMCRUUxDjAMBgNVBAgTBUhhcmp1MRAwDgYDVQQHEwdUYWxsaW5uMQww
7
+ CgYDVQQKEwNFWVAxCzAJBgNVBAsTAklUMQwwCgYDVQQDEwNhLmExITAfBgkqhkiG
8
+ 9w0BCQEWEmFsbGFyLmFsbGFzQGV5cC5lZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
9
+ gYkCgYEAvgETpV4kb4tU+0PXwIdC8O97MwJ9upqnyg6negXaZat7/oFVgt79Pm4L
10
+ XzWpERP1FWDsRANM9L4qkaSsz7jcvDrLUzHvHxSrNfTVvJQWIpOjcyeAZPgelZqL
11
+ zptJyS0CcrVyoicrhz/Q6jzlZj/Evms81+1Ks6L9Z8aPX7x+8tkCAwEAAaOB2DCB
12
+ 1TAdBgNVHQ4EFgQUFivCzZNmegEoOxYtg20YMMRB98gwgaUGA1UdIwSBnTCBmoAU
13
+ FivCzZNmegEoOxYtg20YMMRB98ihf6R9MHsxCzAJBgNVBAYTAkVFMQ4wDAYDVQQI
14
+ EwVIYXJqdTEQMA4GA1UEBxMHVGFsbGlubjEMMAoGA1UEChMDRVlQMQswCQYDVQQL
15
+ EwJJVDEMMAoGA1UEAxMDYS5hMSEwHwYJKoZIhvcNAQkBFhJhbGxhci5hbGxhc0Bl
16
+ eXAuZWWCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBfkayuot+e
17
+ fwW8QmPwpWF5AY3oMT/fTncjCljDBOg39IQv4PjnpTdDfwwl3lUIZHHTLM2i0L/c
18
+ eD4D1UFM1qdp2VZzhBd1eeMjxYjCP8qL2v2MfLkCYcP30Sl6ISSkFjFc5qbGXZOc
19
+ C82uR/wUZJDw9kj+R1O46/byG8yA+S9FVw==
20
+ -----END CERTIFICATE-----
@@ -0,0 +1,38 @@
1
+ swedbank:
2
+ service_url: https://www.swedbank.ee/banklink
3
+ return_url: http://test.local/swedbank
4
+ cancel_url: http://test.local/swedbank
5
+ login: dealer
6
+ file_cert: ../certificates/bank.crt
7
+ file_key: ../certificates/dealer.key
8
+ key_secret: foobar
9
+ encoding: UTF-8
10
+ snd_id: sender
11
+
12
+ seb:
13
+ service_url: https://www.seb.ee/banklink
14
+ return_url: http://test.local/seb
15
+ cancel_url: http://test.local/seb
16
+ login: dealer
17
+ file_cert: ../certificates/seb_test_pub.crt
18
+ file_key: ../certificates/dealer.key
19
+ key_secret: foobar
20
+ encoding: UTF-8
21
+ snd_id: sender
22
+
23
+ nordea:
24
+ payments_service_url: https://netbank.nordea.com/pnbepaytest/epayn.jsp
25
+ payments_return_url: http://test.local/nordea
26
+ payments_reject_url: http://test.local/nordea
27
+ payments_cancel_url: http://test.local/nordea
28
+ payment_rcv_id: '12345678'
29
+ payments_language: '4'
30
+ auth_service_url: https://netbank.nordea.com/pnbeidtest/eidn.jsp
31
+ auth_return_url: http://priit.local/info.rb
32
+ auth_reject_url: http://priit.local/info.rb
33
+ auth_cancel_url: http://priit.local/info.rb
34
+ auth_language: 'ET'
35
+ auth_rcv_id: '87654321'
36
+ confirm: 'YES'
37
+ keyvers: '0001'
38
+ file_key: ../certificates/nordea_test_priv
@@ -0,0 +1,13 @@
1
+ swedbank:
2
+ service_url: https://www.swedbank.ee/banklink
3
+ return_url: http://test.local/return
4
+ cancel_url: http://test.local/cancel
5
+ snd_id: dealer
6
+ file_cert: ../certificates/bank.pub
7
+ file_key: ../certificates/dealer.key
8
+ key_secret: foobar
9
+ encoding: ISO-8859-4
10
+ wtf: not
11
+
12
+ seb:
13
+ service_url: https://www.seb.ee/banklink
@@ -0,0 +1,23 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Ipizza::AuthenticationResponse do
4
+
5
+ before(:each) do
6
+ @resp1 = Ipizza::AuthenticationResponse.new({'VK_INFO' => 'NIMI:tõõger , LeõpäöldžŽšŠ;ISIK:35511280268'})
7
+ @resp2 = Ipizza::AuthenticationResponse.new({'VK_INFO' => 'ISIK:35511280268;NIMI:tõõger , LeõpäöldžŽšŠ'})
8
+ end
9
+
10
+ describe '#info_social_security_id' do
11
+ it 'should get user social security id from the response' do
12
+ @resp1.info_social_security_id.should == '35511280268'
13
+ @resp2.info_social_security_id.should == '35511280268'
14
+ end
15
+ end
16
+
17
+ describe '#info_name' do
18
+ it 'should get user name from the response' do
19
+ @resp1.info_name.should == 'tõõger , LeõpäöldžŽšŠ'
20
+ @resp2.info_name.should == 'tõõger , LeõpäöldžŽšŠ'
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,58 @@
1
+ require 'tempfile'
2
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
+
4
+ describe Ipizza::Config do
5
+ describe '.load_from_file' do
6
+
7
+ before(:each) do
8
+ Ipizza::Config.load_from_file(File.expand_path(File.dirname(__FILE__) + '/../config/plain_config.yml'))
9
+ end
10
+
11
+ it 'should load configuration from yml file' do
12
+ Ipizza::Provider::Swedbank.service_url.should == 'https://www.swedbank.ee/banklink'
13
+ Ipizza::Provider::Swedbank.return_url.should == 'http://test.local/return'
14
+ Ipizza::Provider::Swedbank.cancel_url.should == 'http://test.local/cancel'
15
+ Ipizza::Provider::Swedbank.key_secret.should == 'foobar'
16
+ Ipizza::Provider::Swedbank.snd_id.should == 'dealer'
17
+ Ipizza::Provider::Swedbank.encoding.should == 'ISO-8859-4'
18
+
19
+ Ipizza::Provider::Seb.service_url.should == 'https://www.seb.ee/banklink'
20
+ end
21
+
22
+ it 'should load certificates from path relative to configuration file' do
23
+ Ipizza::Provider::Swedbank.file_key.should == File.expand_path(File.dirname(__FILE__) + '/../certificates/dealer.key')
24
+ Ipizza::Provider::Swedbank.file_cert.should == File.expand_path(File.dirname(__FILE__) + '/../certificates/bank.pub')
25
+ end
26
+
27
+ it 'should load certificates from absolute file paths' do
28
+ cfg = {'swedbank' => YAML::load_file(File.expand_path(File.dirname(__FILE__) + '/../config/config.yml'))['swedbank']}
29
+ cfg['swedbank']['file_key'] = File.expand_path(File.dirname(__FILE__) + '/../certificates/dealer.key')
30
+ cfg['swedbank']['file_cert'] = File.expand_path(File.dirname(__FILE__) + '/../certificates/bank.pub')
31
+
32
+ Tempfile::open('config.yml') do |tmp|
33
+ tmp << cfg.to_yaml
34
+ tmp.flush
35
+
36
+ config = Ipizza::Config.load_from_file(File.expand_path(tmp.path))
37
+
38
+ Ipizza::Provider::Swedbank.file_key.should == File.expand_path(File.dirname(__FILE__) + '/../certificates/dealer.key')
39
+ Ipizza::Provider::Swedbank.file_cert.should == File.expand_path(File.dirname(__FILE__) + '/../certificates/bank.pub')
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '.configure' do
45
+ it 'changes the configuration inside block' do
46
+ Ipizza::Config.configure do |c|
47
+ c.swedbank_service_url = 'http://foo.bar/swedbank'
48
+ end
49
+
50
+ Ipizza::Provider::Swedbank.service_url.should == 'http://foo.bar/swedbank'
51
+ end
52
+
53
+ it 'should raise an error if configuration parameter does not exist' do
54
+ lambda { Ipizza::Config.configure { |c| c.swedbank_unknown_attr = 'foo' } }.should raise_error
55
+ lambda { Ipizza::Config.configure { |c| c.spermbank_service_url = 'foo' } }.should raise_error
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
2
+
3
+ describe Ipizza::Provider::Nordea::AuthenticationResponse do
4
+ before(:each) do
5
+ @valid_params = {
6
+ "B02K_CUSTNAME" => "Demo kasutaja", "B02K_IDNBR" => "87654321", "B02K_TIMESTMP" => "20020101204145428720",
7
+ "B02K_STAMP" => "20101204155339", "B02K_KEYVERS" => "0001", "B02K_MAC" => "A061E22312D7D63FDC2B0B52E16BC971",
8
+ "B02K_CUSTTYPE" => "01", "B02K_ALG" => "01", "B02K_CUSTID" => "37404280367", "B02K_VERS" => "0002"
9
+ }
10
+ end
11
+
12
+ describe '#valid?' do
13
+ context 'given valid parameters' do
14
+ it 'returns true' do
15
+ @response = Ipizza::Provider::Nordea::AuthenticationResponse.new(@valid_params)
16
+ @response.verify(Ipizza::Provider::Nordea.file_key)
17
+ @response.valid?.should be_true
18
+ end
19
+ end
20
+ end
21
+
22
+ describe '#user_info' do
23
+ before(:each) do
24
+ @response = Ipizza::Provider::Nordea::AuthenticationResponse.new(@valid_params)
25
+ end
26
+
27
+ context 'given valid parameters' do
28
+ before(:each) do
29
+ @response.verify(Ipizza::Provider::Nordea.file_key)
30
+ end
31
+
32
+ it 'returns hash containing user name' do
33
+ @response.user_info.fetch('name').should == 'Demo kasutaja'
34
+ end
35
+
36
+ it 'returns hash containing user id' do
37
+ @response.user_info.fetch('custid').should == '37404280367'
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
2
+
3
+ describe Ipizza::Provider::Nordea::PaymentRequest do
4
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
2
+
3
+ describe Ipizza::Provider::Nordea::PaymentResponse do
4
+ end
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Ipizza::Provider::Nordea do
4
+ describe '#authentication_request' do
5
+ before(:each) do
6
+ @req = Ipizza::Provider::Nordea.new.authentication_request
7
+ end
8
+
9
+ it 'returns signed authentication request object' do
10
+ @req.params.fetch('A01Y_MAC').should be
11
+ end
12
+
13
+ it 'adds service url to request' do
14
+ @req.service_url.should == Ipizza::Provider::Nordea.auth_service_url
15
+ end
16
+
17
+ it 'adds return url from configuration to request' do
18
+ @req.request_params.fetch('A01Y_RETLINK').should == Ipizza::Provider::Nordea.auth_return_url
19
+ end
20
+
21
+ it 'adds cancel url from configuration to request' do
22
+ @req.request_params.fetch('A01Y_CANLINK').should == Ipizza::Provider::Nordea.auth_cancel_url
23
+ end
24
+
25
+ it 'adds reject url from configuration to request' do
26
+ @req.request_params.fetch('A01Y_REJLINK').should == Ipizza::Provider::Nordea.auth_reject_url
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Ipizza::Provider::Sampo do
4
+ end
@@ -0,0 +1,46 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Ipizza::Provider::Seb do
4
+ describe '#payment_request' do
5
+
6
+ before(:each) do
7
+ @payment = Ipizza::Payment.new(:stamp => 1, :amount => '123.34', :refnum => 1, :message => 'Payment message', :currency => 'EUR')
8
+ end
9
+
10
+ it 'should sign the request' do
11
+ req = Ipizza::Provider::Seb.new.payment_request(@payment)
12
+ req.sign_params['VK_MAC'].should == 'aVCFvsLJiczQw9VoYMdtoQKj5fXkP8OI+JfQN8bFGKZGxC/X5gVIIi/Bh9AyB6JXwbeMOfUlnvuJIukpmBpDg3dEWkv4xGwKdfacqwYkgSC17OBb7VmZ+B4d6HYaO088wxH1FBSVa87HKFJ7ScTEJfd3ZEZly9WzTPHiFWvpRGDxAYtuO5nfGMcscxOQ0B0cbrIcLKvqLho25hIgns3+lvRDWsOb9lFH//7U8OBOC9SuXCBwvC4Fng3wqmBSKRJgAqvQ40Y4XpBGt3U/ix26Vs1cP8lOGHUyqzrqKbcmvqqhgWzqpa0JoK6im/MhBePyNnHVoC8Pqw4ZwZb4YrrPXw=='
13
+ end
14
+ end
15
+
16
+ describe '#payment_response' do
17
+ it 'should parse and verify the payment response from bank'
18
+ end
19
+
20
+ describe '#authentication_request' do
21
+ before(:each) do
22
+ Time.stub!(:now).and_return(Time.parse('Mar 30 1981'))
23
+ Date.stub!(:today).and_return(Date.parse('Mar 30 1981'))
24
+ end
25
+
26
+ it 'should sign the request' do
27
+ req = Ipizza::Provider::Seb.new.authentication_request
28
+ req.sign_params['VK_MAC'].should == '0ZBLzC3XddTNZ4YBNJlPsJ/RDK4g7Utot9L3lvaxD9J0dfKfN4FUnife3oAQjhyc8lOi5MeBdjekN5mW7KXEMcOSTR9kCJTLZcJg1nMHTDjZcLu9FTAk2wcSrc8kUgigh22vBA38wQfbsZvong5ETYanH8RchZUp72tmO2rFmKzdD8bsnubg6l3m5NxoFv+2F6RsxzwtpkCNaKBpIH4iyWIYFWX7H3hTiUWlAXwKp8GP8OYPr1wUDbP2jVxOwpv7MW3g/heKfu3INBSazsvD22WhsNeKPKmqjJDIiJvo5QRhYq5Shze28oWQyCixMfw2UW7pk0gOtYJkrlwEEo22zQ=='
29
+ end
30
+ end
31
+
32
+ describe '#authentication_response' do
33
+ before(:each) do
34
+ @params = {
35
+ 'VK_TIME' => '00:56:37', 'VK_USER' => '', 'VK_INFO' => 'NIMI:tõõger , LeõpäöldžŽšŠ;ISIK:35511280268',
36
+ 'VK_DATE' => '24.10.2010', 'VK_CHARSET' => 'UTF-8', 'VK_RETURN' => 'http://rkas-aktide-is.local/ipizza/auth',
37
+ 'VK_LANG' => 'EST', 'VK_SERVICE'=>'3002', 'VK_RID' => '', 'VK_SND_ID' => 'EYP', 'VK_VERSION' => '008',
38
+ 'VK_MAC' => 'BeYfkTTj9HNCoMSVbBHSYujFpdcPfo3Ee56ZwaHzYwLj3/QMsb3b5cA7Z1GjeW2VLIoWVtOZmjWN9N74NtH7mu0Nv3RUYep6DJcsZvejs9uklpCLFS1bzInGlQKh3Q04Vttss6dLxgoRJu7lT3hvPKUPHtBZ2RZMHByLuwqNqC4='
39
+ }
40
+ end
41
+
42
+ it 'should parse and verify the authentication response from bank' do
43
+ Ipizza::Provider::Seb.new.authentication_response(@params).should be_valid
44
+ end
45
+ end
46
+ end