From bc4fe28a25dec7382a6a7df98ebc445c51929f32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bellegarde?= Date: Thu, 7 Jul 2022 22:13:16 +0200 Subject: [PATCH] Geary.RFC822.Message: Add support for Authentication-Results field --- src/engine/rfc822/rfc822-message-data.vala | 22 ++++++++++++++++++++++ src/engine/rfc822/rfc822-message.vala | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/engine/rfc822/rfc822-message-data.vala b/src/engine/rfc822/rfc822-message-data.vala index d36e57a0..53cc8ac9 100644 --- a/src/engine/rfc822/rfc822-message-data.vala +++ b/src/engine/rfc822/rfc822-message-data.vala @@ -619,3 +619,25 @@ public class Geary.RFC822.PreviewText : Geary.RFC822.Text { } } + +public class Geary.RFC822.AuthenticationResults : + Geary.MessageData.StringMessageData { + + public AuthenticationResults(string value) { + base(value); + } + + /** + * Returns the authentication result for dkim. + */ + public bool is_dkim_valid() { + return /^.*;[ ]*dkim=pass.*$/i.match(this.value); + } + + /** + * Returns the authentication result for dmarc. + */ + public bool is_dmarc_valid() { + return /^.*;[ ]*dmarc=pass.*$/i.match(this.value); + } +} diff --git a/src/engine/rfc822/rfc822-message.vala b/src/engine/rfc822/rfc822-message.vala index 521058de..11237023 100644 --- a/src/engine/rfc822/rfc822-message.vala +++ b/src/engine/rfc822/rfc822-message.vala @@ -36,6 +36,11 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet { private const string HEADER_REFERENCES = "References"; private const string HEADER_MAILER = "X-Mailer"; private const string HEADER_BCC = "Bcc"; + private const string[] HEADER_AUTH_RESULTS = { + "ARC-Authentication-Results", + "Authentication-Results", + "X-Original-Authentication-Results" + }; /** Options to use when serialising a message in RFC 822 format. */ [Flags] @@ -108,6 +113,14 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet { public Date? date { get { return this._date; } } private Date? _date = null; + /** + * {@inheritDoc} + * + * Value will be valid if {@link Field.AUTH_RESULTS} is set. + */ + public RFC822.AuthenticationResults? auth_results { get { return this._auth_results; } } + private RFC822.AuthenticationResults? _auth_results = null; + /** Value of the X-Mailer header. */ public string? mailer { get; protected set; default = null; } @@ -160,6 +173,14 @@ public class Geary.RFC822.Message : BaseObject, EmailHeaderSet { this._message_id = new MessageID(message_id); } + foreach (string field in HEADER_AUTH_RESULTS) { + var auth_results = message.get_header(field); + if (auth_results != null) { + this._auth_results = new AuthenticationResults(auth_results); + break; + } + } + // Since these headers may be specified multiple times, we // need to iterate over all of them to find them. var headers = message.get_header_list();