From c7c135891a6cde01db933e9c12b74b71734ad673 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Rapha=C3=ABl=20Gertz?= <git@rapsys.eu>
Date: Fri, 8 Mar 2024 14:45:41 +0100
Subject: [PATCH] Log unlinked google token and calendars Cleanup

---
 Controller/UserController.php | 53 ++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 7 deletions(-)

diff --git a/Controller/UserController.php b/Controller/UserController.php
index e5d0fc0..021d21f 100644
--- a/Controller/UserController.php
+++ b/Controller/UserController.php
@@ -218,18 +218,39 @@ class UserController extends BaseUserController {
 								)
 							);
 
+							//Set calendar mails
+							$cmails = [];
+
 							//Iterate on each google token calendars
 							foreach($googleToken->getGoogleCalendars() as $googleCalendar) {
+								//Add calendar mail
+								$cmails[] = $googleCalendar->getMail();
+
 								//Remove google token calendar
 								$this->manager->remove($googleCalendar);
 							}
 
+							//Log unlinked google token infos
+							$this->logger->emergency(
+								$this->translator->trans(
+									'expired: mail=%mail% gmail=%gmail% cmails=%cmails% locale=%locale%',
+									[
+										'%mail%' => $googleToken->getUser()->getMail(),
+										'%gmail%' => $googleToken->getMail(),
+										'%cmails' => implode(',', $cmails),
+										'%locale%' => $request->getLocale()
+									]
+								)
+							);
+
 							//Remove google token
 							$this->manager->remove($googleToken);
 
 							//Flush to delete it
 							$this->manager->flush();
 
+							//TODO: warn user by mail ?
+
 							//Skip to next token
 							continue;
 						}
@@ -289,8 +310,9 @@ class UserController extends BaseUserController {
 						);
 					//Catch exception
 					} catch(\Google\Service\Exception $e) {
-						//With 401 code
-						if ($e->getCode() == 401) {
+						//With 401 or code
+						//XXX: see https://cloud.google.com/apis/design/errors
+						if ($e->getCode() == 401 || $e->getCode() == 403) {
 							//Add error in flash message
 							$this->addFlash(
 								'error',
@@ -300,18 +322,39 @@ class UserController extends BaseUserController {
 								)
 							);
 
+							//Set calendar mails
+							$cmails = [];
+
 							//Iterate on each google token calendars
 							foreach($googleToken->getGoogleCalendars() as $googleCalendar) {
+								//Add calendar mail
+								$cmails[] = $googleCalendar->getMail();
+
 								//Remove google token calendar
 								$this->manager->remove($googleCalendar);
 							}
 
+							//Log unlinked google token infos
+							$this->logger->emergency(
+								$this->translator->trans(
+									'denied: mail=%mail% gmail=%gmail% cmails=%cmails% locale=%locale%',
+									[
+										'%mail%' => $googleToken->getUser()->getMail(),
+										'%gmail%' => $googleToken->getMail(),
+										'%cmails' => implode(',', $cmails),
+										'%locale%' => $request->getLocale()
+									]
+								)
+							);
+
 							//Remove google token
 							$this->manager->remove($googleToken);
 
 							//Flush to delete it
 							$this->manager->flush();
 
+							//TODO: warn user by mail ?
+
 							//Skip to next token
 							continue;
 						}
@@ -341,12 +384,8 @@ class UserController extends BaseUserController {
 						}
 					}
 
-					//XXX: TODO: remove DEBUG
-					#header('Content-Type: text/plain');
-
-					//TODO: add feature to filter synchronized data (OrganizerId/DanceId)
 					//TODO: add feature for alerts (-30min/-1h) ?
-					//[Direct link to calendar ?][Direct link to calendar settings ?][Alerts][Remove]
+					//TODO: [Direct link to calendar ?][Direct link to calendar settings ?][Alerts][Remove]
 
 					//Create the CalendarType form and give the proper parameters
 					$form = $this->factory->createNamed('calendar_'.$googleShortMail, 'Rapsys\AirBundle\Form\CalendarType', $formData, [
-- 
2.41.3