diff options
Diffstat (limited to 'app/Integration')
-rw-r--r-- | app/Integration/MailgunWebhook.php | 29 | ||||
-rw-r--r-- | app/Integration/PostmarkWebhook.php | 11 | ||||
-rw-r--r-- | app/Integration/SendgridWebhook.php | 74 |
3 files changed, 90 insertions, 24 deletions
diff --git a/app/Integration/MailgunWebhook.php b/app/Integration/MailgunWebhook.php index 17338faa..8e542513 100644 --- a/app/Integration/MailgunWebhook.php +++ b/app/Integration/MailgunWebhook.php @@ -3,6 +3,7 @@ namespace Integration; use HTML_To_Markdown; +use Core\Tool; /** * Mailgun Webhook @@ -21,7 +22,7 @@ class MailgunWebhook extends Base */ public function parsePayload(array $payload) { - if (empty($payload['sender']) || empty($payload['subject']) || empty($payload['recipient']) || empty($payload['stripped-text'])) { + if (empty($payload['sender']) || empty($payload['subject']) || empty($payload['recipient'])) { return false; } @@ -34,7 +35,7 @@ class MailgunWebhook extends Base } // The project must have a short name - $project = $this->project->getByIdentifier($this->getMailboxHash($payload['recipient'])); + $project = $this->project->getByIdentifier(Tool::getMailboxHash($payload['recipient'])); if (empty($project)) { $this->container['logger']->debug('MailgunWebhook: ignored => project not found'); @@ -48,12 +49,15 @@ class MailgunWebhook extends Base } // Get the Markdown contents - if (empty($payload['stripped-html'])) { + if (! empty($payload['stripped-html'])) { + $markdown = new HTML_To_Markdown($payload['stripped-html'], array('strip_tags' => true)); + $description = $markdown->output(); + } + else if (! empty($payload['stripped-text'])) { $description = $payload['stripped-text']; } else { - $markdown = new HTML_To_Markdown($payload['stripped-html'], array('strip_tags' => true)); - $description = $markdown->output(); + $description = ''; } // Finally, we create the task @@ -64,19 +68,4 @@ class MailgunWebhook extends Base 'creator_id' => $user['id'], )); } - - /** - * Get the project identifier - * - * @access public - * @param string $email - * @return string - */ - public function getMailboxHash($email) - { - list($local_part,) = explode('@', $email); - list(,$identifier) = explode('+', $local_part); - - return $identifier; - } } diff --git a/app/Integration/PostmarkWebhook.php b/app/Integration/PostmarkWebhook.php index 6387ba20..642955df 100644 --- a/app/Integration/PostmarkWebhook.php +++ b/app/Integration/PostmarkWebhook.php @@ -21,7 +21,7 @@ class PostmarkWebhook extends Base */ public function parsePayload(array $payload) { - if (empty($payload['From']) || empty($payload['Subject']) || empty($payload['MailboxHash']) || empty($payload['TextBody'])) { + if (empty($payload['From']) || empty($payload['Subject']) || empty($payload['MailboxHash'])) { return false; } @@ -48,12 +48,15 @@ class PostmarkWebhook extends Base } // Get the Markdown contents - if (empty($payload['HtmlBody'])) { + if (! empty($payload['HtmlBody'])) { + $markdown = new HTML_To_Markdown($payload['HtmlBody'], array('strip_tags' => true)); + $description = $markdown->output(); + } + else if (! empty($payload['TextBody'])) { $description = $payload['TextBody']; } else { - $markdown = new HTML_To_Markdown($payload['HtmlBody'], array('strip_tags' => true)); - $description = $markdown->output(); + $description = ''; } // Finally, we create the task diff --git a/app/Integration/SendgridWebhook.php b/app/Integration/SendgridWebhook.php new file mode 100644 index 00000000..142ed49f --- /dev/null +++ b/app/Integration/SendgridWebhook.php @@ -0,0 +1,74 @@ +<?php + +namespace Integration; + +use HTML_To_Markdown; +use Core\Tool; + +/** + * Sendgrid Webhook + * + * @package integration + * @author Frederic Guillot + */ +class SendgridWebhook extends Base +{ + /** + * Parse incoming email + * + * @access public + * @param array $payload Incoming email + * @return boolean + */ + public function parsePayload(array $payload) + { + if (empty($payload['envelope']) || empty($payload['subject'])) { + return false; + } + + $envelope = json_decode($payload['envelope'], true); + $sender = isset($envelope['to'][0]) ? $envelope['to'][0] : ''; + + // The user must exists in Kanboard + $user = $this->user->getByEmail($envelope['from']); + + if (empty($user)) { + $this->container['logger']->debug('SendgridWebhook: ignored => user not found'); + return false; + } + + // The project must have a short name + $project = $this->project->getByIdentifier(Tool::getMailboxHash($sender)); + + if (empty($project)) { + $this->container['logger']->debug('SendgridWebhook: ignored => project not found'); + return false; + } + + // The user must be member of the project + if (! $this->projectPermission->isMember($project['id'], $user['id'])) { + $this->container['logger']->debug('SendgridWebhook: ignored => user is not member of the project'); + return false; + } + + // Get the Markdown contents + if (! empty($payload['html'])) { + $markdown = new HTML_To_Markdown($payload['html'], array('strip_tags' => true)); + $description = $markdown->output(); + } + else if (! empty($payload['text'])) { + $description = $payload['text']; + } + else { + $description = ''; + } + + // Finally, we create the task + return (bool) $this->taskCreation->create(array( + 'project_id' => $project['id'], + 'title' => $payload['subject'], + 'description' => $description, + 'creator_id' => $user['id'], + )); + } +} |