Add configuration classes for database and Redis setup
This commit is contained in:
parent
13c0fa51ef
commit
d28d4d06f2
7 changed files with 341 additions and 0 deletions
8
.idea/php.xml
generated
8
.idea/php.xml
generated
|
@ -10,6 +10,14 @@
|
|||
<option name="highlightLevel" value="WARNING" />
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PhpIncludePathManager">
|
||||
<include_path>
|
||||
<path value="/var/ncc/packages/net.nosial.configlib=1.2.0" />
|
||||
<path value="/var/ncc/packages/net.nosial.loglib2=1.0.3" />
|
||||
<path value="/var/ncc/packages/net.nosial.optslib=1.1.3" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="8.3" />
|
||||
<component name="PhpStanOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
|
|
17
project.json
17
project.json
|
@ -38,6 +38,23 @@
|
|||
"DEBUG": "1"
|
||||
}
|
||||
}
|
||||
],
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "net.nosial.configlib",
|
||||
"version": "latest",
|
||||
"source": "nosial/configlib=latest@github"
|
||||
},
|
||||
{
|
||||
"name": "net.nosial.loglib2",
|
||||
"version": "latest",
|
||||
"source": "nosial/loglib2=latest@github"
|
||||
},
|
||||
{
|
||||
"name": "net.nosial.optslib",
|
||||
"version": "latest",
|
||||
"source": "nosial/optslib=latest@github"
|
||||
}
|
||||
]
|
||||
},
|
||||
"execution_policies": [
|
||||
|
|
77
src/FederationServer/Classes/Configuration.php
Normal file
77
src/FederationServer/Classes/Configuration.php
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
namespace FederationServer\Classes;
|
||||
|
||||
use FederationServer\Classes\Configuration\DatabaseConfiguration;
|
||||
use FederationServer\Classes\Configuration\RedisConfiguration;
|
||||
|
||||
class Configuration
|
||||
{
|
||||
private static ?\ConfigLib\Configuration $configuration = null;
|
||||
private static ?DatabaseConfiguration $databaseConfiguration = null;
|
||||
private static ?RedisConfiguration $redisConfiguration = null;
|
||||
|
||||
public static function initialize(): void
|
||||
{
|
||||
self::$configuration = new \ConfigLib\Configuration('federation_server');
|
||||
|
||||
self::$configuration->setDefault('database.host', '127.0.0.1');
|
||||
self::$configuration->setDefault('database.port', 3306);
|
||||
self::$configuration->setDefault('database.username', 'root');
|
||||
self::$configuration->setDefault('database.password', 'root');
|
||||
self::$configuration->setDefault('database.name', 'federation');
|
||||
self::$configuration->setDefault('database.charset', 'utf8mb4');
|
||||
self::$configuration->setDefault('database.collation', 'utf8mb4_unicode_ci');
|
||||
|
||||
self::$configuration->setDefault('redis.enabled', true);
|
||||
self::$configuration->setDefault('redis.host', '127.0.1');
|
||||
self::$configuration->setDefault('redis.port', 6379);
|
||||
self::$configuration->setDefault('redis.password', null);
|
||||
self::$configuration->setDefault('redis.database', 0);
|
||||
|
||||
self::$configuration->save();
|
||||
|
||||
self::$databaseConfiguration = new DatabaseConfiguration(self::$configuration->get('database'));
|
||||
self::$redisConfiguration = new RedisConfiguration(self::$configuration->get('redis'));
|
||||
}
|
||||
|
||||
public static function getConfiguration(): array
|
||||
{
|
||||
if(self::$configuration === null)
|
||||
{
|
||||
self::initialize();
|
||||
}
|
||||
|
||||
return self::$configuration->getConfiguration();
|
||||
}
|
||||
|
||||
public static function getConfigurationLib(): \ConfigLib\Configuration
|
||||
{
|
||||
if(self::$configuration === null)
|
||||
{
|
||||
self::initialize();
|
||||
}
|
||||
|
||||
return self::$configuration;
|
||||
}
|
||||
|
||||
public static function getDatabaseConfiguration(): DatabaseConfiguration
|
||||
{
|
||||
if(self::$databaseConfiguration === null)
|
||||
{
|
||||
self::initialize();
|
||||
}
|
||||
|
||||
return self::$databaseConfiguration;
|
||||
}
|
||||
|
||||
public static function getRedisConfiguration(): RedisConfiguration
|
||||
{
|
||||
if(self::$redisConfiguration === null)
|
||||
{
|
||||
self::initialize();
|
||||
}
|
||||
|
||||
return self::$redisConfiguration;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
|
||||
namespace FederationServer\Classes\Configuration;
|
||||
|
||||
/**
|
||||
* Class DatabaseConfiguration
|
||||
*
|
||||
* Handles the configuration for database connection.
|
||||
*/
|
||||
class DatabaseConfiguration
|
||||
{
|
||||
private string $host;
|
||||
private int $port;
|
||||
private string $username;
|
||||
private string $password;
|
||||
private string $name;
|
||||
private string $charset;
|
||||
private string $collation;
|
||||
|
||||
/**
|
||||
* DatabaseConfiguration constructor.
|
||||
*
|
||||
* @param array $configuration Array with database configuration values.
|
||||
*/
|
||||
public function __construct(array $configuration)
|
||||
{
|
||||
$this->host = $configuration['host'] ?? '127.0.0.1';
|
||||
$this->port = $configuration['port'] ?? 3306;
|
||||
$this->username = $configuration['username'] ?? 'root';
|
||||
$this->password = $configuration['password'] ?? 'root';
|
||||
$this->name = $configuration['name'] ?? 'federation';
|
||||
$this->charset = $configuration['charset'] ?? 'utf8mb4';
|
||||
$this->collation = $configuration['collation'] ?? 'utf8mb4_unicode_ci';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database host.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getHost(): string
|
||||
{
|
||||
return $this->host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database port.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getPort(): int
|
||||
{
|
||||
return $this->port;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database username.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUsername(): string
|
||||
{
|
||||
return $this->username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database password.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPassword(): string
|
||||
{
|
||||
return $this->password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database charset.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCharset(): string
|
||||
{
|
||||
return $this->charset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database collation.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCollation(): string
|
||||
{
|
||||
return $this->collation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Data Source Name (DSN) for the database connection.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDsn(): string
|
||||
{
|
||||
return sprintf('mysql:host=%s;port=%d;dbname=%s;charset=%s',
|
||||
$this->host, $this->port, $this->name, $this->charset
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
namespace FederationServer\Classes\Configuration;
|
||||
|
||||
class RedisConfiguration
|
||||
{
|
||||
private bool $enabled;
|
||||
private string $host;
|
||||
private int $port;
|
||||
private ?string $password;
|
||||
private int $database;
|
||||
|
||||
/**
|
||||
* RedisConfiguration constructor.
|
||||
*
|
||||
* @param array $configuration Array with Redis configuration values.
|
||||
*/
|
||||
public function __construct(array $configuration)
|
||||
{
|
||||
$this->enabled = $configuration['enabled'] ?? true;
|
||||
$this->host = $configuration['host'] ?? '127.0.0.1';
|
||||
$this->port = $configuration['port'] ?? 6379;
|
||||
$this->password = $configuration['password'] ?? null;
|
||||
$this->database = $configuration['database'] ?? 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Redis is enabled.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isEnabled(): bool
|
||||
{
|
||||
return $this->enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Redis host.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getHost(): string
|
||||
{
|
||||
return $this->host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Redis port.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getPort(): int
|
||||
{
|
||||
return $this->port;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Redis password.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPassword(): ?string
|
||||
{
|
||||
return $this->password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Redis database index.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getDatabase(): int
|
||||
{
|
||||
return $this->database;
|
||||
}
|
||||
}
|
37
src/FederationServer/Classes/DatabaseConnection.php
Normal file
37
src/FederationServer/Classes/DatabaseConnection.php
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace FederationServer\Classes;
|
||||
|
||||
use PDO;
|
||||
use PDOException;
|
||||
|
||||
class DatabaseConnection
|
||||
{
|
||||
private static ?PDO $pdo = null;
|
||||
|
||||
/**
|
||||
* Get the PDO connection instance. If it does not exist, create it using the configuration.
|
||||
*
|
||||
* @return PDO
|
||||
* @throws PDOException
|
||||
*/
|
||||
public static function getConnection(): PDO
|
||||
{
|
||||
// If the connection is not already established, create a new PDO instance.
|
||||
if (self::$pdo === null)
|
||||
{
|
||||
self::$pdo = new PDO(
|
||||
Configuration::getDatabaseConfiguration()->getDsn(),
|
||||
Configuration::getDatabaseConfiguration()->getUsername(),
|
||||
Configuration::getDatabaseConfiguration()->getPassword(),
|
||||
[
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . Configuration::getDatabaseConfiguration()->getCharset() . ' COLLATE ' . Configuration::getDatabaseConfiguration()->getCollation(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
return self::$pdo;
|
||||
}
|
||||
}
|
8
src/FederationServer/FederationServer.php
Normal file
8
src/FederationServer/FederationServer.php
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace FederationServer;
|
||||
|
||||
class FederationServer
|
||||
{
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue