diff --git a/src/Socialbox/Classes/Configuration.php b/src/Socialbox/Classes/Configuration.php index fe86406..4e409d9 100644 --- a/src/Socialbox/Classes/Configuration.php +++ b/src/Socialbox/Classes/Configuration.php @@ -2,14 +2,19 @@ namespace Socialbox\Classes; +use League\Flysystem\Config; use Socialbox\Classes\Configuration\CacheConfiguration; use Socialbox\Classes\Configuration\DatabaseConfiguration; +use Socialbox\Classes\Configuration\InstanceConfiguration; +use Socialbox\Classes\Configuration\LoggingConfiguration; use Socialbox\Classes\Configuration\RegistrationConfiguration; class Configuration { - private static ?array $configuration = null; + private static ?\ConfigLib\Configuration $configuration = null; private static ?DatabaseConfiguration $databaseConfiguration = null; + private static ?InstanceConfiguration $instanceConfiguration = null; + private static ?LoggingConfiguration $loggingConfiguration = null; private static ?CacheConfiguration $cacheConfiguration = null; private static ?RegistrationConfiguration $registrationConfiguration = null; @@ -23,10 +28,16 @@ class Configuration { $config = new \ConfigLib\Configuration('socialbox'); - // False by default, requires the user to enable it. - $config->setDefault('instance.enabled', false); + // Instance configuration + $config->setDefault('instance.enabled', false); // False by default, requires the user to enable it. + $config->setDefault('instance.domain', null); + $config->setDefault('instance.rpc_endpoint', null); + $config->setDefault('instance.private_key', null); + $config->setDefault('instance.public_key', null); + // Security Configuration $config->setDefault('security.display_internal_exceptions', false); + $config->setDefault('security.resolved_servers_ttl', 600); // Database configuration $config->setDefault('database.host', '127.0.0.1'); @@ -35,6 +46,12 @@ class Configuration $config->setDefault('database.password', 'root'); $config->setDefault('database.name', 'test'); + // Logging configuration + $config->setDefault('logging.console_logging_enabled', true); + $config->setDefault('logging.console_logging_level', 'info'); + $config->setDefault('logging.file_logging_enabled', true); + $config->setDefault('logging.file_logging_level', 'error'); + // Cache layer configuration $config->setDefault('cache.enabled', false); $config->setDefault('cache.engine', 'redis'); @@ -56,13 +73,14 @@ class Configuration $config->setDefault('registration.sms_verification_required', false); $config->setDefault('registration.phone_call_verification_required', false); $config->setDefault('registration.image_captcha_verification_required', true); - $config->save(); - self::$configuration = $config->getConfiguration(); - self::$databaseConfiguration = new DatabaseConfiguration(self::$configuration['database']); - self::$cacheConfiguration = new CacheConfiguration(self::$configuration['cache']); - self::$registrationConfiguration = new RegistrationConfiguration(self::$configuration['registration']); + self::$configuration = $config; + self::$databaseConfiguration = new DatabaseConfiguration(self::$configuration->getConfiguration()['database']); + self::$instanceConfiguration = new InstanceConfiguration(self::$configuration->getConfiguration()['instance']); + self::$loggingConfiguration = new LoggingConfiguration(self::$configuration->getConfiguration()['logging']); + self::$cacheConfiguration = new CacheConfiguration(self::$configuration->getConfiguration()['cache']); + self::$registrationConfiguration = new RegistrationConfiguration(self::$configuration->getConfiguration()['registration']); } /** @@ -78,6 +96,16 @@ class Configuration self::initializeConfiguration(); } + return self::$configuration->getConfiguration(); + } + + public static function getConfigurationLib(): \ConfigLib\Configuration + { + if(self::$configuration === null) + { + self::initializeConfiguration(); + } + return self::$configuration; } @@ -96,6 +124,36 @@ class Configuration return self::$databaseConfiguration; } + /** + * Retrieves the current instance configuration. + * + * @return InstanceConfiguration The current instance configuration instance. + */ + public static function getInstanceConfiguration(): InstanceConfiguration + { + if(self::$instanceConfiguration === null) + { + self::initializeConfiguration(); + } + + return self::$instanceConfiguration; + } + + /** + * Retrieves the current logging configuration. + * + * @return LoggingConfiguration The current logging configuration instance. + */ + public static function getLoggingConfiguration(): LoggingConfiguration + { + if(self::$loggingConfiguration === null) + { + self::initializeConfiguration(); + } + + return self::$loggingConfiguration; + } + /** * Retrieves the current cache configuration. If the cache configuration * has not been initialized, it will initialize it first. diff --git a/src/Socialbox/Classes/Configuration/CacheConfiguration.php b/src/Socialbox/Classes/Configuration/CacheConfiguration.php index a080f03..5f5d8f4 100644 --- a/src/Socialbox/Classes/Configuration/CacheConfiguration.php +++ b/src/Socialbox/Classes/Configuration/CacheConfiguration.php @@ -26,9 +26,9 @@ class CacheConfiguration $this->password = $data['password'] ? (string)$data['password'] : null; $this->database = $data['database'] ? (int)$data['database'] : null; - $this->sessionsEnabled = (bool)$data['sessions.enabled']; - $this->sessionsTtl = (int)$data['sessions.ttl']; - $this->sessionsMax = (int)$data['sessions.max']; + $this->sessionsEnabled = (bool)$data['sessions']['enabled']; + $this->sessionsTtl = (int)$data['sessions']['ttl']; + $this->sessionsMax = (int)$data['sessions']['max']; } public function isEnabled(): bool diff --git a/src/Socialbox/Classes/Configuration/InstanceConfiguration.php b/src/Socialbox/Classes/Configuration/InstanceConfiguration.php new file mode 100644 index 0000000..26ea951 --- /dev/null +++ b/src/Socialbox/Classes/Configuration/InstanceConfiguration.php @@ -0,0 +1,76 @@ +enabled = (bool)$data['enabled']; + $this->domain = $data['domain']; + $this->rpcEndpoint = $data['rpc_endpoint']; + $this->privateKey = $data['private_key']; + $this->publicKey = $data['public_key']; + } + + /** + * Checks if the current object is enabled. + * + * @return bool True if the object is enabled, false otherwise. + */ + public function isEnabled(): bool + { + return $this->enabled; + } + + /** + * Retrieves the domain. + * + * @return string|null The domain. + */ + public function getDomain(): ?string + { + return $this->domain; + } + + /** + * @return string|null + */ + public function getRpcEndpoint(): ?string + { + return $this->rpcEndpoint; + } + + /** + * Retrieves the private key. + * + * @return string|null The private key. + */ + public function getPrivateKey(): ?string + { + return $this->privateKey; + } + + /** + * Retrieves the public key. + * + * @return string|null The public key. + */ + public function getPublicKey(): ?string + { + return $this->publicKey; + } +} \ No newline at end of file diff --git a/src/Socialbox/Classes/Configuration/LoggingConfiguration.php b/src/Socialbox/Classes/Configuration/LoggingConfiguration.php new file mode 100644 index 0000000..a499d53 --- /dev/null +++ b/src/Socialbox/Classes/Configuration/LoggingConfiguration.php @@ -0,0 +1,115 @@ +consoleLoggingEnabled = (bool) $data['console_logging_enabled']; + $this->consoleLoggingLevel = $data['console_logging_level']; + $this->fileLoggingEnabled = (bool) $data['file_logging_enabled']; + $this->fileLoggingLevel = $data['file_logging_level']; + } + + /** + * Checks if console logging is enabled. + * + * @return bool True if console logging is enabled, otherwise false. + */ + public function isConsoleLoggingEnabled(): bool + { + return $this->consoleLoggingEnabled; + } + + /** + * Retrieves the logging level for console output. + * + * @return LogLevel The logging level configured for console output. + */ + public function getConsoleLoggingLevel(): LogLevel + { + return $this->parseLogLevel($this->consoleLoggingLevel); + } + + /** + * Checks if file logging is enabled. + * + * @return bool True if file logging is enabled, false otherwise. + */ + public function isFileLoggingEnabled(): bool + { + return $this->fileLoggingEnabled; + } + + /** + * Retrieves the logging level for file logging. + * + * @return LogLevel The logging level set for file logging. + */ + public function getFileLoggingLevel(): LogLevel + { + return $this->parseLogLevel($this->fileLoggingLevel); + } + + /** + * Parses the given log level from string format to a LogLevel enumeration. + * + * @param string $logLevel The log level as a string. + * @return LogLevel The corresponding LogLevel enumeration. + */ + private function parseLogLevel(string $logLevel): LogLevel + { + switch (strtolower($logLevel)) { + case LogLevel::DEBUG: + case 'debug': + case '6': + case 'dbg': + return LogLevel::DEBUG; + case LogLevel::VERBOSE: + case 'verbose': + case '5': + case 'vrb': + return LogLevel::VERBOSE; + default: + case LogLevel::INFO: + case 'info': + case '4': + case 'inf': + return LogLevel::INFO; + case LogLevel::WARNING: + case 'warning': + case '3': + case 'wrn': + return LogLevel::WARNING; + case LogLevel::ERROR: + case 'error': + case '2': + case 'err': + return LogLevel::ERROR; + case LogLevel::FATAL: + case 'fatal': + case '1': + case 'crt': + return LogLevel::FATAL; + case LogLevel::SILENT: + case 'silent': + case '0': + case 'sil': + return LogLevel::SILENT; + } + } +} \ No newline at end of file diff --git a/src/Socialbox/Classes/Configuration/RegistrationConfiguration.php b/src/Socialbox/Classes/Configuration/RegistrationConfiguration.php index 03b0ed6..269124c 100644 --- a/src/Socialbox/Classes/Configuration/RegistrationConfiguration.php +++ b/src/Socialbox/Classes/Configuration/RegistrationConfiguration.php @@ -30,7 +30,7 @@ class RegistrationConfiguration */ public function __construct(array $data) { - $this->registrationEnabled = (bool)$data['registration_enabled']; + $this->registrationEnabled = (bool)$data['enabled']; $this->passwordRequired = (bool)$data['password_required']; $this->otpRequired = (bool)$data['otp_required']; $this->displayNameRequired = (bool)$data['display_name_required'];