Fixed dkim bodyhash for custom domains closes #14
This commit is contained in:
parent
391efa9728
commit
3056f5aed4
4 changed files with 105 additions and 71 deletions
|
@ -216,21 +216,16 @@ class OpenPGPSigner implements Swift_Signers_BodySigner
|
||||||
$signature = $this->pgpSignString($signedBody, $this->signingKey);
|
$signature = $this->pgpSignString($signedBody, $this->signingKey);
|
||||||
|
|
||||||
//Swiftmailer is automatically changing content type and this is the hack to prevent it
|
//Swiftmailer is automatically changing content type and this is the hack to prevent it
|
||||||
$body = <<<EOT
|
// Fixes DKIM signature incorrect body hash for custom domains
|
||||||
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
|
$body = "This is an OpenPGP/MIME signed message (RFC 4880 and 3156)\r\n\r\n";
|
||||||
|
$body .= "--{$message->getBoundary()}\r\n";
|
||||||
--{$message->getBoundary()}
|
$body .= $signedBody."\r\n";
|
||||||
$signedBody
|
$body .= "--{$message->getBoundary()}\r\n";
|
||||||
--{$message->getBoundary()}
|
$body .= "Content-Type: application/pgp-signature; name=\"signature.asc\"\r\n";
|
||||||
Content-Type: application/pgp-signature; name="signature.asc"
|
$body .= "Content-Description: OpenPGP digital signature\r\n";
|
||||||
Content-Description: OpenPGP digital signature
|
$body .= "Content-Disposition: attachment; filename=\"signature.asc\"\r\n\r\n";
|
||||||
Content-Disposition: attachment; filename="signature.asc"
|
$body .= $signature."\r\n\r\n";
|
||||||
|
$body .= "--{$message->getBoundary()}--";
|
||||||
$signature
|
|
||||||
|
|
||||||
--{$message->getBoundary()}--
|
|
||||||
EOT;
|
|
||||||
|
|
||||||
|
|
||||||
$message->setBody($body);
|
$message->setBody($body);
|
||||||
|
|
||||||
|
@ -261,24 +256,18 @@ EOT;
|
||||||
'boundary' => $message->getBoundary()
|
'boundary' => $message->getBoundary()
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$body = <<<EOT
|
// Fixes DKIM signature incorrect body hash for custom domains
|
||||||
This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
|
$body = "This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)\r\n\r\n";
|
||||||
|
$body .= "--{$message->getBoundary()}\r\n";
|
||||||
--{$message->getBoundary()}
|
$body .= "Content-Type: application/pgp-encrypted\r\n";
|
||||||
Content-Type: application/pgp-encrypted
|
$body .= "Content-Description: PGP/MIME version identification\r\n\r\n";
|
||||||
Content-Description: PGP/MIME version identification
|
$body .= "Version: 1\r\n\r\n";
|
||||||
|
$body .= "--{$message->getBoundary()}\r\n";
|
||||||
Version: 1
|
$body .= "Content-Type: application/octet-stream; name=\"encrypted.asc\"\r\n";
|
||||||
|
$body .= "Content-Description: OpenPGP encrypted message\r\n";
|
||||||
--{$message->getBoundary()}
|
$body .= "Content-Disposition: inline; filename=\"encrypted.asc\"\r\n\r\n";
|
||||||
Content-Type: application/octet-stream; name="encrypted.asc"
|
$body .= $encryptedBody."\r\n\r\n";
|
||||||
Content-Description: OpenPGP encrypted message
|
$body .= "--{$message->getBoundary()}--";
|
||||||
Content-Disposition: inline; filename="encrypted.asc"
|
|
||||||
|
|
||||||
$encryptedBody
|
|
||||||
|
|
||||||
--{$message->getBoundary()}--
|
|
||||||
EOT;
|
|
||||||
|
|
||||||
$message->setBody($body);
|
$message->setBody($body);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,9 +44,6 @@ class ForwardEmail extends Mailable implements ShouldQueue
|
||||||
*/
|
*/
|
||||||
public function __construct(Alias $alias, EmailData $emailData, Recipient $recipient)
|
public function __construct(Alias $alias, EmailData $emailData, Recipient $recipient)
|
||||||
{
|
{
|
||||||
$this->encryptedParts = $emailData->encryptedParts ?? null;
|
|
||||||
$fingerprint = $recipient->should_encrypt && !$this->encryptedParts ? $recipient->fingerprint : null;
|
|
||||||
|
|
||||||
$this->user = $alias->user;
|
$this->user = $alias->user;
|
||||||
$this->alias = $alias;
|
$this->alias = $alias;
|
||||||
$this->sender = $emailData->sender;
|
$this->sender = $emailData->sender;
|
||||||
|
@ -57,7 +54,12 @@ class ForwardEmail extends Mailable implements ShouldQueue
|
||||||
$this->emailHtml = $emailData->html;
|
$this->emailHtml = $emailData->html;
|
||||||
$this->emailAttachments = $emailData->attachments;
|
$this->emailAttachments = $emailData->attachments;
|
||||||
$this->deactivateUrl = URL::signedRoute('deactivate', ['alias' => $alias->id]);
|
$this->deactivateUrl = URL::signedRoute('deactivate', ['alias' => $alias->id]);
|
||||||
$this->bannerLocation = $this->alias->user->banner_location;
|
|
||||||
|
$this->encryptedParts = $emailData->encryptedParts ?? null;
|
||||||
|
|
||||||
|
$fingerprint = $recipient->should_encrypt && !$this->isAlreadyEncrypted() ? $recipient->fingerprint : null;
|
||||||
|
|
||||||
|
$this->bannerLocation = $this->isAlreadyEncrypted() ? 'off' : $this->alias->user->banner_location;
|
||||||
|
|
||||||
if ($this->fingerprint = $fingerprint) {
|
if ($this->fingerprint = $fingerprint) {
|
||||||
try {
|
try {
|
||||||
|
@ -131,7 +133,9 @@ class ForwardEmail extends Mailable implements ShouldQueue
|
||||||
|
|
||||||
if ($this->openpgpsigner) {
|
if ($this->openpgpsigner) {
|
||||||
$message->attachSigner($this->openpgpsigner);
|
$message->attachSigner($this->openpgpsigner);
|
||||||
} elseif ($this->dkimSigner) { // TODO fix issue with failing DKIM signature if message is encrypted
|
}
|
||||||
|
|
||||||
|
if ($this->dkimSigner) {
|
||||||
$message->attachSigner($this->dkimSigner);
|
$message->attachSigner($this->dkimSigner);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -152,4 +156,9 @@ class ForwardEmail extends Mailable implements ShouldQueue
|
||||||
|
|
||||||
return $email;
|
return $email;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function isAlreadyEncrypted()
|
||||||
|
{
|
||||||
|
return $this->encryptedParts || preg_match('/^-----BEGIN PGP MESSAGE-----([A-Za-z0-9+=\/\n]+)-----END PGP MESSAGE-----$/', base64_decode($this->emailText));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
57
tests/emails/email_inline_encrypted.eml
Normal file
57
tests/emails/email_inline_encrypted.eml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
Date: Wed, 20 Feb 2019 15:00:00 +0100 (CET)
|
||||||
|
From: Will <will@anonaddy.com>
|
||||||
|
To: <ebay@johndoe.anonaddy.com>
|
||||||
|
Subject: Test Email
|
||||||
|
Content-Type: multipart/mixed; boundary="----=_Part_10031_1199410393.1550677940425"
|
||||||
|
|
||||||
|
------=_Part_10031_1199410393.1550677940425
|
||||||
|
Content-Type: text/html; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<pre>
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQGMA61U1XgYVZGqAQwAvxPrShPyuRv/cjTQlEfFDfkVCatT/QC89e2IShMX8bDa
|
||||||
|
UUx0tRlHHmEauZYOlM+DeBdD6je9KMEWm8hkBBoDMZVzBdjCWJUwVN9FyRV7YuHV
|
||||||
|
EPgnEt6Z1gKCI4WqdXX+5CaVy6FP8ebNIUZaMzTodV9oCbPMxC9U47aV8YdfoUJB
|
||||||
|
erae096R+S8aXWfUr2Xip0cUaBXPXVILLq0tmbi9w5mmXGbYEJPEg4hM9gfRA1uu
|
||||||
|
nFm7t74te66ELbW4mwYnfIhHKXQNkFfZT+yKjFp0k6QnkII390E0TfHjBW8B/4li
|
||||||
|
tOT/xfbxfEyWt7K4NPOd29Bx+iF+EMUhT+E+FgH9QfVzosM79pYZkPrtUVbyLFkl
|
||||||
|
R/s7jlauoFGYqFngNupQmjvEIi5wcIqM/4edlYxWSxRGuL8wl+OFnWY5fs3aVu23
|
||||||
|
xbmLVNjr+rp6eMlBhV2LQcA+Y6JAA3xWrEXkTpLMeI8NNAPGO5BuFJD74YJ6NXag
|
||||||
|
PYDgwd2jtrY6uYQqb7jT0lQBx6sVv2ee5nn+GNSz9IlHPt5+RyGxytuyT1vCkqQS
|
||||||
|
vFUqKZ2Cgih08CpiIw9QO2J7tieoNP39TsN/PLdNNLZiugwJFGi32S7jh/C692Eo
|
||||||
|
fcVyc/Q=
|
||||||
|
=StNi
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
------=_Part_10031_1199410393.1550677940425
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hQGMA61U1XgYVZGqAQwAvxPrShPyuRv/cjTQlEfFDfkVCatT/QC89e2IShMX8bDa
|
||||||
|
UUx0tRlHHmEauZYOlM+DeBdD6je9KMEWm8hkBBoDMZVzBdjCWJUwVN9FyRV7YuHV
|
||||||
|
EPgnEt6Z1gKCI4WqdXX+5CaVy6FP8ebNIUZaMzTodV9oCbPMxC9U47aV8YdfoUJB
|
||||||
|
erae096R+S8aXWfUr2Xip0cUaBXPXVILLq0tmbi9w5mmXGbYEJPEg4hM9gfRA1uu
|
||||||
|
nFm7t74te66ELbW4mwYnfIhHKXQNkFfZT+yKjFp0k6QnkII390E0TfHjBW8B/4li
|
||||||
|
tOT/xfbxfEyWt7K4NPOd29Bx+iF+EMUhT+E+FgH9QfVzosM79pYZkPrtUVbyLFkl
|
||||||
|
R/s7jlauoFGYqFngNupQmjvEIi5wcIqM/4edlYxWSxRGuL8wl+OFnWY5fs3aVu23
|
||||||
|
xbmLVNjr+rp6eMlBhV2LQcA+Y6JAA3xWrEXkTpLMeI8NNAPGO5BuFJD74YJ6NXag
|
||||||
|
PYDgwd2jtrY6uYQqb7jT0lQBx6sVv2ee5nn+GNSz9IlHPt5+RyGxytuyT1vCkqQS
|
||||||
|
vFUqKZ2Cgih08CpiIw9QO2J7tieoNP39TsN/PLdNNLZiugwJFGi32S7jh/C692Eo
|
||||||
|
fcVyc/Q=
|
||||||
|
=StNi
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
|
||||||
|
------=_Part_10031_1199410393.1550677940425--
|
|
@ -19,39 +19,18 @@ Content-Disposition: inline; filename="encrypted.asc"
|
||||||
|
|
||||||
-----BEGIN PGP MESSAGE-----
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
hQGMA61U1XgYVZGqAQv7BbzB8NkO1UipXAKUIFodEuCnFJhRJDkmM8mXUTp89MJt
|
hQGMA61U1XgYVZGqAQwAvxPrShPyuRv/cjTQlEfFDfkVCatT/QC89e2IShMX8bDa
|
||||||
je0c8StVIwbqE56tx6Bl5e9pfiRslGhXd6C+Gxj2rmKC2vZ85gHi3ozZ9XzYzN2b
|
UUx0tRlHHmEauZYOlM+DeBdD6je9KMEWm8hkBBoDMZVzBdjCWJUwVN9FyRV7YuHV
|
||||||
hYIxlNNTOBzrblq9ihxwXe1dLgUm+IsFIPuQLnpGfzWjDsHgTjEOeZ+dL626z4oe
|
EPgnEt6Z1gKCI4WqdXX+5CaVy6FP8ebNIUZaMzTodV9oCbPMxC9U47aV8YdfoUJB
|
||||||
JcngimUWvGyrvMAiCdfbWYSacrC9z3NPCczpKe8g/CqbyP/4G7po8Ncm1onEz3pz
|
erae096R+S8aXWfUr2Xip0cUaBXPXVILLq0tmbi9w5mmXGbYEJPEg4hM9gfRA1uu
|
||||||
DzwkLmiHrUq9xk72GXcqpXtY3J5ZgPwR0sX8pz9Im6p+5vP54mj2SPuK+PfZWiR8
|
nFm7t74te66ELbW4mwYnfIhHKXQNkFfZT+yKjFp0k6QnkII390E0TfHjBW8B/4li
|
||||||
7kY2Gv6KjK7Mbn9hYgeNJKAMwM/4oq9d0NWipdguEL2QcMeXmmOu3r8stsilaisu
|
tOT/xfbxfEyWt7K4NPOd29Bx+iF+EMUhT+E+FgH9QfVzosM79pYZkPrtUVbyLFkl
|
||||||
spqsJYQTxeE7VBWc+6qsW0JrSgq2F00IfOXA0oWWfaprFO+NS/tsQorh4gzu6Php
|
R/s7jlauoFGYqFngNupQmjvEIi5wcIqM/4edlYxWSxRGuL8wl+OFnWY5fs3aVu23
|
||||||
QVHRR5fRoI9nNxnM6NQWu6KfgHnSuWkwEuX3P0RoCkNxd4BjezQ72SHxj0rNTFUU
|
xbmLVNjr+rp6eMlBhV2LQcA+Y6JAA3xWrEXkTpLMeI8NNAPGO5BuFJD74YJ6NXag
|
||||||
eqa4DAmL6raOK9MmVp6phQGMA0sUUxmvUIjDAQv/Z2MAv/1bN+c9oNseeGzfjwPt
|
PYDgwd2jtrY6uYQqb7jT0lQBx6sVv2ee5nn+GNSz9IlHPt5+RyGxytuyT1vCkqQS
|
||||||
6l3V9o1Y8NDpRc6cGcN36+1ZQrTdZK4UmmhXFP6DrdZFAh6RIpfN1qbkPTnt7pJ1
|
vFUqKZ2Cgih08CpiIw9QO2J7tieoNP39TsN/PLdNNLZiugwJFGi32S7jh/C692Eo
|
||||||
OH5OYvP86MPKSM7XkpJm37mJYs62ueRO2mB4eDharHzAa3d8uPfn28eKNnJkIU/H
|
fcVyc/Q=
|
||||||
yuz+pGl2z7M64ZEklimwIiNn+8/CWLq7+xGE7ULq6sLK4DG308KsjUhMuRT6uRmz
|
=StNi
|
||||||
lBGVXHhbuHorFMIyNlSZL4fKE7N2r0uUsK4DpdJiPcUFBUFqtlhxXR1oqjmNjRUe
|
|
||||||
UWnf7i9Gw3r27o09B1FutZBD8xkN54EPXwLOJ4Xl3N1NseqgDDXMGbSGmUoEMSQh
|
|
||||||
weEOhnw+JmIvU8cbk6U0uQsCxHeWvujkfcSKEo+p4hr/Oa6EbaCFyiQ4HLJ5Oi5/
|
|
||||||
VvRi42IRrW3Pd3nuMqSqp0NvJm/DgarEy4sXWZyLAPdDMDXtxHKudMlRLIXpT3a5
|
|
||||||
jHwMrhyP/KnjQeWAn77fbdOc6HDHFXzdo1Koo/Ww0ukBh4P4IXQJRphYPGigGTuN
|
|
||||||
C+ur/9qxQ3vjRBUmxxlW0xWZyNgQo+Gb7CCrBo1KBuUwMDRmmFf29Rr9UxxKManV
|
|
||||||
1U75OJs90i5ESN824o27pslSz5wwLH9QzETENxZIPaQ1RG/AsfdIAiGrXdaRoZLv
|
|
||||||
wjm8TNlDr1ITjwyREfLYOvg/YXxkOePh1iM7aLSNvLc76yVFZ8+MmsFOaAc13OvC
|
|
||||||
qbWMnkLYZit4RSsb5N5OomqFVoPqHOxdUHpoQZhPzV3AQD0D/zBoynzPo3Np5xPm
|
|
||||||
/a+NwpGjrdT+dQw9YiUGeDsPrIw1XPcRNQkYyVtIvGC+tUO9+4H5/fsequ24cr2j
|
|
||||||
TnMjd5SPJycqFf+sarwM/+hayH0bCq8F66Voie6/VMxUq7r++4UpEUlj4EU8El1B
|
|
||||||
O5IoLn26P+ec+Foo5uTaX/NUh71hQ23T9IX4aclkPOwwUydBlnWJu3ILE6fGH3Q9
|
|
||||||
vSbMvQ9+HO8sHTogNWiVHkSM6jTgM3N6L7Gdie6h0ozN/ZAa1WCzZIgKm4ROST1O
|
|
||||||
E8vmpl4M8ixZpw2B1Auglei6CJ7tNXGEaKsrJOhzIOA4b/3eiCreHaDdvvVWCn26
|
|
||||||
rQJYoUtItuvB3EbaeTTtA0BIOcM3My0pUuhD3OcUEQ0oYsG6UdrUastWWYY45fsW
|
|
||||||
sqH0ElKz8Aa7nwIvwQsMTMAI3YMctI83r6xu3Bc2eZ21/BqDdB21zdjh1bQYN+Sm
|
|
||||||
1bFnfDjE+WDHO0AX7F8vPqZ2nAmoX+OYBhyAnTg+Kac3p7cDouIvSd5vnEBJeAGh
|
|
||||||
2PE0BywLEiK2LQeOXlwQNNfxY3T4QaDrOaSxALr1EFKa3BlH9kU4PXt+vx0gch9p
|
|
||||||
vpmU721CP95vKWKMaJvpmlK8i2BOeCYC/+oEf7CwFYcIzlpWhZNGajADc9W4XsHo
|
|
||||||
z/x1RGWQTcq5LANBKBUoYQqiScidMstiSX0=
|
|
||||||
=3dtw
|
|
||||||
-----END PGP MESSAGE-----
|
-----END PGP MESSAGE-----
|
||||||
|
|
||||||
------=_Part_10031_1199410393.1550677940425--
|
------=_Part_10031_1199410393.1550677940425--
|
||||||
|
|
Loading…
Add table
Reference in a new issue