, \Psr\Log\LogLevel::*> */ protected $levels = [ // ]; /** * A list of the exception types that are not reported. * * @var array> */ protected $dontReport = [ ProcessException::class ]; /** * A list of the inputs that are never flashed to the session on validation exceptions. * * @var array */ protected $dontFlash = [ 'current_password', 'password', 'password_confirmation', ]; private InstanceSettings $settings; protected function unauthenticated($request, AuthenticationException $exception) { if ($request->is('api/*') || $request->expectsJson() || $this->shouldReturnJson($request, $exception)) { return response()->json(['message' => $exception->getMessage()], 401); } return redirect()->guest($exception->redirectTo() ?? route('login')); } /** * Register the exception handling callbacks for the application. */ public function register(): void { $this->reportable(function (Throwable $e) { if (isDev()) { // return; } if ($e instanceof RuntimeException) { return; } $this->settings = InstanceSettings::get(); if ($this->settings->do_not_track) { return; } app('sentry')->configureScope( function (Scope $scope) { $email = auth()?->user() ? auth()->user()->email : 'guest'; $instanceAdmin = User::find(0)->email ?? 'admin@localhost'; $scope->setUser( [ 'email' => $email, 'instanceAdmin' => $instanceAdmin ] ); } ); if (str($e->getMessage())->contains('No space left on device')) { return; } ray('reporting to sentry'); Integration::captureUnhandledException($e); }); } }