From 5555e793277d3e4fb6e73489f34afc5bd5102932 Mon Sep 17 00:00:00 2001 From: netkas Date: Thu, 24 Oct 2024 15:15:14 -0400 Subject: [PATCH] Refactored Configuration --- .idea/php.xml | 15 ++-- src/Socialbox/Abstracts/CacheLayer.php | 2 +- .../CacheLayer/MemcachedCacheLayer.php | 6 +- .../Classes/CacheLayer/RedisCacheLayer.php | 10 +-- .../Classes/CliCommands/InitializeCommand.php | 2 +- src/Socialbox/Classes/Configuration.php | 86 +++++++++++++------ .../Configuration/CacheConfiguration.php | 83 ++++++++++++++++++ .../Configuration/DatabaseConfiguration.php | 46 ++++++++++ .../Resources/database/registered_peers.sql | 2 +- src/Socialbox/Enums/Flags/PeerFlags.php | 34 ++++++++ src/Socialbox/Managers/SessionManager.php | 7 +- 11 files changed, 247 insertions(+), 46 deletions(-) create mode 100644 src/Socialbox/Classes/Configuration/CacheConfiguration.php create mode 100644 src/Socialbox/Classes/Configuration/DatabaseConfiguration.php create mode 100644 src/Socialbox/Enums/Flags/PeerFlags.php diff --git a/.idea/php.xml b/.idea/php.xml index cee48e7..6f8f81e 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -12,16 +12,17 @@ - - - + - - + + + + - - + + + diff --git a/src/Socialbox/Abstracts/CacheLayer.php b/src/Socialbox/Abstracts/CacheLayer.php index e825def..4e07a5c 100644 --- a/src/Socialbox/Abstracts/CacheLayer.php +++ b/src/Socialbox/Abstracts/CacheLayer.php @@ -69,7 +69,7 @@ abstract class CacheLayer { if (self::$instance === null) { - $engine = Configuration::getConfiguration()['cache']['engine']; + $engine = Configuration::getCacheConfiguration()->getEngine(); if ($engine === 'redis') { diff --git a/src/Socialbox/Classes/CacheLayer/MemcachedCacheLayer.php b/src/Socialbox/Classes/CacheLayer/MemcachedCacheLayer.php index 8095ae1..d1edcad 100644 --- a/src/Socialbox/Classes/CacheLayer/MemcachedCacheLayer.php +++ b/src/Socialbox/Classes/CacheLayer/MemcachedCacheLayer.php @@ -22,10 +22,10 @@ class MemcachedCacheLayer extends CacheLayer } $this->memcached = new Memcached(); - $this->memcached->addServer(Configuration::getConfiguration()['cache']['host'], (int)Configuration::getConfiguration()['cache']['port']); - if(Configuration::getConfiguration()['cache']['username'] !== null || Configuration::getConfiguration()['cache']['password'] !== null) + $this->memcached->addServer(Configuration::getCacheConfiguration()->getHost(), Configuration::getCacheConfiguration()->getPort()); + if(Configuration::getCacheConfiguration()->getUsername() !== null || Configuration::getCacheConfiguration()->getPassword() !== null) { - $this->memcached->setSaslAuthData(Configuration::getConfiguration()['cache']['username'], Configuration::getConfiguration()['cache']['password']); + $this->memcached->setSaslAuthData(Configuration::getCacheConfiguration()->getUsername(), Configuration::getCacheConfiguration()->getPassword()); } } diff --git a/src/Socialbox/Classes/CacheLayer/RedisCacheLayer.php b/src/Socialbox/Classes/CacheLayer/RedisCacheLayer.php index 1715e51..f836d92 100644 --- a/src/Socialbox/Classes/CacheLayer/RedisCacheLayer.php +++ b/src/Socialbox/Classes/CacheLayer/RedisCacheLayer.php @@ -26,15 +26,15 @@ class RedisCacheLayer extends CacheLayer try { - $this->redis->connect(Configuration::getConfiguration()['cache']['host'], (int)Configuration::getConfiguration()['cache']['port']); - if (Configuration::getConfiguration()['cache']['password'] !== null) + $this->redis->connect(Configuration::getCacheConfiguration()->getHost(), Configuration::getCacheConfiguration()->getPort()); + if (Configuration::getCacheConfiguration()->getPassword() !== null) { - $this->redis->auth(Configuration::getConfiguration()['cache']['password']); + $this->redis->auth(Configuration::getCacheConfiguration()->getPassword()); } - if (Configuration::getConfiguration()['cache']['database'] !== 0) + if (Configuration::getCacheConfiguration()->getDatabase() !== null) { - $this->redis->select((int)Configuration::getConfiguration()['cache']['database']); + $this->redis->select(Configuration::getCacheConfiguration()->getDatabase()); } } catch (RedisException $e) diff --git a/src/Socialbox/Classes/CliCommands/InitializeCommand.php b/src/Socialbox/Classes/CliCommands/InitializeCommand.php index 9cf5b64..07b71e8 100644 --- a/src/Socialbox/Classes/CliCommands/InitializeCommand.php +++ b/src/Socialbox/Classes/CliCommands/InitializeCommand.php @@ -30,7 +30,7 @@ class InitializeCommand implements CliCommandInterface Log::info('net.nosial.socialbox', 'Initializing Socialbox...'); - if(Configuration::getConfiguration()['cache']['enabled']) + if(Configuration::getCacheConfiguration()->isEnabled()) { Log::verbose('net.nosial.socialbox', 'Clearing cache layer...'); CacheLayer::getInstance()->clear(); diff --git a/src/Socialbox/Classes/Configuration.php b/src/Socialbox/Classes/Configuration.php index 648e439..73a6b02 100644 --- a/src/Socialbox/Classes/Configuration.php +++ b/src/Socialbox/Classes/Configuration.php @@ -2,43 +2,75 @@ namespace Socialbox\Classes; +use Socialbox\Classes\Configuration\CacheConfiguration; +use Socialbox\Classes\Configuration\DatabaseConfiguration; + class Configuration { private static ?array $configuration = null; + private static ?DatabaseConfiguration $databaseConfiguration = null; + private static ?CacheConfiguration $cacheConfiguration = null; + + private static function initializeConfiguration(): void + { + $config = new \ConfigLib\Configuration('socialbox'); + + // False by default, requires the user to enable it. + $config->setDefault('instance.enabled', false); + + $config->setDefault('security.display_internal_exceptions', false); + + $config->setDefault('database.host', '127.0.0.1'); + $config->setDefault('database.port', 3306); + $config->setDefault('database.username', 'root'); + $config->setDefault('database.password', 'root'); + $config->setDefault('database.name', 'test'); + + $config->setDefault('cache.enabled', false); + $config->setDefault('cache.engine', 'redis'); + $config->setDefault('cache.host', '127.0.0.1'); + $config->setDefault('cache.port', 6379); + $config->setDefault('cache.username', null); + $config->setDefault('cache.password', null); + $config->setDefault('cache.database', 0); + $config->setDefault('cache.sessions.enabled', true); + $config->setDefault('cache.sessions.ttl', 3600); + $config->setDefault('cache.sessions.max', 1000); + + $config->save(); + + self::$configuration = $config->getConfiguration(); + self::$databaseConfiguration = self::$configuration['database']; + self::$cacheConfiguration = self::$configuration['cache']; + } public static function getConfiguration(): array { if(self::$configuration === null) { - $config = new \ConfigLib\Configuration('socialbox'); - - // False by default, requires the user to enable it. - $config->setDefault('instance.enabled', false); - - $config->setDefault('security.display_internal_exceptions', false); - - $config->setDefault('database.host', '127.0.0.1'); - $config->setDefault('database.port', 3306); - $config->setDefault('database.username', 'root'); - $config->setDefault('database.password', 'root'); - $config->setDefault('database.name', 'test'); - - $config->setDefault('cache.enabled', false); - $config->setDefault('cache.engine', 'redis'); - $config->setDefault('cache.host', '127.0.0.1'); - $config->setDefault('cache.port', 6379); - $config->setDefault('cache.username', null); - $config->setDefault('cache.password', null); - $config->setDefault('cache.database', 0); - $config->setDefault('cache.variables.enabled', true); - $config->setDefault('cache.variables.ttl', 3600); - $config->setDefault('cache.variables.max', 1000); - - $config->save(); - - self::$configuration = $config->getConfiguration(); + self::initializeConfiguration(); } return self::$configuration; } + + public static function getDatabaseConfiguration(): DatabaseConfiguration + { + if(self::$databaseConfiguration === null) + { + self::initializeConfiguration(); + } + + return self::$databaseConfiguration; + } + + public static function getCacheConfiguration(): CacheConfiguration + { + if(self::$cacheConfiguration === null) + { + self::initializeConfiguration(); + } + + return self::$cacheConfiguration; + } } \ No newline at end of file diff --git a/src/Socialbox/Classes/Configuration/CacheConfiguration.php b/src/Socialbox/Classes/Configuration/CacheConfiguration.php new file mode 100644 index 0000000..a080f03 --- /dev/null +++ b/src/Socialbox/Classes/Configuration/CacheConfiguration.php @@ -0,0 +1,83 @@ +enabled = (bool)$data['enabled']; + $this->engine = (string)$data['engine']; + $this->host = (string)$data['host']; + $this->port = (int)$data['port']; + $this->username = $data['username'] ? (string)$data['username'] : null; + $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']; + } + + public function isEnabled(): bool + { + return $this->enabled; + } + + public function getEngine(): string + { + return $this->engine; + } + + public function getHost(): string + { + return $this->host; + } + + public function getPort(): int + { + return $this->port; + } + + public function getUsername(): ?string + { + return $this->username; + } + + public function getPassword(): ?string + { + return $this->password; + } + + public function getDatabase(): ?int + { + return $this->database; + } + + public function isSessionsEnabled(): bool + { + return $this->sessionsEnabled; + } + + public function getSessionsTtl(): int + { + return $this->sessionsTtl; + } + + public function getSessionsMax(): int + { + return $this->sessionsMax; + } +} \ No newline at end of file diff --git a/src/Socialbox/Classes/Configuration/DatabaseConfiguration.php b/src/Socialbox/Classes/Configuration/DatabaseConfiguration.php new file mode 100644 index 0000000..2eb427c --- /dev/null +++ b/src/Socialbox/Classes/Configuration/DatabaseConfiguration.php @@ -0,0 +1,46 @@ +host = (string)$data['host']; + $this->port = (int)$data['port']; + $this->username = (string)$data['username']; + $this->password = $data['password'] ? (string)$data['password'] : null; + $this->name = (string)$data['name']; + } + + public function getHost(): string + { + return $this->host; + } + + public function getPort(): int + { + return $this->port; + } + + public function getUsername(): string + { + return $this->username; + } + + public function getPassword(): ?string + { + return $this->password; + } + + public function getName(): string + { + return $this->name; + } +} \ No newline at end of file diff --git a/src/Socialbox/Classes/Resources/database/registered_peers.sql b/src/Socialbox/Classes/Resources/database/registered_peers.sql index 59e1914..01f9229 100644 --- a/src/Socialbox/Classes/Resources/database/registered_peers.sql +++ b/src/Socialbox/Classes/Resources/database/registered_peers.sql @@ -15,6 +15,6 @@ create table registered_peers comment 'Table for housing registered peers under this network'; create index registered_peers_registered_index - on registered_peers (registered) + on registered_peers (created) comment 'The Index for the reigstered column of the peer'; diff --git a/src/Socialbox/Enums/Flags/PeerFlags.php b/src/Socialbox/Enums/Flags/PeerFlags.php new file mode 100644 index 0000000..fc26d7c --- /dev/null +++ b/src/Socialbox/Enums/Flags/PeerFlags.php @@ -0,0 +1,34 @@ + false, + default => true, + }; + } +} diff --git a/src/Socialbox/Managers/SessionManager.php b/src/Socialbox/Managers/SessionManager.php index d14d511..2032cfd 100644 --- a/src/Socialbox/Managers/SessionManager.php +++ b/src/Socialbox/Managers/SessionManager.php @@ -7,6 +7,7 @@ use InvalidArgumentException; use PDO; use PDOException; + use Socialbox\Classes\Configuration; use Socialbox\Classes\Cryptography; use Socialbox\Classes\Database; use Socialbox\Enums\SessionState; @@ -107,7 +108,8 @@ $data['created'] = new DateTime($data['created']); $data['last_request'] = new DateTime($data['last_request']); - return SessionRecord::fromArray($data); + $sessionRecord = SessionRecord::fromArray($data); + } catch (PDOException | DateMalformedStringException $e) { @@ -120,6 +122,7 @@ * * @param string $uuid The UUID of the session to update. * @return void + * @throws DatabaseOperationException */ public static function updateAuthenticatedPeer(string $uuid): void { @@ -141,6 +144,7 @@ * * @param string $uuid The UUID of the session to be updated. * @return void + * @throws DatabaseOperationException */ public static function updateLastRequest(string $uuid): void { @@ -164,6 +168,7 @@ * @param string $uuid The unique identifier of the session to update. * @param SessionState $state The new state to be set for the session. * @return void No return value. + * @throws DatabaseOperationException */ public static function updateState(string $uuid, SessionState $state): void {