ipizza 0.4.0

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