From b62d7e7f9fe43bed07a39990da694b9d2b713758 Mon Sep 17 00:00:00 2001 From: Roberto Guido Date: Sun, 4 Aug 2024 15:20:59 +0200 Subject: [PATCH] soppresso webhook aws ses, aggiunto webhook scaleway --- code/app/Http/Controllers/MailController.php | 78 +++++++++++--------- code/routes/web.php | 2 +- 2 files changed, 44 insertions(+), 36 deletions(-) diff --git a/code/app/Http/Controllers/MailController.php b/code/app/Http/Controllers/MailController.php index a7664179..4e059fab 100644 --- a/code/app/Http/Controllers/MailController.php +++ b/code/app/Http/Controllers/MailController.php @@ -56,41 +56,6 @@ private function registerBounce($event, $email, $message) } } - public function postStatusSES(Request $request) - { - if (env('MAIL_MAILER') == 'ses') { - $message = Message::fromRawPostData(); - $validator = new MessageValidator(); - - try { - $validator->validate($message); - } - catch (InvalidSnsMessageException $e) { - Log::error('SNS Message Validation Error: ' . $e->getMessage()); - abort(404); - } - - if ($message['Type'] === 'SubscriptionConfirmation') { - Http::get($message['SubscribeURL']); - } - else if ($message['Type'] === 'Notification') { - $data = json_decode($message['Message']); - $event = $data->notificationType; - - if ($event == 'Bounce') { - try { - $email = $data->bounce->bouncedRecipients[0]->emailAddress; - $message = $data->bounce->bouncedRecipients[0]->diagnosticCode ?? '???'; - $this->registerBounce($event, $email, $message); - } - catch(\Exception $e) { - Log::error('Notifica SNS illeggibile: ' . $e->getMessage() . ' - ' . print_r($data, true)); - } - } - } - } - } - public function postStatusSendinblue(Request $request) { if (env('MAIL_MAILER') == 'sendinblue') { @@ -120,4 +85,47 @@ public function postStatusSendinblue(Request $request) } } } + + public function postStatusScaleway(Request $request) + { + if (env('MAIL_MAILER') == 'scaleway') { + $api_endpoint = 'https://api.scaleway.com/transactional-email/v1alpha1/regions/fr-par/webhooks'; + + $message = Message::fromRawPostData(); + $validator = new MessageValidator(); + + try { + $validator->validate($message); + } + catch (InvalidSnsMessageException $e) { + Log::error('SNS Message Validation Error: ' . $e->getMessage()); + abort(404); + } + + try { + $body = json_decode($request->getContent()); + + if ($body) { + /* + Per automatizzare la procedura di conferma della + registrazione del webhook + */ + if (isset($body->SubscribeURL)) { + @file_get_contents($body->SubscribeURL); + return; + } + else { + $payload = json_decode($body->Message); + $event = $payload->type; + $email = $payload->email_to; + $message = $payload->email_error; + $this->registerBounce($event, $email, $message); + } + } + } + catch(\Exception $e) { + Log::error('Notifica Scaleway illeggibile: ' . $e->getMessage() . ' - ' . print_r($request->all(), true)); + } + } + } } diff --git a/code/routes/web.php b/code/routes/web.php index 1b9cc59f..cfd43ab1 100644 --- a/code/routes/web.php +++ b/code/routes/web.php @@ -10,8 +10,8 @@ Route::get('payment/status/satispay', 'PaymentController@statusPaymentSatispay')->name('payment.status_satispay'); -Route::post('mail/status/aws', 'MailController@postStatusSES'); Route::post('mail/status/sib', 'MailController@postStatusSendinblue'); +Route::post('mail/status/sway', 'MailController@postStatusScaleway'); Route::middleware(['auth'])->group(function() { Route::get('users/blocked', 'UsersController@blocked')->name('users.blocked');