Verify S/MIME signed automatically and log Exception

This commit is contained in:
the-djmaze 2024-03-03 23:52:02 +01:00
parent b2009f6bc0
commit 27fbe01876
2 changed files with 13 additions and 6 deletions

View file

@ -201,7 +201,7 @@ export class MessageModel extends AbstractModel {
this.smimeSigned.subscribe(value => {
value?.body && MimeToMessage(value.body, this);
value?.body && this.smimeVerified(value.verified);
'verified' in value && this.smimeVerified(value.verified);
});
}

View file

@ -171,15 +171,22 @@ class MailClient
$aFetchResponse = $this->oImapClient->Fetch($aFetchItems, $iIndex, $bIndexIsUid);
if (\count($aFetchResponse)) {
$oMessage = Message::fromFetchResponse($sFolderName, $aFetchResponse[0], $oBodyStructure);
// S/MIME opaque signed. Verify it, so we have the raw mime body to show
if ($oMessage->smimeSigned && !$oMessage->smimeSigned['detached']) {
// S/MIME signed. Verify it, so we have the raw mime body to show
if ($oMessage->smimeSigned) try {
$bOpaque = !$oMessage->smimeSigned['detached'];
$sBody = $this->oImapClient->FetchMessagePart(
$oMessage->Uid,
$oMessage->smimeSigned['partId']
);
$result = (new \SnappyMail\SMime\OpenSSL(''))->verify($sBody, null, true);
$oMessage->smimeSigned['body'] = $result['body'];
$oMessage->smimeSigned['verified'] = true;
$result = (new \SnappyMail\SMime\OpenSSL(''))->verify($sBody, null, $bOpaque);
if ($result) {
if ($bOpaque) {
$oMessage->smimeSigned['body'] = $result['body'];
}
$oMessage->smimeSigned['verified'] = $result['success'];
}
} catch (\Throwable $e) {
$this->logException($e);
}
}