Class: FinTS::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/fints/message.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(blz, username, pin, system_id, dialog_id, msg_no, encrypted_segments, tan_mechs = nil) ⇒ Message

Returns a new instance of Message.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fints/message.rb', line 7

def initialize(blz, username, pin, system_id, dialog_id, msg_no, encrypted_segments, tan_mechs=nil)
  @blz = blz
  @username = username
  @pin = pin
  @system_id = system_id
  @dialog_id = dialog_id
  @msg_no = msg_no
  @segments = []
  @encrypted_segments = []

  if tan_mechs && !tan_mechs.include?('999')
    @profile_version = 2
    @security_function = tan_mechs[0]
  else
    @profile_version = 1
    @security_function = '999'
  end

  sig_head = build_signature_head
  enc_head = build_encryption_head
  @segments << enc_head

  @enc_envelop = Segment::HNVSD.new(999, '')
  @segments << @enc_envelop

  append_enc_segment(sig_head)
  encrypted_segments.each do |segment|
    append_enc_segment(segment)
  end

  cur_count = encrypted_segments.length + 3

  sig_end = Segment::HNSHA.new(cur_count, @secref, @pin)
  append_enc_segment(sig_end)
  @segments << Segment::HNHBS.new(cur_count + 1, msg_no)
end

Instance Attribute Details

#dialog_idObject

Returns the value of attribute dialog_id.



4
5
6
# File 'lib/fints/message.rb', line 4

def dialog_id
  @dialog_id
end

#encrypted_segmentsObject

Returns the value of attribute encrypted_segments.



5
6
7
# File 'lib/fints/message.rb', line 5

def encrypted_segments
  @encrypted_segments
end

#msg_noObject

Returns the value of attribute msg_no.



3
4
5
# File 'lib/fints/message.rb', line 3

def msg_no
  @msg_no
end

Instance Method Details

#append_enc_segment(seg) ⇒ Object



44
45
46
47
# File 'lib/fints/message.rb', line 44

def append_enc_segment(seg)
  @encrypted_segments << seg
  @enc_envelop.set_data(@enc_envelop.encoded_data + seg.to_s)
end

#build_encryption_headObject



54
55
56
# File 'lib/fints/message.rb', line 54

def build_encryption_head
  Segment::HNVSK.new(998, @blz, @username, @system_id, @profile_version)
end

#build_headerObject



58
59
60
61
# File 'lib/fints/message.rb', line 58

def build_header
  length = @segments.map(&:to_s).inject(0) { |sum, segment| sum + segment.length }
  Segment::HNHBK.new(length, @dialog_id, @msg_no)
end

#build_signature_headObject



49
50
51
52
# File 'lib/fints/message.rb', line 49

def build_signature_head
  @secref = Kernel.rand(1000000..9999999)
  Segment::HNSHK.new(2, @secref, @blz, @username, @system_id, @profile_version, @security_function)
end

#to_sObject



63
64
65
# File 'lib/fints/message.rb', line 63

def to_s
  build_header.to_s + @segments.map(&:to_s).join('')
end