nordea-rb 0.2.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.
- data/LICENSE +19 -0
- data/README.markdown +163 -0
- data/Rakefile +25 -0
- data/VERSION +1 -0
- data/bin/nordea +66 -0
- data/lib/nordea/request.rb +42 -0
- data/lib/nordea/resources/account.rb +102 -0
- data/lib/nordea/resources/card.rb +5 -0
- data/lib/nordea/resources/fund.rb +5 -0
- data/lib/nordea/resources/loan.rb +5 -0
- data/lib/nordea/resources/resource.rb +7 -0
- data/lib/nordea/resources.rb +17 -0
- data/lib/nordea/session.rb +63 -0
- data/lib/nordea/support.rb +63 -0
- data/lib/nordea/transaction.rb +27 -0
- data/lib/nordea/version.rb +9 -0
- data/lib/nordea.rb +72 -0
- data/test/fixtures/account.wml +408 -0
- data/test/fixtures/account_10_transactions.wml +257 -0
- data/test/fixtures/account_15_transactions.wml +335 -0
- data/test/fixtures/account_5_transactions.wml +186 -0
- data/test/fixtures/accounts.wml +197 -0
- data/test/fixtures/accounts_overview.wml +111 -0
- data/test/fixtures/error.wml +32 -0
- data/test/fixtures/logged_in_main_menu.wml +133 -0
- data/test/fixtures/login.wml +44 -0
- data/test/fixtures/transfer_to_own_account.wml +175 -0
- data/test/fixtures/transfers.wml +74 -0
- data/test/fixtures/transfers_1.wml +116 -0
- data/test/fixtures/transfers_2.wml +115 -0
- data/test/fixtures/transfers_3.wml +121 -0
- data/test/test_account.rb +168 -0
- data/test/test_functional.rb +63 -0
- data/test/test_helper.rb +58 -0
- data/test/test_nordea.rb +49 -0
- data/test/test_request.rb +44 -0
- data/test/test_session.rb +129 -0
- data/test/test_transaction.rb +58 -0
- metadata +99 -0
data/lib/nordea.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'net/https'
|
4
|
+
begin
|
5
|
+
require 'hpricot'
|
6
|
+
rescue LoadError => e
|
7
|
+
puts "Hpricot is missing. Run `sudo gem install hpricot` to install"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
$:.unshift File.dirname(__FILE__)
|
12
|
+
|
13
|
+
require 'nordea/request'
|
14
|
+
require 'nordea/resources'
|
15
|
+
require 'nordea/session'
|
16
|
+
require 'nordea/support'
|
17
|
+
require 'nordea/transaction'
|
18
|
+
require 'nordea/version'
|
19
|
+
|
20
|
+
module Nordea
|
21
|
+
class InvalidLogin < StandardError; end
|
22
|
+
|
23
|
+
module Commands
|
24
|
+
LOGIN_PHASE_1 = "WAP00"
|
25
|
+
LOGIN_PHASE_2 = "KK10"
|
26
|
+
OVERVIEW = "WAP11TW"
|
27
|
+
PAYMENTS = "FB00TW"
|
28
|
+
LOGOUT = "LL99"
|
29
|
+
RESOURCE = "KF00TW"
|
30
|
+
MAIN_MENU = "WAPL10"
|
31
|
+
TRANSACTIONS = "KF11TW"
|
32
|
+
TRANSFERS = "WAP12TW"
|
33
|
+
TRANSFER_TO_OWN_ACCOUNT_PHASE_1 = "OF00TW"
|
34
|
+
TRANSFER_TO_OWN_ACCOUNT_PHASE_2 = "OF10TW"
|
35
|
+
TRANSFER_TO_OWN_ACCOUNT_PHASE_3 = "OF12TW"
|
36
|
+
end
|
37
|
+
|
38
|
+
def Nordea.new(pnr_or_hash, pin_or_options = {}, &block)
|
39
|
+
pnr, pin = extract_login_details(pnr_or_hash, pin_or_options)
|
40
|
+
raise ArgumentError unless pnr.length == 10 && pin.length == 4
|
41
|
+
Session.new(pnr.to_s, pin.to_s, &block)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# TODO clean up
|
47
|
+
def self.extract_login_details(pnr_or_hash, pin_or_options)
|
48
|
+
if pnr_or_hash.is_a?(Hash)
|
49
|
+
pnr_or_hash.symbolize_keys!
|
50
|
+
pnr = pnr_or_hash[:pnr]
|
51
|
+
pin = pnr_or_hash[:pin]
|
52
|
+
elsif pnr_or_hash.is_a?(Symbol)
|
53
|
+
if pnr_or_hash == :keychain
|
54
|
+
options = { :label => 'Nordea' }.merge(pin_or_options.symbolize_keys)
|
55
|
+
pnr, pin = account_details_from_keychain(options)
|
56
|
+
end
|
57
|
+
elsif pnr_or_hash.is_a?(String) && pin_or_options.is_a?(String)
|
58
|
+
pnr = pnr_or_hash
|
59
|
+
pin = pin_or_options
|
60
|
+
else
|
61
|
+
raise ArgumentError
|
62
|
+
end
|
63
|
+
[pnr.to_s.gsub(/\D+/, ''), pin.to_s.gsub(/\D+/, '')]
|
64
|
+
end
|
65
|
+
|
66
|
+
def Nordea.account_details_from_keychain(options)
|
67
|
+
command = "security find-generic-password -l '#{options[:label]}' -g"
|
68
|
+
command << " #{options[:keychain_file].inspect}" if options[:keychain_file]
|
69
|
+
command << " 2>&1"
|
70
|
+
`#{command}`.scan(/password: "(\d{4})"|"acct"<blob>="(\d{10})"/).flatten.compact.reverse
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,408 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
3
|
+
|
4
|
+
|
5
|
+
<wml>
|
6
|
+
|
7
|
+
<template>
|
8
|
+
<do type="options" label="Solo meny">
|
9
|
+
<go method="
|
10
|
+
get
|
11
|
+
|
12
|
+
" href="https://gfs.nb.se/bin2/gfskod">
|
13
|
+
<postfield name="OBJECT" value="WAPL10"/>
|
14
|
+
<postfield name="sid" value="123456789"/>
|
15
|
+
</go>
|
16
|
+
</do>
|
17
|
+
|
18
|
+
<do type="prev" label="Tillbaka">
|
19
|
+
<prev/>
|
20
|
+
</do>
|
21
|
+
</template>
|
22
|
+
|
23
|
+
<card title="Kontoinform.">
|
24
|
+
|
25
|
+
<onevent type="onenterforward">
|
26
|
+
<refresh>
|
27
|
+
<setvar name="sid" value="123456789"/>
|
28
|
+
</refresh>
|
29
|
+
</onevent>
|
30
|
+
|
31
|
+
<p>
|
32
|
+
<a href="#info">Kontoinformation</a>
|
33
|
+
|
34
|
+
|
35
|
+
<br/>
|
36
|
+
|
37
|
+
Kontohändelser:<br/>
|
38
|
+
|
39
|
+
|
40
|
+
<anchor>090816  -52,70
|
41
|
+
<go href="#trans">
|
42
|
+
<setvar name="date" value="2009-08-16"/>
|
43
|
+
<setvar name="amount" value="-52,70"/>
|
44
|
+
<setvar name="text" value="Res. köp"/>
|
45
|
+
</go>
|
46
|
+
</anchor>
|
47
|
+
|
48
|
+
|
49
|
+
<br/>
|
50
|
+
|
51
|
+
|
52
|
+
<anchor>090815  -300,00
|
53
|
+
<go href="#trans">
|
54
|
+
<setvar name="date" value="2009-08-15"/>
|
55
|
+
<setvar name="amount" value="-300,00"/>
|
56
|
+
<setvar name="text" value="Res. köp"/>
|
57
|
+
</go>
|
58
|
+
</anchor>
|
59
|
+
|
60
|
+
|
61
|
+
<br/>
|
62
|
+
|
63
|
+
|
64
|
+
<anchor>090815  -23,70
|
65
|
+
<go href="#trans">
|
66
|
+
<setvar name="date" value="2009-08-15"/>
|
67
|
+
<setvar name="amount" value="-23,70"/>
|
68
|
+
<setvar name="text" value="Res. köp"/>
|
69
|
+
</go>
|
70
|
+
</anchor>
|
71
|
+
|
72
|
+
|
73
|
+
<br/>
|
74
|
+
|
75
|
+
|
76
|
+
<anchor>090813  -45,70
|
77
|
+
<go href="#trans">
|
78
|
+
<setvar name="date" value="2009-08-13"/>
|
79
|
+
<setvar name="amount" value="-45,70"/>
|
80
|
+
<setvar name="text" value="Res. köp"/>
|
81
|
+
</go>
|
82
|
+
</anchor>
|
83
|
+
|
84
|
+
|
85
|
+
<br/>
|
86
|
+
|
87
|
+
|
88
|
+
<anchor>090813  -23,32
|
89
|
+
<go href="#trans">
|
90
|
+
<setvar name="date" value="2009-08-13"/>
|
91
|
+
<setvar name="amount" value="-23,32"/>
|
92
|
+
<setvar name="text" value="Res. köp"/>
|
93
|
+
</go>
|
94
|
+
</anchor>
|
95
|
+
|
96
|
+
|
97
|
+
<br/>
|
98
|
+
|
99
|
+
|
100
|
+
<anchor>090813  -196,00
|
101
|
+
<go href="#trans">
|
102
|
+
<setvar name="date" value="2009-08-13"/>
|
103
|
+
<setvar name="amount" value="-196,00"/>
|
104
|
+
<setvar name="text" value="Res. köp"/>
|
105
|
+
</go>
|
106
|
+
</anchor>
|
107
|
+
|
108
|
+
|
109
|
+
<br/>
|
110
|
+
|
111
|
+
|
112
|
+
<anchor>090812  -400,00
|
113
|
+
<go href="#trans">
|
114
|
+
<setvar name="date" value="2009-08-12"/>
|
115
|
+
<setvar name="amount" value="-400,00"/>
|
116
|
+
<setvar name="text" value="Kortköp"/>
|
117
|
+
</go>
|
118
|
+
</anchor>
|
119
|
+
|
120
|
+
|
121
|
+
<br/>
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
<anchor>090811  -52,62
|
128
|
+
<go href="#trans">
|
129
|
+
<setvar name="date" value="2009-08-11"/>
|
130
|
+
<setvar name="amount" value="-52,62"/>
|
131
|
+
<setvar name="text" value="Kortköp"/>
|
132
|
+
</go>
|
133
|
+
</anchor>
|
134
|
+
|
135
|
+
|
136
|
+
<br/>
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
<anchor>090811  -185,16
|
143
|
+
<go href="#trans">
|
144
|
+
<setvar name="date" value="2009-08-11"/>
|
145
|
+
<setvar name="amount" value="-185,16"/>
|
146
|
+
<setvar name="text" value="Kortköp"/>
|
147
|
+
</go>
|
148
|
+
</anchor>
|
149
|
+
|
150
|
+
|
151
|
+
<br/>
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
<anchor>090805  -287,03
|
158
|
+
<go href="#trans">
|
159
|
+
<setvar name="date" value="2009-08-05"/>
|
160
|
+
<setvar name="amount" value="-287,03"/>
|
161
|
+
<setvar name="text" value="Kortköp"/>
|
162
|
+
</go>
|
163
|
+
</anchor>
|
164
|
+
|
165
|
+
|
166
|
+
<br/>
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
<anchor>090805  -252,74
|
173
|
+
<go href="#trans">
|
174
|
+
<setvar name="date" value="2009-08-05"/>
|
175
|
+
<setvar name="amount" value="-252,74"/>
|
176
|
+
<setvar name="text" value="Kortköp"/>
|
177
|
+
</go>
|
178
|
+
</anchor>
|
179
|
+
|
180
|
+
|
181
|
+
<br/>
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
<anchor>090804  -300,00
|
188
|
+
<go href="#trans">
|
189
|
+
<setvar name="date" value="2009-08-04"/>
|
190
|
+
<setvar name="amount" value="-300,00"/>
|
191
|
+
<setvar name="text" value="Bankomat"/>
|
192
|
+
</go>
|
193
|
+
</anchor>
|
194
|
+
|
195
|
+
|
196
|
+
<br/>
|
197
|
+
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
|
202
|
+
<anchor>090804  -103,00
|
203
|
+
<go href="#trans">
|
204
|
+
<setvar name="date" value="2009-08-04"/>
|
205
|
+
<setvar name="amount" value="-103,00"/>
|
206
|
+
<setvar name="text" value="Kortköp"/>
|
207
|
+
</go>
|
208
|
+
</anchor>
|
209
|
+
|
210
|
+
|
211
|
+
<br/>
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
<anchor>090804  2.500,00
|
218
|
+
<go href="#trans">
|
219
|
+
<setvar name="date" value="2009-08-04"/>
|
220
|
+
<setvar name="amount" value="2.500,00"/>
|
221
|
+
<setvar name="text" value="Överföring"/>
|
222
|
+
</go>
|
223
|
+
</anchor>
|
224
|
+
|
225
|
+
|
226
|
+
<br/>
|
227
|
+
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
|
232
|
+
<anchor>090801  -236,35
|
233
|
+
<go href="#trans">
|
234
|
+
<setvar name="date" value="2009-08-01"/>
|
235
|
+
<setvar name="amount" value="-236,35"/>
|
236
|
+
<setvar name="text" value="Kortköp"/>
|
237
|
+
</go>
|
238
|
+
</anchor>
|
239
|
+
|
240
|
+
|
241
|
+
<br/>
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
<anchor>090731  -488,99
|
248
|
+
<go href="#trans">
|
249
|
+
<setvar name="date" value="2009-07-31"/>
|
250
|
+
<setvar name="amount" value="-488,99"/>
|
251
|
+
<setvar name="text" value="Kortköp"/>
|
252
|
+
</go>
|
253
|
+
</anchor>
|
254
|
+
|
255
|
+
|
256
|
+
<br/>
|
257
|
+
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
|
262
|
+
<anchor>090729  -33,00
|
263
|
+
<go href="#trans">
|
264
|
+
<setvar name="date" value="2009-07-29"/>
|
265
|
+
<setvar name="amount" value="-33,00"/>
|
266
|
+
<setvar name="text" value="Kortköp"/>
|
267
|
+
</go>
|
268
|
+
</anchor>
|
269
|
+
|
270
|
+
|
271
|
+
<br/>
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
<anchor>090729  -464,00
|
278
|
+
<go href="#trans">
|
279
|
+
<setvar name="date" value="2009-07-29"/>
|
280
|
+
<setvar name="amount" value="-464,00"/>
|
281
|
+
<setvar name="text" value="Kortköp"/>
|
282
|
+
</go>
|
283
|
+
</anchor>
|
284
|
+
|
285
|
+
|
286
|
+
<br/>
|
287
|
+
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
|
292
|
+
<anchor>090729  -198,00
|
293
|
+
<go href="#trans">
|
294
|
+
<setvar name="date" value="2009-07-29"/>
|
295
|
+
<setvar name="amount" value="-198,00"/>
|
296
|
+
<setvar name="text" value="Kortköp"/>
|
297
|
+
</go>
|
298
|
+
</anchor>
|
299
|
+
|
300
|
+
|
301
|
+
<br/>
|
302
|
+
|
303
|
+
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
<anchor>090726  -440,12
|
308
|
+
<go href="#trans">
|
309
|
+
<setvar name="date" value="2009-07-26"/>
|
310
|
+
<setvar name="amount" value="-440,12"/>
|
311
|
+
<setvar name="text" value="Kortköp"/>
|
312
|
+
</go>
|
313
|
+
</anchor>
|
314
|
+
|
315
|
+
|
316
|
+
<br/>
|
317
|
+
|
318
|
+
|
319
|
+
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
|
326
|
+
<anchor title="Nästa sida">Nästa sida 2(7)
|
327
|
+
<go method="
|
328
|
+
get
|
329
|
+
|
330
|
+
" href="https://gfs.nb.se/bin2/gfskod">
|
331
|
+
<postfield name="OBJECT" value="KF11TW"/>
|
332
|
+
<postfield name="sid" value="123456789"/>
|
333
|
+
<postfield name="current_page" value="2"/>
|
334
|
+
<postfield name="account_type" value="001"/>
|
335
|
+
<postfield name="account_currency_code" value="SEK"/>
|
336
|
+
<postfield name="start_transaction" value="21"/>
|
337
|
+
<postfield name="account_name" value="Betalkonto"/>
|
338
|
+
</go>
|
339
|
+
</anchor>
|
340
|
+
|
341
|
+
|
342
|
+
<br/>
|
343
|
+
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
|
352
|
+
<anchor title="Solo meny">Huvudmeny
|
353
|
+
<go method="
|
354
|
+
get
|
355
|
+
|
356
|
+
" href="https://gfs.nb.se/bin2/gfskod">
|
357
|
+
<postfield name="OBJECT" value="WAPL10"/>
|
358
|
+
<postfield name="sid" value="123456789"/>
|
359
|
+
</go>
|
360
|
+
</anchor>
|
361
|
+
</p>
|
362
|
+
</card>
|
363
|
+
|
364
|
+
|
365
|
+
|
366
|
+
<card id="trans" title="Kontohänd.">
|
367
|
+
<p>
|
368
|
+
$date<br/>
|
369
|
+
$amount<br/>
|
370
|
+
$text<br/>
|
371
|
+
<br/>
|
372
|
+
|
373
|
+
<anchor title="Solo meny">Huvudmeny
|
374
|
+
<go method="
|
375
|
+
get
|
376
|
+
|
377
|
+
" href="https://gfs.nb.se/bin2/gfskod">
|
378
|
+
<postfield name="OBJECT" value="WAPL10"/>
|
379
|
+
<postfield name="sid" value="123456789"/>
|
380
|
+
</go>
|
381
|
+
</anchor>
|
382
|
+
</p>
|
383
|
+
</card>
|
384
|
+
|
385
|
+
|
386
|
+
<card id="info" title="Kontoinform.">
|
387
|
+
<p>
|
388
|
+
Betalkonto<br/>
|
389
|
+
Valuta: SEK<br/>
|
390
|
+
Saldo: 179,05<br/>
|
391
|
+
Disponibelt belopp: 179,05<br/>
|
392
|
+
<br/>
|
393
|
+
|
394
|
+
<anchor title="Solo meny">Huvudmeny
|
395
|
+
<go method="
|
396
|
+
get
|
397
|
+
|
398
|
+
" href="https://gfs.nb.se/bin2/gfskod">
|
399
|
+
<postfield name="OBJECT" value="WAPL10"/>
|
400
|
+
<postfield name="sid" value="123456789"/>
|
401
|
+
</go>
|
402
|
+
</anchor>
|
403
|
+
</p>
|
404
|
+
</card>
|
405
|
+
|
406
|
+
</wml>
|
407
|
+
|
408
|
+
|