mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-11-04 05:15:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Handler.php
 | 
						|
 * Copyright (C) 2016 thegrumpydictator@gmail.com
 | 
						|
 *
 | 
						|
 * This software may be modified and distributed under the terms of the
 | 
						|
 * Creative Commons Attribution-ShareAlike 4.0 International License.
 | 
						|
 *
 | 
						|
 * See the LICENSE file for details.
 | 
						|
 */
 | 
						|
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace FireflyIII\Exceptions;
 | 
						|
 | 
						|
use ErrorException;
 | 
						|
use Exception;
 | 
						|
use FireflyIII\Jobs\MailError;
 | 
						|
use Illuminate\Auth\Access\AuthorizationException;
 | 
						|
use Illuminate\Auth\AuthenticationException;
 | 
						|
use Illuminate\Database\Eloquent\ModelNotFoundException;
 | 
						|
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 | 
						|
use Illuminate\Session\TokenMismatchException;
 | 
						|
use Illuminate\Validation\ValidationException as ValException;
 | 
						|
use Request;
 | 
						|
use Symfony\Component\HttpKernel\Exception\HttpException;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class Handler
 | 
						|
 *
 | 
						|
 * @package FireflyIII\Exceptions
 | 
						|
 */
 | 
						|
class Handler extends ExceptionHandler
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * A list of the exception types that should not be reported.
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $dontReport
 | 
						|
        = [
 | 
						|
            AuthenticationException::class,
 | 
						|
            AuthorizationException::class,
 | 
						|
            HttpException::class,
 | 
						|
            ModelNotFoundException::class,
 | 
						|
            TokenMismatchException::class,
 | 
						|
            ValException::class,
 | 
						|
        ];
 | 
						|
 | 
						|
    /**
 | 
						|
     * Render an exception into an HTTP response.
 | 
						|
     *
 | 
						|
     * @param  \Illuminate\Http\Request $request
 | 
						|
     * @param  \Exception               $exception
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Http\Response
 | 
						|
     */
 | 
						|
    public function render($request, Exception $exception)
 | 
						|
    {
 | 
						|
        if ($exception instanceof FireflyException || $exception instanceof ErrorException) {
 | 
						|
 | 
						|
            $isDebug = env('APP_DEBUG', false);
 | 
						|
 | 
						|
            return response()->view('errors.FireflyException', ['exception' => $exception, 'debug' => $isDebug], 500);
 | 
						|
        }
 | 
						|
 | 
						|
        return parent::render($request, $exception);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * Report or log an exception.
 | 
						|
     *
 | 
						|
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
 | 
						|
     *
 | 
						|
     * @param  Exception $exception
 | 
						|
     * @SuppressWarnings(PHPMD.CyclomaticComplexity) // it's exactly five.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function report(Exception $exception)
 | 
						|
    {
 | 
						|
        $doMailError = env('SEND_ERROR_MESSAGE', true);
 | 
						|
        if (($exception instanceof FireflyException || $exception instanceof ErrorException) && $doMailError) {
 | 
						|
            $userData = [
 | 
						|
                'id'    => 0,
 | 
						|
                'email' => 'unknown@example.com',
 | 
						|
            ];
 | 
						|
            if (auth()->check()) {
 | 
						|
                $userData['id']    = auth()->user()->id;
 | 
						|
                $userData['email'] = auth()->user()->email;
 | 
						|
            }
 | 
						|
            $data = [
 | 
						|
                'class'        => get_class($exception),
 | 
						|
                'errorMessage' => $exception->getMessage(),
 | 
						|
                'time'         => date('r'),
 | 
						|
                'stackTrace'   => $exception->getTraceAsString(),
 | 
						|
                'file'         => $exception->getFile(),
 | 
						|
                'line'         => $exception->getLine(),
 | 
						|
                'code'         => $exception->getCode(),
 | 
						|
                'version'      => config('firefly.version'),
 | 
						|
            ];
 | 
						|
 | 
						|
            // create job that will mail.
 | 
						|
            $ipAddress = Request::ip() ?? '0.0.0.0';
 | 
						|
            $job       = new MailError($userData, env('SITE_OWNER', ''), $ipAddress, $data);
 | 
						|
            dispatch($job);
 | 
						|
        }
 | 
						|
 | 
						|
        parent::report($exception);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Convert an authentication exception into an unauthenticated response.
 | 
						|
     *
 | 
						|
     * @param $request
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
 | 
						|
     */
 | 
						|
    protected function unauthenticated($request)
 | 
						|
    {
 | 
						|
        if ($request->expectsJson()) {
 | 
						|
            return response()->json(['error' => 'Unauthenticated.'], 401);
 | 
						|
        }
 | 
						|
 | 
						|
        return redirect()->guest('login');
 | 
						|
    }
 | 
						|
}
 |