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/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&#228;ndelser:<br/>
38
+
39
+
40
+ <anchor>090816&#160;&#160;-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&#246;p"/>
45
+ </go>
46
+ </anchor>
47
+
48
+
49
+ <br/>
50
+
51
+
52
+ <anchor>090815&#160;&#160;-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&#246;p"/>
57
+ </go>
58
+ </anchor>
59
+
60
+
61
+ <br/>
62
+
63
+
64
+ <anchor>090815&#160;&#160;-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&#246;p"/>
69
+ </go>
70
+ </anchor>
71
+
72
+
73
+ <br/>
74
+
75
+
76
+ <anchor>090813&#160;&#160;-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&#246;p"/>
81
+ </go>
82
+ </anchor>
83
+
84
+
85
+ <br/>
86
+
87
+
88
+ <anchor>090813&#160;&#160;-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&#246;p"/>
93
+ </go>
94
+ </anchor>
95
+
96
+
97
+ <br/>
98
+
99
+
100
+ <anchor>090813&#160;&#160;-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&#246;p"/>
105
+ </go>
106
+ </anchor>
107
+
108
+
109
+ <br/>
110
+
111
+
112
+ <anchor>090812&#160;&#160;-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&#246;p"/>
117
+ </go>
118
+ </anchor>
119
+
120
+
121
+ <br/>
122
+
123
+
124
+
125
+
126
+
127
+ <anchor>090811&#160;&#160;-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&#246;p"/>
132
+ </go>
133
+ </anchor>
134
+
135
+
136
+ <br/>
137
+
138
+
139
+
140
+
141
+
142
+ <anchor>090811&#160;&#160;-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&#246;p"/>
147
+ </go>
148
+ </anchor>
149
+
150
+
151
+ <br/>
152
+
153
+
154
+
155
+
156
+
157
+ <anchor>090805&#160;&#160;-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&#246;p"/>
162
+ </go>
163
+ </anchor>
164
+
165
+
166
+ <br/>
167
+
168
+
169
+
170
+
171
+
172
+ <anchor>090805&#160;&#160;-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&#246;p"/>
177
+ </go>
178
+ </anchor>
179
+
180
+
181
+ <br/>
182
+
183
+
184
+
185
+
186
+
187
+ <anchor>090804&#160;&#160;-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&#160;&#160;-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&#246;p"/>
207
+ </go>
208
+ </anchor>
209
+
210
+
211
+ <br/>
212
+
213
+
214
+
215
+
216
+
217
+ <anchor>090804&#160;&#160;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="&#214;verf&#246;ring"/>
222
+ </go>
223
+ </anchor>
224
+
225
+
226
+ <br/>
227
+
228
+
229
+
230
+
231
+
232
+ <anchor>090801&#160;&#160;-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&#246;p"/>
237
+ </go>
238
+ </anchor>
239
+
240
+
241
+ <br/>
242
+
243
+
244
+
245
+
246
+
247
+ <anchor>090731&#160;&#160;-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&#246;p"/>
252
+ </go>
253
+ </anchor>
254
+
255
+
256
+ <br/>
257
+
258
+
259
+
260
+
261
+
262
+ <anchor>090729&#160;&#160;-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&#246;p"/>
267
+ </go>
268
+ </anchor>
269
+
270
+
271
+ <br/>
272
+
273
+
274
+
275
+
276
+
277
+ <anchor>090729&#160;&#160;-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&#246;p"/>
282
+ </go>
283
+ </anchor>
284
+
285
+
286
+ <br/>
287
+
288
+
289
+
290
+
291
+
292
+ <anchor>090729&#160;&#160;-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&#246;p"/>
297
+ </go>
298
+ </anchor>
299
+
300
+
301
+ <br/>
302
+
303
+
304
+
305
+
306
+
307
+ <anchor>090726&#160;&#160;-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&#246;p"/>
312
+ </go>
313
+ </anchor>
314
+
315
+
316
+ <br/>
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+ <anchor title="N&#228;sta sida">N&#228;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&#228;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
+