diff --git a/lib/interac_email.rb b/lib/interac_email.rb index 47383b4b9cb122dab6b249c145929d5fa4e681fe..ade6e38a770e5b61637fb88ffa0f586d6b3400db 100644 --- a/lib/interac_email.rb +++ b/lib/interac_email.rb @@ -140,21 +140,24 @@ class InteracEmail raise Error::BadAuth, @m unless auth =~ /\sdkim=pass\s/ end - def dkim_header - @m["DKIM-Signature"] - &.value + def dkim_headers + # Apparently there can sometimes be multiple DKIM sigs + # And this library returns a scalar if there's one, or array otherwise + [@m["DKIM-Signature"]].flatten.compact.map {|h| + h.value &.split(/;\s*/) &.each_with_object({}) { |f, h| k, v = f.split("=", 2) h[k.to_sym] = v } + } end def ensure_dkim - dkim = dkim_header + dkim = dkim_headers - raise Error::DKIM, @m unless dkim - raise Error::WrongDKIM, @m unless dkim[:d] == "payments.interac.ca" + raise Error::DKIM, @m if dkim.empty? + raise Error::WrongDKIM, @m unless dkim.any? {|v| v[:d] == "payments.interac.ca" } end end