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.
- checksums.yaml +5 -5
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +23 -1
- data/README.md +41 -0
- data/lib/czech_post_b2b_client.rb +2 -1
- data/lib/czech_post_b2b_client/b2b_errors.rb +8 -3
- data/lib/czech_post_b2b_client/configuration.rb +10 -7
- data/lib/czech_post_b2b_client/logger.rb +30 -0
- data/lib/czech_post_b2b_client/post_services.rb +2 -1
- data/lib/czech_post_b2b_client/printing_templates.rb +67 -28
- data/lib/czech_post_b2b_client/request_builders/get_parcels_printing_builder.rb +0 -4
- data/lib/czech_post_b2b_client/request_builders/parcel_service_sync_builder.rb +36 -61
- data/lib/czech_post_b2b_client/request_builders/send_parcels_builder.rb +39 -20
- data/lib/czech_post_b2b_client/response_codes.rb +320 -205
- data/lib/czech_post_b2b_client/response_parsers/base_parser.rb +1 -3
- data/lib/czech_post_b2b_client/response_parsers/get_result_parcels_parser.rb +1 -3
- data/lib/czech_post_b2b_client/response_parsers/parcel_service_sync_parser.rb +6 -5
- data/lib/czech_post_b2b_client/services/api_caller.rb +14 -2
- data/lib/czech_post_b2b_client/services/parcels_send_process_updater.rb +1 -1
- data/lib/czech_post_b2b_client/services/parcels_sync_sender.rb +1 -1
- data/lib/czech_post_b2b_client/version.rb +1 -1
- metadata +4 -4
@@ -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:
|
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}
|
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
|
-
|
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)}")
|
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)}")
|
83
|
+
errors.add(:parcels, "Parcel[#{parcel_id}] => #{CzechPostB2bClient::ResponseCodes.new_by_code(response_code)}")
|
84
84
|
end
|
85
85
|
end
|
86
86
|
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.
|
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-
|
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
|
-
|
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
|