diff --git a/src/BusProNet/Security/Authenticator.php b/src/BusProNet/Security/Authenticator.php index fdcd432..f7e266f 100644 --- a/src/BusProNet/Security/Authenticator.php +++ b/src/BusProNet/Security/Authenticator.php @@ -4,6 +4,7 @@ namespace App\BusProNet\Security; use App\BusProNet\ApiClient; use App\BusProNet\Exception\ApiClientException; +use App\BusProNet\Exception\ResponseParserException; use App\BusProNet\Model\CrmAttributes; use App\BusProNet\Model\PersonalData; use Psr\Log\LoggerInterface; @@ -45,7 +46,7 @@ class Authenticator extends AbstractLoginFormAuthenticator implements Authentica try { $response = $this->apiClient->getPersonalData($email, $password); - } catch (ApiClientException $e) { + } catch (ApiClientException|ResponseParserException $e) { throw new CustomUserMessageAuthenticationException($e->getMessage()); } diff --git a/src/Controller/Booking/DownloadController.php b/src/Controller/Booking/DownloadController.php index deef808..5daa983 100644 --- a/src/Controller/Booking/DownloadController.php +++ b/src/Controller/Booking/DownloadController.php @@ -3,6 +3,8 @@ namespace App\Controller\Booking; use App\BusProNet\ApiClient; +use App\BusProNet\Exception\ApiClientException; +use App\BusProNet\Exception\ResponseParserException; use App\BusProNet\Model\Notification; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -56,13 +58,16 @@ class DownloadController extends AbstractController 'booking_id' => $id, ]); - $file = $this - ->apiClient - ->getDocuments($bpnUser->getEmail(), $bpnUser->getPassword(), $id, $type) - ; + try { + $file = $this + ->apiClient + ->getDocuments($bpnUser->getEmail(), $bpnUser->getPassword(), $id, $type); + } catch (ApiClientException|ResponseParserException $e) { + $file = null; + } if (null === $file || $file instanceof Notification) { - $this->addFlash('error', 'Keine Dokumente vorhanden'); + $this->addFlash('error', 'Keine Dokumente vorhanden oder nicht abrufbar'); return $this->redirectToRoute('app_bookings'); } @@ -84,4 +89,4 @@ class DownloadController extends AbstractController return $response; } -} \ No newline at end of file +} diff --git a/src/Controller/Booking/EditController.php b/src/Controller/Booking/EditController.php index 0d8d93a..7d0de41 100644 --- a/src/Controller/Booking/EditController.php +++ b/src/Controller/Booking/EditController.php @@ -3,6 +3,8 @@ namespace App\Controller\Booking; use App\BusProNet\ApiClient; +use App\BusProNet\Exception\ApiClientException; +use App\BusProNet\Exception\ResponseParserException; use App\BusProNet\Model\Notification; use App\BusProNet\XmlLoader\PickupLoader; use App\BusProNet\XmlLoader\TravelLoader; @@ -69,10 +71,22 @@ class EditController extends AbstractController } // Fetch mutability information via API - $mutableData = $this->apiClient->getMutableData($bookingData->travelId); + try { + $mutableData = $this->apiClient->getMutableData($bookingData->travelId); + } catch (ApiClientException|ResponseParserException $e) { + $this->addFlash('error', 'Reisedaten nicht (mehr) verfügbar'); + + return $this->redirectToRoute('app_bookings'); + } // Fetch availability information via API - $availabilities = $this->apiClient->getAvailabilities($bookingData->travelId); + try { + $availabilities = $this->apiClient->getAvailabilities($bookingData->travelId); + } catch (ApiClientException|ResponseParserException $e) { + $this->addFlash('error', 'Reisedaten nicht (mehr) verfügbar'); + + return $this->redirectToRoute('app_bookings'); + } // Patch travel data with additional information from above $this->travelDataLoader->patchAvailabilities($travelData, $availabilities); diff --git a/src/Controller/Booking/IndexController.php b/src/Controller/Booking/IndexController.php index 0cca44a..260141b 100644 --- a/src/Controller/Booking/IndexController.php +++ b/src/Controller/Booking/IndexController.php @@ -3,6 +3,9 @@ namespace App\Controller\Booking; use App\BusProNet\ApiClient; +use App\BusProNet\Exception\ApiClientException; +use App\BusProNet\Exception\ResponseParserException; +use App\BusProNet\Model\BaseData; use App\BusProNet\XmlLoader\TravelLoader; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; @@ -30,11 +33,16 @@ class IndexController extends AbstractController return $this->security->logout(); } - $bookings = $this->apiClient->getBookings($bpnUser->getEmail(), $bpnUser->getPassword()); + try { + $bookings = $this->apiClient->getBookings($bpnUser->getEmail(), $bpnUser->getPassword()); + } catch (ApiClientException|ResponseParserException $e) { + $this->addFlash('error', 'Buchungen nicht abrufbar'); + $bookings = new BaseData([]); + } $this->travelDataLoader->patchBookings($bookings); return $this->render('booking/index.html.twig', [ 'bookings' => $bookings->getItems(), ]); } -} \ No newline at end of file +} diff --git a/src/Controller/PersonalDataController.php b/src/Controller/PersonalDataController.php index dfbfdb4..87cae47 100644 --- a/src/Controller/PersonalDataController.php +++ b/src/Controller/PersonalDataController.php @@ -4,6 +4,8 @@ namespace App\Controller; use App\BusProNet\ApiClient; use App\BusProNet\Exception\ApiClientException; +use App\BusProNet\Exception\ResponseParserException; +use App\BusProNet\Model\PersonalData; use App\Form\PersonalDataType; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -32,10 +34,14 @@ class PersonalDataController extends AbstractController return $this->security->logout(); } - $personalData = $this - ->apiClient - ->getPersonalData($bpnUser->getEmail(), $bpnUser->getPassword()) - ; + try { + $personalData = $this + ->apiClient + ->getPersonalData($bpnUser->getEmail(), $bpnUser->getPassword()); + } catch (ApiClientException|ResponseParserException $e) { + $this->addFlash('error', 'Deine persönlichen Daten konnten nicht abgerufen werden'); + $personalData = new PersonalData(); + } $personalDataForm = $this->createForm(PersonalDataType::class, $personalData, [ 'attr' => ['novalidate' => 'novalidate'], @@ -72,10 +78,14 @@ class PersonalDataController extends AbstractController return $this->security->logout(); } - $personalData = $this - ->apiClient - ->getPersonalData($bpnUser->getEmail(), $bpnUser->getPassword()) - ; + try { + $personalData = $this + ->apiClient + ->getPersonalData($bpnUser->getEmail(), $bpnUser->getPassword()); + } catch (ApiClientException|ResponseParserException $e) { + $this->addFlash('error', 'Deine persönlichen Daten konnten nicht abgerufen werden'); + $personalData = new PersonalData(); + } $personalData->communication->newsletter = !$personalData->communication->newsletter; @@ -85,10 +95,10 @@ class PersonalDataController extends AbstractController $this->logger->info('Updated newsletter registration', [ 'email' => $bpnUser->getEmail(), ]); - } catch (ApiClientException $e) { + } catch (ApiClientException|ResponseParserException $e) { $this->addFlash('error', $e->getMessage()); } return $this->redirectToRoute('app_personal_data'); } -} \ No newline at end of file +} diff --git a/src/Controller/RegistrationController.php b/src/Controller/RegistrationController.php index 9e2e6f0..4d21664 100644 --- a/src/Controller/RegistrationController.php +++ b/src/Controller/RegistrationController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\BusProNet\ApiClient; use App\BusProNet\Exception\ApiClientException; +use App\BusProNet\Exception\ResponseParserException; use App\Form\Model\RegistrationData; use App\Form\RegistrationType; use Psr\Log\LoggerInterface; @@ -42,7 +43,7 @@ class RegistrationController extends AbstractController $this->logger->info('Initiated registration', [ 'email' => $registrationData->email, ]); - } catch (ApiClientException $e) { + } catch (ApiClientException|ResponseParserException $e) { $this->addFlash('error', $e->getMessage()); $this->logger->error('Error initiating registration', [ 'email' => $registrationData->email, diff --git a/src/Controller/ResetPasswordController.php b/src/Controller/ResetPasswordController.php index 2bcb447..1ca5d72 100644 --- a/src/Controller/ResetPasswordController.php +++ b/src/Controller/ResetPasswordController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\BusProNet\ApiClient; use App\BusProNet\Exception\ApiClientException; +use App\BusProNet\Exception\ResponseParserException; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\Extension\Core\Type\EmailType; @@ -51,7 +52,7 @@ class ResetPasswordController extends AbstractController $this->logger->info('Initiated password reset', [ 'email' => $form->get('email')->getData(), ]); - } catch (ApiClientException $e) { + } catch (ApiClientException|ResponseParserException $e) { $this->addFlash('error', $e->getMessage()); $this->logger->error('Error initiating password reset', [ 'email' => $form->get('email')->getData(), @@ -66,4 +67,4 @@ class ResetPasswordController extends AbstractController 'form' => $form->createView(), ]); } -} \ No newline at end of file +}