. */ declare(strict_types=1); namespace FireflyIII\Http\Middleware; use Closure; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Support\System\IsOldVersion; use FireflyIII\Support\System\OAuthKeys; use Illuminate\Http\Request; /** * Class Installer */ class Installer { use IsOldVersion; /** * Handle an incoming request. * * @param Request $request * * @return mixed * * @throws FireflyException */ public function handle($request, Closure $next) { // Log::debug(sprintf('Installer middleware for URL %s', $request->url())); // ignore installer in test environment. if ('testing' === config('app.env')) { return $next($request); } // don't run installer when already in installer. $url = $request->url(); $strpos = stripos($url, '/install'); if (false !== $strpos) { // Log::debug(sprintf('URL is %s, will NOT run installer middleware', $url)); return $next($request); } // run installer when no tables are present, // or when old scheme version // or when old firefly version if ($this->hasNoTables() || $this->isOldVersionInstalled()) { return response()->redirectTo(route('installer.index')); } OAuthKeys::verifyKeysRoutine(); // update scheme version // update firefly version return $next($request); } /** * Is access denied error. */ protected function isAccessDenied(string $message): bool { return false !== stripos($message, 'Access denied'); } }