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

Closed
netkas wants to merge 421 commits from master into dev
3 changed files with 178 additions and 38 deletions
Showing only changes of commit 02b5afe4c0 - Show all commits

View file

@ -4,13 +4,21 @@ namespace Socialbox\Classes;
use Socialbox\Classes\Configuration\CacheConfiguration; use Socialbox\Classes\Configuration\CacheConfiguration;
use Socialbox\Classes\Configuration\DatabaseConfiguration; use Socialbox\Classes\Configuration\DatabaseConfiguration;
use Socialbox\Classes\Configuration\RegistrationConfiguration;
class Configuration class Configuration
{ {
private static ?array $configuration = null; private static ?array $configuration = null;
private static ?DatabaseConfiguration $databaseConfiguration = null; private static ?DatabaseConfiguration $databaseConfiguration = null;
private static ?CacheConfiguration $cacheConfiguration = null; private static ?CacheConfiguration $cacheConfiguration = null;
private static ?RegistrationConfiguration $registrationConfiguration = null;
/**
* Initializes the configuration settings for the application. This includes
* settings for the instance, security, database, cache layer, and registration.
*
* @return void
*/
private static function initializeConfiguration(): void private static function initializeConfiguration(): void
{ {
$config = new \ConfigLib\Configuration('socialbox'); $config = new \ConfigLib\Configuration('socialbox');
@ -20,12 +28,14 @@ class Configuration
$config->setDefault('security.display_internal_exceptions', false); $config->setDefault('security.display_internal_exceptions', false);
// Database configuration
$config->setDefault('database.host', '127.0.0.1'); $config->setDefault('database.host', '127.0.0.1');
$config->setDefault('database.port', 3306); $config->setDefault('database.port', 3306);
$config->setDefault('database.username', 'root'); $config->setDefault('database.username', 'root');
$config->setDefault('database.password', 'root'); $config->setDefault('database.password', 'root');
$config->setDefault('database.name', 'test'); $config->setDefault('database.name', 'test');
// Cache layer configuration
$config->setDefault('cache.enabled', false); $config->setDefault('cache.enabled', false);
$config->setDefault('cache.engine', 'redis'); $config->setDefault('cache.engine', 'redis');
$config->setDefault('cache.host', '127.0.0.1'); $config->setDefault('cache.host', '127.0.0.1');
@ -37,13 +47,30 @@ class Configuration
$config->setDefault('cache.sessions.ttl', 3600); $config->setDefault('cache.sessions.ttl', 3600);
$config->setDefault('cache.sessions.max', 1000); $config->setDefault('cache.sessions.max', 1000);
// Registration configuration
$config->setDefault('registration.enabled', true);
$config->setDefault('registration.password_required', true);
$config->setDefault('registration.otp_required', false);
$config->setDefault('registration.display_name_required', false);
$config->setDefault('registration.email_verification_required', false);
$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(); $config->save();
self::$configuration = $config->getConfiguration(); self::$configuration = $config->getConfiguration();
self::$databaseConfiguration = self::$configuration['database']; self::$databaseConfiguration = self::$configuration['database'];
self::$cacheConfiguration = self::$configuration['cache']; self::$cacheConfiguration = self::$configuration['cache'];
self::$registrationConfiguration = self::$configuration['registration'];
} }
/**
* Retrieves the current configuration array. If the configuration is not initialized,
* it triggers the initialization process.
*
* @return array The current configuration array.
*/
public static function getConfiguration(): array public static function getConfiguration(): array
{ {
if(self::$configuration === null) if(self::$configuration === null)
@ -54,6 +81,11 @@ class Configuration
return self::$configuration; return self::$configuration;
} }
/**
* Retrieves the current database configuration.
*
* @return DatabaseConfiguration The configuration settings for the database.
*/
public static function getDatabaseConfiguration(): DatabaseConfiguration public static function getDatabaseConfiguration(): DatabaseConfiguration
{ {
if(self::$databaseConfiguration === null) if(self::$databaseConfiguration === null)
@ -64,6 +96,12 @@ class Configuration
return self::$databaseConfiguration; return self::$databaseConfiguration;
} }
/**
* Retrieves the current cache configuration. If the cache configuration
* has not been initialized, it will initialize it first.
*
* @return CacheConfiguration The current cache configuration instance.
*/
public static function getCacheConfiguration(): CacheConfiguration public static function getCacheConfiguration(): CacheConfiguration
{ {
if(self::$cacheConfiguration === null) if(self::$cacheConfiguration === null)
@ -73,4 +111,22 @@ class Configuration
return self::$cacheConfiguration; return self::$cacheConfiguration;
} }
/**
* Retrieves the registration configuration.
*
* This method returns the current RegistrationConfiguration instance.
* If the configuration has not been initialized yet, it initializes it first.
*
* @return RegistrationConfiguration The registration configuration instance.
*/
public static function getRegistrationConfiguration(): RegistrationConfiguration
{
if(self::$registrationConfiguration === null)
{
self::initializeConfiguration();
}
return self::$registrationConfiguration;
}
} }

