Catch access issues in installer.

This commit is contained in:
James Cole
2026-07-07 11:09:05 +02:00
parent 069b2af8ce
commit 3ce56b5206
5 changed files with 57 additions and 42 deletions
+7
View File
@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers;
use FireflyIII\Events\Model\Webhook\WebhookMessagesRequestSending;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Facades\AppConfiguration;
@@ -72,7 +73,13 @@ abstract class Controller extends BaseController
public function __construct()
{
// is site a demo site?
try {
$isDemoSiteConfig = AppConfiguration::get('is_demo_site', config('firefly.configuration.is_demo_site', false));
} catch(FireflyException $e) {
// if this breaks, just stop right here.
Log::error($e->getMessage());
return;
}
$isDemoSite = (bool) $isDemoSiteConfig->data;
View::share('IS_DEMO_SITE', $isDemoSite);
View::share('DEMO_USERNAME', config('firefly.demo_username'));
@@ -41,7 +41,6 @@ use Illuminate\Support\Facades\Log;
use Illuminate\View\View;
use Laravel\Passport\Passport;
use phpseclib3\Crypt\RSA;
use function Safe\file_put_contents;
/**
@@ -56,33 +55,37 @@ final class InstallController extends Controller
public const string FORBIDDEN_ERROR = 'Internal PHP function "proc_close" is disabled for your installation. Auto-migration is not possible.';
public const string OTHER_ERROR = 'An unknown error prevented Firefly III from executing the upgrade commands. Sorry.';
private string $lastError = '';
private string $lastError = '';
// empty on purpose.
private array $upgradeCommands = [
// there are 5 initial commands
// Check 4 places: InstallController, Docker image, UpgradeDatabase, composer.json
'firefly-iii:create-database' => [],
'migrate' => ['--seed' => true, '--force' => true],
'generate-keys' => [], // an exception :(
'firefly-iii:upgrade-database' => [],
'firefly-iii:set-latest-version' => ['--james-is-cool' => true],
'firefly-iii:verify-security-alerts' => [],
];
private array $upgradeCommands
= [
// there are 5 initial commands
// Check 4 places: InstallController, Docker image, UpgradeDatabase, composer.json
'firefly-iii:create-database' => [],
'migrate' => ['--seed' => true, '--force' => true],
'generate-keys' => [], // an exception :(
'firefly-iii:upgrade-database' => [],
'firefly-iii:set-latest-version' => ['--james-is-cool' => true],
'firefly-iii:verify-security-alerts' => [],
];
/**
* Show index.
*
* @return Factory|View
*/
public function index(): Factory|\Illuminate\Contracts\View\View
public function index(): Factory | \Illuminate\Contracts\View\View
{
if ($this->hasNoTables() || $this->isOldVersionInstalled()) {
app('view')->share('FF_VERSION', config('firefly.version'));
// index will set FF3 version.
AppConfiguration::set('ff3_version', (string) config('firefly.version'));
AppConfiguration::set('ff3_build_time', (int) config('firefly.build_time'));
try {
AppConfiguration::set('ff3_version', (string)config('firefly.version'));
AppConfiguration::set('ff3_build_time', (int)config('firefly.build_time'));
} catch (FireflyException $e) {
Log::warning($e->getMessage());
}
return view('install.index');
}
@@ -94,8 +97,8 @@ final class InstallController extends Controller
*/
public function keys(): void
{
if (!$this->hasNoTables() && !$this->isOldVersionInstalled()) {
$key = RSA::createKey(4096);
if ($this->hasNoTables() || $this->isOldVersionInstalled()) {
$key = RSA::createKey(4096);
[$publicKey, $privateKey] = [Passport::keyPath('oauth-public.key'), Passport::keyPath('oauth-private.key')];
@@ -103,22 +106,22 @@ final class InstallController extends Controller
return;
}
file_put_contents($publicKey, (string) $key->getPublicKey());
file_put_contents($publicKey, (string)$key->getPublicKey());
file_put_contents($privateKey, $key->toString('PKCS1'));
}
}
public function runCommand(Request $request): JsonResponse
{
if (!$this->hasNoTables() && !$this->isOldVersionInstalled()) {
$requestIndex = (int) $request->input('index');
if ($this->hasNoTables() || $this->isOldVersionInstalled()) {
$requestIndex = (int)$request->input('index');
$response = ['hasNextCommand' => false, 'done' => true, 'previous' => null, 'error' => false, 'errorMessage' => null];
Log::debug(sprintf('Will now run commands. Request index is %d', $requestIndex));
$indexes = array_keys($this->upgradeCommands);
$indexes = array_keys($this->upgradeCommands);
if (array_key_exists($requestIndex, $indexes)) {
$command = $indexes[$requestIndex];
$parameters = $this->upgradeCommands[$command];
$command = $indexes[$requestIndex];
$parameters = $this->upgradeCommands[$command];
Log::debug(sprintf('Will now execute command "%s" with parameters', $command), $parameters);
try {