mirror of https://github.com/MISP/MISP
new: [email] Command for testing generated alert email
parent
0d493efb1b
commit
d523025b6d
|
@ -29,6 +29,13 @@ class EventShell extends AppShell
|
|||
],
|
||||
)
|
||||
));
|
||||
$parser->addSubcommand('testEventNotificationEmail', [
|
||||
'help' => __('Generate event notification email in EML format.'),
|
||||
'arguments' => [
|
||||
'event_id' => ['help' => __('Event ID'), 'required' => true],
|
||||
'user_id' => ['help' => __('User ID'), 'required' => true],
|
||||
],
|
||||
]);
|
||||
return $parser;
|
||||
}
|
||||
|
||||
|
@ -469,6 +476,36 @@ class EventShell extends AppShell
|
|||
$this->Job->save($job);
|
||||
}
|
||||
|
||||
public function testEventNotificationEmail()
|
||||
{
|
||||
list($eventId, $userId) = $this->args;
|
||||
|
||||
$user = $this->User->getUserById($userId);
|
||||
if (empty($user)) {
|
||||
$this->error("User with ID $userId not found.");
|
||||
}
|
||||
$eventForUser = $this->Event->fetchEvent($this->User->rearrangeToAuthForm($user), [
|
||||
'eventid' => $eventId,
|
||||
'includeAllTags' => true,
|
||||
'includeEventCorrelations' => true,
|
||||
'noEventReports' => true,
|
||||
'noSightings' => true,
|
||||
]);
|
||||
if (empty($eventForUser)) {
|
||||
$this->error("Event with ID $eventId not exists or given user don't have permission to access it.");
|
||||
}
|
||||
|
||||
$emailTemplate = $this->Event->prepareAlertEmail($eventForUser[0], $this->User->rearrangeToAuthForm($user));
|
||||
|
||||
App::uses('SendEmail', 'Tools');
|
||||
App::uses('GpgTool', 'Tools');
|
||||
$sendEmail = new SendEmail(GpgTool::initializeGpg());
|
||||
$sendEmail->setTransport('Debug');
|
||||
$result = $sendEmail->sendToUser($user, null, $emailTemplate);
|
||||
|
||||
echo $result['contents']['headers'] . "\n\n" . $result['contents']['message'] . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @return array
|
||||
|
|
|
@ -304,11 +304,12 @@ class MessagePart
|
|||
|
||||
class SendEmail
|
||||
{
|
||||
/**
|
||||
* @var CryptGpgExtended
|
||||
*/
|
||||
/** @var CryptGpgExtended */
|
||||
private $gpg;
|
||||
|
||||
/** @var string|null */
|
||||
private $transport;
|
||||
|
||||
/**
|
||||
* @param CryptGpgExtended|null $gpg
|
||||
*/
|
||||
|
@ -323,6 +324,14 @@ class SendEmail
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $transport
|
||||
*/
|
||||
public function setTransport($transport)
|
||||
{
|
||||
$this->transport = $transport;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $params
|
||||
* @return array|bool
|
||||
|
@ -363,6 +372,10 @@ class SendEmail
|
|||
$email->body($body);
|
||||
$email->attachments($attachments);
|
||||
|
||||
if ($this->transport) {
|
||||
$email->transport($this->transport);
|
||||
}
|
||||
|
||||
$mock = false;
|
||||
if (!empty(Configure::read('MISP.disable_emailing')) || !empty($params['mock'])) {
|
||||
$email->transport('Debug');
|
||||
|
@ -408,7 +421,7 @@ class SendEmail
|
|||
* @param SendEmailTemplate|string $body
|
||||
* @param string|false $bodyWithoutEncryption
|
||||
* @param array $replyToUser
|
||||
* @return bool True if e-mail is encrypted, false if not.
|
||||
* @return array
|
||||
* @throws Crypt_GPG_BadPassphraseException
|
||||
* @throws Crypt_GPG_Exception
|
||||
* @throws SendEmailException
|
||||
|
@ -452,6 +465,10 @@ class SendEmail
|
|||
|
||||
$email = $this->create($user, $subject, $bodyContent, [], $replyToUser);
|
||||
|
||||
if ($this->transport) {
|
||||
$email->transport($this->transport);
|
||||
}
|
||||
|
||||
// Generate `In-Reply-To` and `References` to group emails
|
||||
if ($body instanceof SendEmailTemplate && $body->referenceId()) {
|
||||
$reference = sha1($body->referenceId() . '|' . Configure::read('MISP.uuid'));
|
||||
|
@ -529,8 +546,11 @@ class SendEmail
|
|||
}
|
||||
|
||||
try {
|
||||
$email->send();
|
||||
return $encrypted;
|
||||
return [
|
||||
'contents' => $email->send(),
|
||||
'encrypted' => $encrypted,
|
||||
'subject' => $subject,
|
||||
];
|
||||
} catch (Exception $e) {
|
||||
throw new SendEmailException('The message could not be sent.', 0, $e);
|
||||
}
|
||||
|
|
|
@ -807,7 +807,7 @@ class User extends AppModel
|
|||
$sendEmail = new SendEmail($gpg);
|
||||
|
||||
try {
|
||||
$encrypted = $sendEmail->sendToUser($user, $subject, $body, $bodyNoEnc,$replyToUser ?: []);
|
||||
$result = $sendEmail->sendToUser($user, $subject, $body, $bodyNoEnc,$replyToUser ?: []);
|
||||
|
||||
} catch (SendEmailException $e) {
|
||||
$this->logException("Exception during sending e-mail", $e);
|
||||
|
@ -824,9 +824,9 @@ class User extends AppModel
|
|||
return false;
|
||||
}
|
||||
|
||||
$logTitle = $encrypted ? 'Encrypted email' : 'Email';
|
||||
$logTitle = $result['encrypted'] ? 'Encrypted email' : 'Email';
|
||||
// Intentional two spaces to pass test :)
|
||||
$logTitle .= $replyToLog . ' to ' . $user['User']['email'] . ' sent, titled "' . $subject . '".';
|
||||
$logTitle .= $replyToLog . ' to ' . $user['User']['email'] . ' sent, titled "' . $result['subject'] . '".';
|
||||
|
||||
$this->Log->create();
|
||||
$this->Log->save(array(
|
||||
|
|
Loading…
Reference in New Issue