View file

@ -0,0 +1,122 @@
<?php
/**
* This class handles the configuration settings for user registration.
*/
namespace Socialbox\Classes\Configuration;
class RegistrationConfiguration
{
private bool $registrationEnabled;
private bool $passwordRequired;
private bool $otpRequired;
private bool $displayNameRequired;
private bool $emailVerificationRequired;
private bool $smsVerificationRequired;
private bool $phoneCallVerificationRequired;
private bool $imageCaptchaVerificationRequired;
/**
* Constructor method for initializing verification requirements.
*
* @param array $data An associative array containing the following keys:
* 'registration_enabled', 'password_required',
* 'otp_required', 'display_name_required',
* 'email_verification_required', 'sms_verification_required',
* 'phone_call_verification_required', 'image_captcha_verification_required'.
*
* @return void
*/
public function __construct(array $data)
{
$this->registrationEnabled = (bool)$data['registration_enabled'];
$this->passwordRequired = (bool)$data['password_required'];
$this->otpRequired = (bool)$data['otp_required'];
$this->displayNameRequired = (bool)$data['display_name_required'];
$this->emailVerificationRequired = (bool)$data['email_verification_required'];
$this->smsVerificationRequired = (bool)$data['sms_verification_required'];
$this->phoneCallVerificationRequired = (bool)$data['phone_call_verification_required'];
$this->imageCaptchaVerificationRequired = (bool)$data['image_captcha_verification_required'];
}
/**
* Checks if the registration is enabled.
*
* @return bool True if registration is enabled, false otherwise.
*/
public function isRegistrationEnabled(): bool
{
return $this->registrationEnabled;
}
/**
* Determines if a password is required.
*
* @return bool True if a password is required, false otherwise.
*/
public function isPasswordRequired(): bool
{
return $this->passwordRequired;
}
/**
* Determines if OTP (One-Time Password) is required.
*
* @return bool True if OTP is required, false otherwise.
*/
public function isOtpRequired(): bool
{
return $this->otpRequired;
}
/**
* Checks if a display name is required.
*
* @return bool Returns true if a display name is required, false otherwise.
*/
public function isDisplayNameRequired(): bool
{
return $this->displayNameRequired;
}
/**
* Checks if email verification is required.
*
* @return bool Returns true if email verification is required, false otherwise.
*/
public function isEmailVerificationRequired(): bool
{
return $this->emailVerificationRequired;
}
/**
* Checks if SMS verification is required.
*
* @return bool Returns true if SMS verification is required, false otherwise.
*/
public function isSmsVerificationRequired(): bool
{
return $this->smsVerificationRequired;
}
/**
* Checks if phone call verification is required.
*
* @return bool Returns true if phone call verification is required, false otherwise.
*/
public function isPhoneCallVerificationRequired(): bool
{
return $this->phoneCallVerificationRequired;
}
/**
* Determines if image CAPTCHA verification is required.
*
* @return bool Returns true if image CAPTCHA verification is required, false otherwise.
*/
public function isImageCaptchaVerificationRequired(): bool
{
return $this->imageCaptchaVerificationRequired;
}
}

View file

@ -1,38 +0,0 @@
<?php
namespace Socialbox\Classes;
use PHPUnit\Framework\TestCase;
/**
* Socialbox's Configuration Test Class
*
* This is a test suite for testing the "getConfiguration" method in the "Configuration" class.
*/
class ConfigurationTest extends TestCase
{
/**
* Test the "getConfiguration" method in "Configuration" class.
*/
public function testGetConfiguration(): void
{
$config = Configuration::getConfiguration();
$this->assertIsArray($config, "Configuration should be an array.");
//Assert that all the default configuration exists
$this->assertArrayHasKey('host', $config['database']);
$this->assertIsString($config['database']['host']);
$this->assertArrayHasKey('port', $config['database']);
$this->assertIsInt($config['database']['port'], 3306);
$this->assertArrayHasKey('username', $config['database']);
$this->assertIsString($config['database']['username']);
$this->assertArrayHasKey('password', $config['database']);
$this->assertIsString($config['database']['password']);
$this->assertArrayHasKey('name', $config['database']);
$this->assertIsString($config['database']['name']);
}
}