czech_post_b2b_client 1.2.1 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -50,9 +50,7 @@ module CzechPostB2bClient
50
50
  end
51
51
 
52
52
  def response_root_node
53
- if response_service_data.keys.include?(response_root_node_name)
54
- return response_service_data.dig(response_root_node_name)
55
- end
53
+ return response_service_data.dig(response_root_node_name) if response_service_data.keys.include?(response_root_node_name)
56
54
 
57
55
  errors.add(:xml, "Cannot find `#{response_root_node_name}` in `serviceData` node.")
58
56
  fail_on_structure_parsing
@@ -48,9 +48,7 @@ module CzechPostB2bClient
48
48
  # more parcel_codes for one parcel_id => probably errors
49
49
  old_p_code = value[:parcel_code]
50
50
  new_p_code = pd_hash[:parcel_code]
51
- if old_p_code != new_p_code
52
- raise "Two different parcel_codes [#{old_p_code}, #{new_p_code}] for parcel_id:'#{parcel_id}'"
53
- end
51
+ raise "Two different parcel_codes [#{old_p_code}, #{new_p_code}] for parcel_id:'#{parcel_id}'" if old_p_code != new_p_code
54
52
 
55
53
  value
56
54
  end
@@ -44,7 +44,11 @@ module CzechPostB2bClient
44
44
 
45
45
  def parcel_data_from(rp_hash)
46
46
  { parcel_code: rp_hash['parcelCode'],
47
- states: [state_hash_from(rp_hash.dig('parcelDataResponse'))] }
47
+ states: parcel_states_form(rp_hash.dig('parcelDataResponse')) }
48
+ end
49
+
50
+ def parcel_states_form(data_responses)
51
+ [data_responses].flatten.collect { |data_response| state_hash_from(data_response) }
48
52
  end
49
53
 
50
54
  def print_data_from(print_hash)
@@ -62,7 +66,6 @@ module CzechPostB2bClient
62
66
 
63
67
  def updated_result_value_for(value, parcel_params_result_hash)
64
68
  pd_hash = parcel_data_from(parcel_params_result_hash)
65
-
66
69
  return pd_hash if value.nil?
67
70
 
68
71
  # merging states
@@ -71,9 +74,7 @@ module CzechPostB2bClient
71
74
  # more parcel_codes for one parcel_id => probably errors
72
75
  old_p_code = value[:parcel_code]
73
76
  new_p_code = pd_hash[:parcel_code]
74
- if old_p_code != new_p_code
75
- raise "Two different parcel_codes [#{old_p_code}, #{new_p_code}] for parcel_id:'#{parcel_id}'"
76
- end
77
+ raise "Two different parcel_codes [#{old_p_code}, #{new_p_code}] for parcel_id:'#{parcel_id}'" if old_p_code != new_p_code
77
78
 
78
79
  value
79
80
  end
@@ -55,7 +55,8 @@ module CzechPostB2bClient
55
55
  request = Net::HTTP::Post.new service_uri.request_uri, headers
56
56
  request.body = request_xml
57
57
 
58
- debug_msg = "CzechPost B2B REQUEST: #{request} to #{service_uri.request_uri} with body:\n#{request.body}"
58
+ debug_msg = "CzechPost B2B REQUEST: #{request} to #{service_uri.request_uri}" \
59
+ " with headers: #{headers}\n and body:\n#{request.body}"
59
60
  CzechPostB2bClient.logger.debug(debug_msg)
60
61
 
61
62
  request
@@ -74,6 +75,7 @@ module CzechPostB2bClient
74
75
  use_ssl: true,
75
76
  verify_mode: OpenSSL::SSL::VERIFY_PEER,
76
77
  keep_alive_timeout: 30,
78
+ ciphers: secure_and_available_ciphers,
77
79
  cert: OpenSSL::X509::Certificate.new(File.read(configuration.certificate_path)),
78
80
  # cert_password: configuration.certificate_password,
