shouldReport($exception)) { $this->sendEmail($exception); } parent::report($exception); } /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @return Response * * @throws Throwable */ public function render($request, Throwable $exception) { // Fallback für nicht im Checkout abgefangene PAYONE-Transportfehler: // identisch zum früheren abort(403, $message) in Payone::sendRequest. if ($exception instanceof PayoneTransportException) { $exception = new HttpException(403, $exception->getMessage(), $exception); } return parent::render($request, $exception); } /** * Convert an authentication exception into a response. * * @param \Illuminate\Http\Request $request * @return Response */ protected function unauthenticated($request, AuthenticationException $exception) { if ($request->expectsJson()) { return response()->json(['message' => $exception->getMessage()], 401); } try { // HOTFIX: DomainContext temporär deaktiviert // TODO: Nach Claude v2 Implementation wieder aktivieren // $context = app(\App\Domain\DomainContext::class); // $loginRoute = match($context->type) { // 'portal' => 'portal.login.form', // 'crm' => 'login', // CRM hat eine eigene login route // default => 'login' // }; // Temporär: Verwende Standard-Login-Route return redirect()->guest(route('login')); } catch (\Exception $e) { // Fallback: Weiterleitung zur Hauptdomain return redirect()->guest('https://'.config('app.domain').config('app.tld_care').'/login'); } } public function sendEmail(Throwable $exception) { try { $e = FlattenException::createFromThrowable($exception); $handler = new HtmlErrorRenderer(true); // boolean, true raises debug flag... $css = $handler->getStylesheet(); $content = $handler->getBody($e); // Mail::to(config('app.exception_mail'))->send(new MailContact($contact)); // Verwende normale Mail-Klasse statt Facade, um Probleme bei der Initialisierung zu vermeiden $to = config('app.exception_mail'); $subject = 'mivita Exception: '.\Request::fullUrl(); if ($to) { \Mail::send('emails.exception', compact('css', 'content'), function ($message) use ($to, $subject) { $message ->to($to) ->subject($subject); }); } } catch (Throwable $ex) { // Einfache Fehlerprotokollierung ohne Facade file_put_contents( storage_path('logs/laravel-'.date('Y-m-d').'.log'), '['.date('Y-m-d H:i:s').'] exception-handler-error: '.$ex->getMessage()."\n", FILE_APPEND ); } } }