Catch extension exceptions in override (#7475)

* Catch extension exceptions in override
https://github.com/FreshRSS/Extensions/pull/300#issuecomment-2768578464

* Fix error message
This commit is contained in:
Alexandre Alapetite
2025-04-01 17:55:20 +02:00
committed by GitHub
parent dbdadbb410
commit 3336631a84
3 changed files with 19 additions and 2 deletions

View File

@@ -131,7 +131,12 @@ class FreshRSS_extension_Controller extends FreshRSS_ActionController {
FreshRSS_View::prependTitle($ext->getName() . ' · ' . _t('admin.extensions.title') . ' · ');
$this->view->extension = $ext;
$this->view->extension->handleConfigureAction();
try {
$this->view->extension->handleConfigureAction();
} catch (Minz_Exception $e) { // @phpstan-ignore catch.neverThrown (Thrown by extensions)
Minz_Log::error('Error while configuring extension ' . $ext->getName() . ': ' . $e->getMessage());
Minz_Request::bad(_t('feedback.extensions.enable.ko', $ext_name, _url('index', 'logs')), ['c' => 'extension', 'a' => 'index']);
}
}
/**

View File

@@ -91,6 +91,10 @@ abstract class Minz_Extension {
$this->is_enabled = true;
}
final public function disable(): void {
$this->is_enabled = false;
}
/**
* Return if the extension is currently enabled.
*
@@ -253,6 +257,8 @@ abstract class Minz_Extension {
switch ($type) {
case 'system': return FreshRSS_Context::hasSystemConf();
case 'user': return FreshRSS_Context::hasUserConf();
default:
return false;
}
}

View File

@@ -268,7 +268,13 @@ final class Minz_ExtensionManager {
spl_autoload_register([$ext, 'autoload']);
}
$ext->enable();
$ext->init();
try {
$ext->init();
} catch (Minz_Exception $e) { // @phpstan-ignore catch.neverThrown (Thrown by extensions)
Minz_Log::warning('Error while enabling extension ' . $ext->getName() . ': ' . $e->getMessage());
$ext->disable();
unset(self::$ext_list_enabled[$ext_name]);
}
}
}