def decrypt payload
return unknown_status(cant_find_binary) unless @cmd
payload_fn = Tempfile.new "redwood.payload"
payload_fn.write payload.to_s
payload_fn.close
output_fn = Tempfile.new "redwood.output"
output_fn.close
message = run_gpg "--output #{output_fn.path} --yes --decrypt #{payload_fn.path}", :interactive => true
unless $?.success?
info "Error while running gpg: #{message}"
return Chunk::CryptoNotice.new(:invalid, "This message could not be decrypted", message.split("\n"))
end
output = IO.read output_fn.path
output.force_encoding Encoding::ASCII_8BIT if output.respond_to? :force_encoding
sig = case message
when /^gpg: (Good signature from .*$)/i
Chunk::CryptoNotice.new :valid, $1, message.split("\n")
when /^gpg: (Bad signature from .*$)/i
Chunk::CryptoNotice.new :invalid, $1, message.split("\n")
end
msg = RMail::Parser.read output
if msg.header.content_type =~ %r{^multipart/} && !msg.multipart?
output = "MIME-Version: 1.0\n" + output
output.force_encoding Encoding::ASCII_8BIT if output.respond_to? :force_encoding
msg = RMail::Parser.read output
end
notice = Chunk::CryptoNotice.new :valid, "This message has been decrypted for display"
[notice, sig, msg]
end