79
81
  key: OpenSSL::PKey::RSA.new(File.read(configuration.private_key_path), configuration.private_key_password),
@@ -105,7 +107,8 @@ module CzechPostB2bClient
105
107
  return 'error code not found in XML' unless error_match
106
108
 
107
109
  error_code = error_match[1].to_i
108
- error = CzechPostB2bClient::B2BErrors.new_by_code(error_code)
110
+ error_details = result.xml.match(%r{<(?:\w+\:)?errorDescription>(.*)</(?:\w+\:)?errorDescription>})
111
+ error = CzechPostB2bClient::B2BErrors.new_by_code(error_code, error_details[1])
109
112
  return "error code [#{error_code}] is unknown" unless error
110
113
 
111
114
  error.message
@@ -116,6 +119,15 @@ module CzechPostB2bClient
116
119
  errors.add(:connection, "#{error.class} > #{service_uri} - #{error}")
117
120
  fail!
118
121
  end
122
+
123
+ def secure_and_available_ciphers
124
+ # Available non-weak suites for b2b.postaonline.cz (https://www.ssllabs.com/ssltest/analyze.html?d=b2b.postaonline.cz)
125
+ # TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp384r1 (eq. 7680 bits RSA) FS 256
126
+ # TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp384r1 (eq. 7680 bits RSA) FS
127
+ # which have following names in OpenSSL (see `openssl ciphers`)
128
+
129
+ %w[ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-GCM-SHA256]
130
+ end
119
131
  end
120
132
  end
121
133
  end
@@ -63,7 +63,7 @@ module CzechPostB2bClient
63
63
  response_code = response_state[:code]
64
64
  next if response_code == CzechPostB2bClient::ResponseCodes::Ok.code
65
65
 
66
- errors.add(:parcels, "Parcel[#{parcel_id}] => #{CzechPostB2bClient::ResponseCodes.new_by_code(response_code)}") # rubocop:disable Layout/LineLength
66
+ errors.add(:parcels, "Parcel[#{parcel_id}] => #{CzechPostB2bClient::ResponseCodes.new_by_code(response_code)}")
67
67
  end
68
68
  end
69
69
  end
@@ -80,7 +80,7 @@ module CzechPostB2bClient
80
80
  response_code = response_state[:code]
81
81
  next if response_code == CzechPostB2bClient::ResponseCodes::Ok.code
82
82
 
83
- errors.add(:parcels, "Parcel[#{parcel_id}] => #{CzechPostB2bClient::ResponseCodes.new_by_code(response_code)}") # rubocop:disable Layout/LineLength
83
+ errors.add(:parcels, "Parcel[#{parcel_id}] => #{CzechPostB2bClient::ResponseCodes.new_by_code(response_code)}")
84
84
  end
85
85
  end
86
86
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CzechPostB2bClient
4
- VERSION = '1.2.1'
4
+ VERSION = '1.2.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: czech_post_b2b_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Petr Mlčoch
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-07 00:00:00.000000000 Z
11
+ date: 2020-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ox
@@ -614,6 +614,7 @@ files:
614
614
  - lib/czech_post_b2b_client.rb
615
615
  - lib/czech_post_b2b_client/b2b_errors.rb
616
616
  - lib/czech_post_b2b_client/configuration.rb
617
+ - lib/czech_post_b2b_client/logger.rb
617
618
  - lib/czech_post_b2b_client/post_services.rb
618
619
  - lib/czech_post_b2b_client/printing_templates.rb
619
620
  - lib/czech_post_b2b_client/request_builders.rb
@@ -674,8 +675,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
674
675
  - !ruby/object:Gem::Version
675
676
  version: '0'
676
677
  requirements: []
677
- rubyforge_project:
678
- rubygems_version: 2.6.11
678
+ rubygems_version: 3.1.2
679
679
  signing_key:
680
680
  specification_version: 4
681
681
  summary: Accessing B2B API of Czech Post for bulk processing of packages ("B2B - WS