as2 0.5.0 → 0.5.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +3 -5
- data/as2.gemspec +1 -1
- data/lib/as2/client.rb +1 -1
- data/lib/as2/message.rb +28 -9
- data/lib/as2/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cc88a7c3befd19715a142f886fcac0429911b1b2c6d4df8e5c6f6797c6469c2
|
4
|
+
data.tar.gz: ba6943a989242be148d7e39c896f61747b8455888883b60ff179d6bf53e25309
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14dc1ecb69d8678db913d9ee2425ae35f3e2e1b9a927a3a573e36e9a704dd4a7ab994d7c98182bf0053f40520040f0001fbc8b1390c82ebd57aa7e5c3495e99c
|
7
|
+
data.tar.gz: e43327ebbeac9bd46a2ccc4e3cd13f6354de46a3507fe01b134ecf33feef6643555c63e2ad2310debf8b3a23ec88c985d869087bf4cce29a2c54d8d06cfa753a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.5.1, August 10, 2022
|
2
|
+
|
3
|
+
* Any HTTP 2xx status received from a partner should be considered successful. [#12](https://github.com/andjosh/as2/pull/12)
|
4
|
+
|
1
5
|
## 0.5.0, March 21, 2022
|
2
6
|
|
3
7
|
* improvements to `As2::Client`. improve compatibility with non-Mendelson AS2 servers. [#8](https://github.com/andjosh/as2/pull/8)
|
data/README.md
CHANGED
@@ -30,12 +30,10 @@ along.
|
|
30
30
|
will see a MIC verification failure. AS2 RFC specifically prefers sha1 and
|
31
31
|
mentions md5. Mendelson AS2 server supports a number of other algorithms.
|
32
32
|
(sha256, sha512, etc)
|
33
|
-
2. Payload bodies
|
34
|
-
|
35
|
-
3. Payload bodies can have a few different mime types. We expect only
|
36
|
-
`application/EDI-Consent`. We're unable to receive content that has any other
|
33
|
+
2. Payload bodies can have a few different mime types. We expect a type that
|
34
|
+
matches `application/EDI-*`. We're unable to receive content that has any other
|
37
35
|
mime type. https://datatracker.ietf.org/doc/html/rfc1767#section-1
|
38
|
-
|
36
|
+
3. AS2 partners may agree to use separate certificates for data encryption and data signing.
|
39
37
|
We do not support separate certificates for these purposes.
|
40
38
|
|
41
39
|
## Installation
|
data/as2.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
|
12
12
|
spec.summary = %q{Simple AS2 server and client implementation}
|
13
13
|
spec.description = %q{Simple AS2 server and client implementation. Follows the AS2 implementation from http://as2.mendelson-e-c.com}
|
14
|
-
spec.homepage = "https://github.com/
|
14
|
+
spec.homepage = "https://github.com/alexdean/as2"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
17
|
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
data/lib/as2/client.rb
CHANGED
data/lib/as2/message.rb
CHANGED
@@ -2,6 +2,28 @@ module As2
|
|
2
2
|
class Message
|
3
3
|
attr_reader :verification_error
|
4
4
|
|
5
|
+
# given multiple parts of a message, choose the one most likely to be the actual content we care about
|
6
|
+
#
|
7
|
+
# @param [Array<Mail::Part>]
|
8
|
+
# @return [Mail::Part, nil]
|
9
|
+
def self.choose_attachment(mail_parts)
|
10
|
+
return nil if mail_parts.nil?
|
11
|
+
|
12
|
+
# if there are multiple content parts, try to prefer the EDI content.
|
13
|
+
candidates = mail_parts
|
14
|
+
.select { |part| part.content_type.to_s['pkcs7-signature'].nil? } # skip signature
|
15
|
+
.sort_by { |part| part.content_type.to_s.match(/^application\/edi/i) ? 0 : 1 }
|
16
|
+
candidates[0]
|
17
|
+
end
|
18
|
+
|
19
|
+
# @param [Mail::Part] attachment
|
20
|
+
# @param [String] mic_algorithm
|
21
|
+
# @return [String] message integrity check string
|
22
|
+
def self.mic(attachment, mic_algorithm)
|
23
|
+
digest = As2::DigestSelector.for_code(mic_algorithm)
|
24
|
+
digest.base64digest(attachment.raw_source.lstrip)
|
25
|
+
end
|
26
|
+
|
5
27
|
def initialize(message, private_key, public_certificate)
|
6
28
|
# TODO: might need to use OpenSSL::PKCS7.read_smime rather than .new sometimes
|
7
29
|
@pkcs7 = OpenSSL::PKCS7.new(message)
|
@@ -80,8 +102,7 @@ module As2
|
|
80
102
|
end
|
81
103
|
|
82
104
|
def mic
|
83
|
-
|
84
|
-
digest.base64digest(attachment.raw_source.strip)
|
105
|
+
self.class.mic(attachment, mic_algorithm)
|
85
106
|
end
|
86
107
|
|
87
108
|
def mic_algorithm
|
@@ -90,13 +111,11 @@ module As2
|
|
90
111
|
|
91
112
|
# Return the attached file, use .filename and .body on the return value
|
92
113
|
def attachment
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
mail
|
99
|
-
end
|
114
|
+
self.class.choose_attachment(parts)
|
115
|
+
end
|
116
|
+
|
117
|
+
def parts
|
118
|
+
mail&.parts
|
100
119
|
end
|
101
120
|
|
102
121
|
private
|
data/lib/as2/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: as2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OfficeLuv
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-09-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mail
|
@@ -168,7 +168,7 @@ files:
|
|
168
168
|
- lib/as2/mime_generator.rb
|
169
169
|
- lib/as2/server.rb
|
170
170
|
- lib/as2/version.rb
|
171
|
-
homepage: https://github.com/
|
171
|
+
homepage: https://github.com/alexdean/as2
|
172
172
|
licenses:
|
173
173
|
- MIT
|
174
174
|
metadata:
|