Add authentication configuration and allowed methods logic

This commit is contained in:
netkas 2025-01-07 15:25:32 -05:00
parent cabf1f35a8
commit 70c0fb2e54
4 changed files with 349 additions and 65 deletions

View file

@ -2,6 +2,7 @@
namespace Socialbox\Classes;
use Socialbox\Classes\Configuration\AuthenticationConfiguration;
use Socialbox\Classes\Configuration\CacheConfiguration;
use Socialbox\Classes\Configuration\CryptographyConfiguration;
use Socialbox\Classes\Configuration\DatabaseConfiguration;
@ -22,6 +23,7 @@
private static ?LoggingConfiguration $loggingConfiguration = null;
private static ?CacheConfiguration $cacheConfiguration = null;
private static ?RegistrationConfiguration $registrationConfiguration = null;
private static ?AuthenticationConfiguration $authenticationConfiguration = null;
private static ?PoliciesConfiguration $policiesConfiguration = null;
private static ?StorageConfiguration $storageConfiguration = null;
@ -134,6 +136,10 @@
$config->setDefault('registration.birthday_required', false);
$config->setDefault('registration.image_captcha_verification_required', true);
// Authentication configuration
$config->setDefault('authentication.enabled', true);
$config->setDefault('authentication.image_captcha_verification_required', true);
// Server Policies
// The maximum number of signing keys a peer can register onto the server at once
$config->setDefault('policies.max_signing_keys', 20);
@ -160,6 +166,7 @@
self::$loggingConfiguration = new LoggingConfiguration(self::$configuration->getConfiguration()['logging']);
self::$cacheConfiguration = new CacheConfiguration(self::$configuration->getConfiguration()['cache']);
self::$registrationConfiguration = new RegistrationConfiguration(self::$configuration->getConfiguration()['registration']);
self::$authenticationConfiguration = new AuthenticationConfiguration(self::$configuration->getConfiguration()['authentication']);
self::$policiesConfiguration = new PoliciesConfiguration(self::$configuration->getConfiguration()['policies']);
self::$storageConfiguration = new StorageConfiguration(self::$configuration->getConfiguration()['storage']);
}
@ -329,6 +336,24 @@
return self::$registrationConfiguration;
}
/**
* Retrieves the authentication configuration.
*
* This method returns the current AuthenticationConfiguration instance.
* If the configuration has not been initialized yet, it initializes it first.
*
* @return AuthenticationConfiguration The authentication configuration instance.
*/
public static function getAuthenticationConfiguration(): AuthenticationConfiguration
{
if(self::$authenticationConfiguration === null)
{
self::initializeConfiguration();
}
return self::$authenticationConfiguration;
}
/**
* Retrieves the policies configuration.
*

View file

@ -0,0 +1,36 @@
<?php
namespace Socialbox\Classes\Configuration;
class AuthenticationConfiguration
{
private bool $enabled;
private bool $imageCaptchaVerificationRequired;
/**
* Public Constructor for the AuthenticationConfiguration class
*
* @param array $data The array data configuration
*/
public function __construct(array $data)
{
$this->enabled = (bool)$data['enabled'];
$this->imageCaptchaVerificationRequired = (bool)$data['image_captcha_verification_required'];
}
/**
* @return bool
*/
public function isEnabled(): bool
{
return $this->enabled;
}
/**
* @return bool
*/
public function isImageCaptchaVerificationRequired(): bool
{
return $this->imageCaptchaVerificationRequired;
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace Socialbox\Classes\StandardMethods;
use Socialbox\Abstracts\Method;
use Socialbox\Enums\StandardError;
use Socialbox\Enums\StandardMethods;
use Socialbox\Exceptions\DatabaseOperationException;
use Socialbox\Exceptions\StandardException;
use Socialbox\Interfaces\SerializableInterface;
use Socialbox\Objects\ClientRequest;
use Socialbox\Objects\RpcRequest;
class GetAllowedMethods extends Method
{
/**
* @inheritDoc
*/
public static function execute(ClientRequest $request, RpcRequest $rpcRequest): ?SerializableInterface
{
$allowedMethods = [];
try
{
foreach(StandardMethods::getAllowedMethods($request) as $method)
{
$allowedMethods[] = $method->value;
}
}
catch(DatabaseOperationException $e)
{
throw new StandardException('Failed to retrieve allowed methods due to an internal exception', StandardError::INTERNAL_SERVER_ERROR, $e);
}
return $rpcRequest->produceResponse($allowedMethods);
}
}