1
0
mirror of https://github.com/RSS-Bridge/rss-bridge.git synced 2025-06-18 16:10:05 +02:00

refactor: general code base refactor (#2950)

* refactor

* fix: bug in previous refactor

* chore: exclude phpcompat sniff due to bug in phpcompat

* fix: do not leak absolute paths

* refactor/fix: batch extensions checking, fix DOS issue
This commit is contained in:
Dag
2022-08-06 22:46:28 +02:00
committed by GitHub
parent b042412416
commit 2bbce8ebef
45 changed files with 679 additions and 827 deletions

View File

@ -41,14 +41,8 @@ final class Configuration
*/
private static $config = null;
/**
* Throw an exception when trying to create a new instance of this class.
*
* @throws \LogicException if called.
*/
public function __construct()
private function __construct()
{
throw new \LogicException('Can\'t create object of this class!');
}
/**
@ -61,43 +55,45 @@ final class Configuration
*/
public static function verifyInstallation()
{
// Check PHP version
// PHP Supported Versions: https://www.php.net/supported-versions.php
if (version_compare(PHP_VERSION, '7.4.0') === -1) {
if (version_compare(\PHP_VERSION, '7.4.0') === -1) {
self::reportError('RSS-Bridge requires at least PHP version 7.4.0!');
}
// Extensions check
$errors = [];
// OpenSSL: https://www.php.net/manual/en/book.openssl.php
if (!extension_loaded('openssl')) {
self::reportError('"openssl" extension not loaded. Please check "php.ini"');
$errors[] = 'openssl extension not loaded';
}
// libxml: https://www.php.net/manual/en/book.libxml.php
if (!extension_loaded('libxml')) {
self::reportError('"libxml" extension not loaded. Please check "php.ini"');
$errors[] = 'libxml extension not loaded';
}
// Multibyte String (mbstring): https://www.php.net/manual/en/book.mbstring.php
if (!extension_loaded('mbstring')) {
self::reportError('"mbstring" extension not loaded. Please check "php.ini"');
$errors[] = 'mbstring extension not loaded';
}
// SimpleXML: https://www.php.net/manual/en/book.simplexml.php
if (!extension_loaded('simplexml')) {
self::reportError('"simplexml" extension not loaded. Please check "php.ini"');
$errors[] = 'simplexml extension not loaded';
}
// Client URL Library (curl): https://www.php.net/manual/en/book.curl.php
// Allow RSS-Bridge to run without curl module in CLI mode without root certificates
if (!extension_loaded('curl') && !(php_sapi_name() === 'cli' && empty(ini_get('curl.cainfo')))) {
self::reportError('"curl" extension not loaded. Please check "php.ini"');
$errors[] = 'curl extension not loaded';
}
// JavaScript Object Notation (json): https://www.php.net/manual/en/book.json.php
if (!extension_loaded('json')) {
self::reportError('"json" extension not loaded. Please check "php.ini"');
$errors[] = 'json extension not loaded';
}
if ($errors) {
throw new \Exception(sprintf('Configuration error: %s', implode(', ', $errors)));
}
}
@ -192,11 +188,11 @@ final class Configuration
self::reportConfigurationError('authentication', 'enable', 'Is not a valid Boolean');
}
if (!is_string(self::getConfig('authentication', 'username'))) {
if (!self::getConfig('authentication', 'username')) {
self::reportConfigurationError('authentication', 'username', 'Is not a valid string');
}
if (!is_string(self::getConfig('authentication', 'password'))) {
if (! self::getConfig('authentication', 'password')) {
self::reportConfigurationError('authentication', 'password', 'Is not a valid string');
}
@ -250,7 +246,7 @@ final class Configuration
*/
public static function getVersion()
{
$headFile = PATH_ROOT . '.git/HEAD';
$headFile = __DIR__ . '/../.git/HEAD';
// '@' is used to mute open_basedir warning
if (@is_readable($headFile)) {
@ -295,19 +291,8 @@ final class Configuration
self::reportError($report);
}
/**
* Reports an error message to the user and ends execution
*
* @param string $message The error message
*
* @return void
*/
private static function reportError($message)
{
http_response_code(500);
print render('error.html.php', [
'message' => "Configuration error: $message",
]);
exit;
throw new \Exception(sprintf('Configuration error: %s', $message));
}
}