Geary.RFC822.Message: Add support for Authentication-Results field

This commit is contained in:
Cédric Bellegarde 2022-07-07 22:13:16 +02:00
parent c1cbd6e111
commit bc4fe28a25
2 changed files with 43 additions and 0 deletions

View file

@ -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);
}
}

View file

@ -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();