mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-15 16:57:09 +00:00
Give error for proc_close.
This commit is contained in:
@@ -35,6 +35,8 @@ use phpseclib\Crypt\RSA;
|
||||
*/
|
||||
class InstallController extends Controller
|
||||
{
|
||||
|
||||
public const FORBIDDEN_ERROR = 'Internal PHP function "proc_close" is disabled for your installation. Auto-migration is not possible.';
|
||||
/** @noinspection MagicMethodsValidityInspection */
|
||||
/** @noinspection PhpMissingParentConstructorInspection */
|
||||
/**
|
||||
@@ -58,6 +60,9 @@ class InstallController extends Controller
|
||||
*/
|
||||
public function keys()
|
||||
{
|
||||
if ($this->hasForbiddenFunctions()) {
|
||||
return response()->json(['error' => true, 'message' => self::FORBIDDEN_ERROR]);
|
||||
}
|
||||
// create keys manually because for some reason the passport namespace
|
||||
// does not exist
|
||||
$rsa = new RSA();
|
||||
@@ -69,13 +74,13 @@ class InstallController extends Controller
|
||||
];
|
||||
|
||||
if (file_exists($publicKey) || file_exists($privateKey)) {
|
||||
return response()->json(['OK']);
|
||||
return response()->json(['error' => false, 'message' => 'OK']);
|
||||
}
|
||||
|
||||
file_put_contents($publicKey, array_get($keys, 'publickey'));
|
||||
file_put_contents($privateKey, array_get($keys, 'privatekey'));
|
||||
|
||||
return response()->json(['OK']);
|
||||
return response()->json(['error' => false, 'message' => 'OK']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,11 +88,15 @@ class InstallController extends Controller
|
||||
*/
|
||||
public function migrate()
|
||||
{
|
||||
if ($this->hasForbiddenFunctions()) {
|
||||
return response()->json(['error' => true, 'message' => self::FORBIDDEN_ERROR]);
|
||||
}
|
||||
|
||||
Log::debug('Am now calling migrate routine...');
|
||||
Artisan::call('migrate', ['--seed' => true, '--force' => true]);
|
||||
Log::debug(Artisan::output());
|
||||
|
||||
return response()->json(['OK']);
|
||||
return response()->json(['error' => false, 'message' => 'OK']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -95,11 +104,14 @@ class InstallController extends Controller
|
||||
*/
|
||||
public function upgrade()
|
||||
{
|
||||
if ($this->hasForbiddenFunctions()) {
|
||||
return response()->json(['error' => true, 'message' => self::FORBIDDEN_ERROR]);
|
||||
}
|
||||
Log::debug('Am now calling upgrade database routine...');
|
||||
Artisan::call('firefly:upgrade-database');
|
||||
Log::debug(Artisan::output());
|
||||
|
||||
return response()->json(['OK']);
|
||||
return response()->json(['error' => false, 'message' => 'OK']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,11 +119,37 @@ class InstallController extends Controller
|
||||
*/
|
||||
public function verify()
|
||||
{
|
||||
if ($this->hasForbiddenFunctions()) {
|
||||
return response()->json(['error' => true, 'message' => self::FORBIDDEN_ERROR]);
|
||||
}
|
||||
Log::debug('Am now calling verify database routine...');
|
||||
Artisan::call('firefly:verify');
|
||||
Log::debug(Artisan::output());
|
||||
|
||||
return response()->json(['OK']);
|
||||
return response()->json(['error' => false, 'message' => 'OK']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
private function hasForbiddenFunctions(): bool
|
||||
{
|
||||
$list = ['proc_close'];
|
||||
$forbidden = explode(',', ini_get('disable_functions'));
|
||||
$trimmed = array_map(
|
||||
function (string $value) {
|
||||
return trim($value);
|
||||
}, $forbidden
|
||||
);
|
||||
foreach ($list as $entry) {
|
||||
if (\in_array($entry, $trimmed, true)) {
|
||||
Log::error('Method "%s" is FORBIDDEN, so the console command cannot be executed.');
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
34
public/js/ff/install/index.js
vendored
34
public/js/ff/install/index.js
vendored
@@ -28,8 +28,13 @@ $(function () {
|
||||
|
||||
function startMigration() {
|
||||
$('#status-box').html('<i class="fa fa-spin fa-spinner"></i> Setting up DB...');
|
||||
$.post(migrateUri, {_token: token}).done(function () {
|
||||
startPassport();
|
||||
$.post(migrateUri, {_token: token}).done(function (data) {
|
||||
if(data.error === false) {
|
||||
startPassport();
|
||||
} else {
|
||||
displaySoftFail(data.message);
|
||||
}
|
||||
|
||||
}).fail(function () {
|
||||
$('#status-box').html('<i class="fa fa-warning"></i> Migration failed! See log files :(');
|
||||
});
|
||||
@@ -41,7 +46,12 @@ function startMigration() {
|
||||
function startPassport() {
|
||||
$('#status-box').html('<i class="fa fa-spin fa-spinner"></i> Setting up OAuth2...');
|
||||
$.post(keysUri, {_token: token}).done(function () {
|
||||
startUpgrade();
|
||||
if(data.error === false) {
|
||||
startUpgrade();
|
||||
} else {
|
||||
displaySoftFail(data.message);
|
||||
}
|
||||
|
||||
}).fail(function () {
|
||||
$('#status-box').html('<i class="fa fa-warning"></i> OAuth2 failed! See log files :(');
|
||||
});
|
||||
@@ -53,7 +63,11 @@ function startPassport() {
|
||||
function startUpgrade() {
|
||||
$('#status-box').html('<i class="fa fa-spin fa-spinner"></i> Upgrading database...');
|
||||
$.post(upgradeUri, {_token: token}).done(function () {
|
||||
startVerify();
|
||||
if(data.error === false) {
|
||||
startVerify();
|
||||
} else {
|
||||
displaySoftFail(data.message);
|
||||
}
|
||||
}).fail(function () {
|
||||
$('#status-box').html('<i class="fa fa-warning"></i> Upgrade failed! See log files :(');
|
||||
});
|
||||
@@ -65,7 +79,11 @@ function startUpgrade() {
|
||||
function startVerify() {
|
||||
$('#status-box').html('<i class="fa fa-spin fa-spinner"></i> Verify database integrity...');
|
||||
$.post(verifyUri, {_token: token}).done(function () {
|
||||
completeDone();
|
||||
if(data.error === false) {
|
||||
completeDone();
|
||||
} else {
|
||||
displaySoftFail(data.message);
|
||||
}
|
||||
}).fail(function () {
|
||||
$('#status-box').html('<i class="fa fa-warning"></i> Verification failed! See log files :(');
|
||||
});
|
||||
@@ -79,4 +97,10 @@ function completeDone() {
|
||||
setTimeout(function () {
|
||||
window.location = homeUri;
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
function displaySoftFail(message) {
|
||||
$('#status-box').html('<i class="fa fa-warning"></i> ' + message + '<br /><br />Please read the ' +
|
||||
'<a href="http://firefly-iii.readthedocs.io/en/latest/support/faq.html#i-get-an-error-about-proc-close-being-disabled">' +
|
||||
'official documentation</a> about this.');
|
||||
}
|
Reference in New Issue
Block a user