Made message signing in Cryptography use SHA512 as the message content for... #1

Closed
netkas wants to merge 421 commits from master into dev
5 changed files with 261 additions and 12 deletions
Showing only changes of commit 99a4f20ece - Show all commits

View file

@ -2,14 +2,19 @@
namespace Socialbox\Classes; namespace Socialbox\Classes;
use League\Flysystem\Config;
use Socialbox\Classes\Configuration\CacheConfiguration; use Socialbox\Classes\Configuration\CacheConfiguration;
use Socialbox\Classes\Configuration\DatabaseConfiguration; use Socialbox\Classes\Configuration\DatabaseConfiguration;
use Socialbox\Classes\Configuration\InstanceConfiguration;
use Socialbox\Classes\Configuration\LoggingConfiguration;
use Socialbox\Classes\Configuration\RegistrationConfiguration; use Socialbox\Classes\Configuration\RegistrationConfiguration;
class Configuration class Configuration
{ {
private static ?array $configuration = null; private static ?\ConfigLib\Configuration $configuration = null;
private static ?DatabaseConfiguration $databaseConfiguration = null; private static ?DatabaseConfiguration $databaseConfiguration = null;
private static ?InstanceConfiguration $instanceConfiguration = null;
private static ?LoggingConfiguration $loggingConfiguration = null;
private static ?CacheConfiguration $cacheConfiguration = null; private static ?CacheConfiguration $cacheConfiguration = null;
private static ?RegistrationConfiguration $registrationConfiguration = null; private static ?RegistrationConfiguration $registrationConfiguration = null;
@ -23,10 +28,16 @@ class Configuration
{ {
$config = new \ConfigLib\Configuration('socialbox'); $config = new \ConfigLib\Configuration('socialbox');
// False by default, requires the user to enable it. // Instance configuration
$config->setDefault('instance.enabled', false); $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.display_internal_exceptions', false);
$config->setDefault('security.resolved_servers_ttl', 600);
// Database configuration // Database configuration
$config->setDefault('database.host', '127.0.0.1'); $config->setDefault('database.host', '127.0.0.1');
@ -35,6 +46,12 @@ class Configuration
$config->setDefault('database.password', 'root'); $config->setDefault('database.password', 'root');
$config->setDefault('database.name', 'test'); $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 // Cache layer configuration
$config->setDefault('cache.enabled', false); $config->setDefault('cache.enabled', false);
$config->setDefault('cache.engine', 'redis'); $config->setDefault('cache.engine', 'redis');
@ -56,13 +73,14 @@ class Configuration
$config->setDefault('registration.sms_verification_required', false); $config->setDefault('registration.sms_verification_required', false);
$config->setDefault('registration.phone_call_verification_required', false); $config->setDefault('registration.phone_call_verification_required', false);
$config->setDefault('registration.image_captcha_verification_required', true); $config->setDefault('registration.image_captcha_verification_required', true);
$config->save(); $config->save();
self::$configuration = $config->getConfiguration(); self::$configuration = $config;
self::$databaseConfiguration = new DatabaseConfiguration(self::$configuration['database']); self::$databaseConfiguration = new DatabaseConfiguration(self::$configuration->getConfiguration()['database']);
self::$cacheConfiguration = new CacheConfiguration(self::$configuration['cache']); self::$instanceConfiguration = new InstanceConfiguration(self::$configuration->getConfiguration()['instance']);
self::$registrationConfiguration = new RegistrationConfiguration(self::$configuration['registration']); 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(); self::initializeConfiguration();
} }
return self::$configuration->getConfiguration();
}
public static function getConfigurationLib(): \ConfigLib\Configuration
{
if(self::$configuration === null)
{
self::initializeConfiguration();
}
return self::$configuration; return self::$configuration;
} }
@ -96,6 +124,36 @@ class Configuration
return self::$databaseConfiguration; 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 * Retrieves the current cache configuration. If the cache configuration
* has not been initialized, it will initialize it first. * has not been initialized, it will initialize it first.

View file

@ -26,9 +26,9 @@ class CacheConfiguration
$this->password = $data['password'] ? (string)$data['password'] : null; $this->password = $data['password'] ? (string)$data['password'] : null;
$this->database = $data['database'] ? (int)$data['database'] : null; $this->database = $data['database'] ? (int)$data['database'] : null;
$this->sessionsEnabled = (bool)$data['sessions.enabled']; $this->sessionsEnabled = (bool)$data['sessions']['enabled'];
$this->sessionsTtl = (int)$data['sessions.ttl']; $this->sessionsTtl = (int)$data['sessions']['ttl'];
$this->sessionsMax = (int)$data['sessions.max']; $this->sessionsMax = (int)$data['sessions']['max'];
} }
public function isEnabled(): bool public function isEnabled(): bool

View file

@ -0,0 +1,76 @@
<?php
namespace Socialbox\Classes\Configuration;
class InstanceConfiguration
{
private bool $enabled;
private ?string $domain;
private ?string $rpcEndpoint;
private ?string $privateKey;
private ?string $publicKey;
/**
* Constructor that initializes object properties with the provided data.
*
* @param array $data An associative array with keys 'enabled', 'domain', 'private_key', and 'public_key'.
* @return void
*/
public function __construct(array $data)
{
$this->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;
}
}

View file

@ -0,0 +1,115 @@
<?php
namespace Socialbox\Classes\Configuration;
use LogLib\Enums\LogLevel;
class LoggingConfiguration
{
private bool $consoleLoggingEnabled;
private string $consoleLoggingLevel;
private bool $fileLoggingEnabled;
private string $fileLoggingLevel;
/**
* Initializes a new instance of the class with the given configuration data.
*
* @param array $data An associative array containing logging configuration settings.
* @return void
*/
public function __construct(array $data)
{
$this->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;
}
}
}

View file

@ -30,7 +30,7 @@ class RegistrationConfiguration
*/ */
public function __construct(array $data) public function __construct(array $data)
{ {
$this->registrationEnabled = (bool)$data['registration_enabled']; $this->registrationEnabled = (bool)$data['enabled'];
$this->passwordRequired = (bool)$data['password_required']; $this->passwordRequired = (bool)$data['password_required'];
$this->otpRequired = (bool)$data['otp_required']; $this->otpRequired = (bool)$data['otp_required'];
$this->displayNameRequired = (bool)$data['display_name_required']; $this->displayNameRequired = (bool)$data['display_name_required'];