Refactor PeerDatabaseRecord and SessionManager to handle ReservedUsernames and improve date handling

This commit is contained in:
netkas 2025-03-19 15:06:59 -04:00
parent 6a1aa6b353
commit a92391445a
Signed by: netkas
GPG key ID: 4D8629441B76E4CC
3 changed files with 35 additions and 14 deletions

View file

@ -54,13 +54,14 @@
// TODO: Update this to support `host` peers
if($peer->isExternal())
{
Logger::getLogger()->debug('Creating a session for an external peer');
$flags[] = SessionFlags::AUTHENTICATION_REQUIRED;
$flags[] = SessionFlags::VER_AUTHENTICATION;
}
else if($peer->isEnabled())
{
Logger::getLogger()->debug('Creating a session for an enabled peer');
$flags[] = SessionFlags::AUTHENTICATION_REQUIRED;
if(PasswordManager::usesPassword($peer->getUuid()))
{
$flags[] = SessionFlags::VER_PASSWORD;
@ -73,6 +74,7 @@
}
else
{
Logger::getLogger()->debug('Creating a session for a disabled peer');
$flags[] = SessionFlags::REGISTRATION_REQUIRED;
if(Configuration::getRegistrationConfiguration()->isDisplayNameRequired())

View file

@ -6,6 +6,7 @@
use InvalidArgumentException;
use Socialbox\Classes\Configuration;
use Socialbox\Enums\Flags\PeerFlags;
use Socialbox\Enums\ReservedUsernames;
use Socialbox\Interfaces\SerializableInterface;
use Socialbox\Objects\Standard\InformationFieldState;
use Socialbox\Objects\Standard\Peer;
@ -32,7 +33,15 @@
{
$this->uuid = $data['uuid'];
$this->username = $data['username'];
$this->server = $data['server'];
if($data['server'] === ReservedUsernames::HOST->value)
{
$this->server = Configuration::getInstanceConfiguration()->getDomain();
}
else
{
$this->server = $data['server'];
}
if($data['flags'])
{
@ -55,7 +64,14 @@
}
elseif(is_string($data['created']))
{
$this->created = new DateTime($data['created']);
try
{
$this->created = new DateTime($data['created']);
}
catch (\DateMalformedStringException $e)
{
throw new InvalidArgumentException($e->getMessage(), $e->getCode(), $e);
}
}
else
{
@ -72,7 +88,14 @@
}
elseif(is_string($data['updated']))
{
$this->updated = new DateTime($data['updated']);
try
{
$this->updated = new DateTime($data['updated']);
}
catch (\DateMalformedStringException $e)
{
throw new InvalidArgumentException($e->getMessage(), $e->getCode(), $e);
}
}
else
{
@ -192,7 +215,7 @@
*/
public function isExternal(): bool
{
return $this->username === 'host' || $this->server !== Configuration::getInstanceConfiguration()->getDomain();
return $this->username === ReservedUsernames::HOST->value || $this->server !== Configuration::getInstanceConfiguration()->getDomain();
}
/**

View file

@ -251,15 +251,11 @@
// If-clause for handling the host peer, host peers are always enabled unless the fist clause is true
// in which case the host was blocked by this server.
if($clientRequest->getIdentifyAs()->getUsername() === ReservedUsernames::HOST->value)
if($clientRequest->getIdentifyAs()->getUsername() === ReservedUsernames::HOST->value && $registeredPeer === null)
{
// If the host is not registered, register it
if($registeredPeer === null)
{
$peerUuid = RegisteredPeerManager::createPeer(PeerAddress::fromAddress($clientRequest->getHeader(StandardHeaders::IDENTIFY_AS)));
RegisteredPeerManager::enablePeer($peerUuid);
$registeredPeer = RegisteredPeerManager::getPeer($peerUuid);
}
$peerUuid = RegisteredPeerManager::createPeer($clientRequest->getIdentifyAs());
RegisteredPeerManager::enablePeer($peerUuid);
$registeredPeer = RegisteredPeerManager::getPeer($peerUuid);
}
if($registeredPeer === null)
@ -272,7 +268,7 @@
}
// Register the peer if it is not already registered
$peerUuid = RegisteredPeerManager::createPeer(PeerAddress::fromAddress($clientRequest->getHeader(StandardHeaders::IDENTIFY_AS)));
$peerUuid = RegisteredPeerManager::createPeer($clientRequest->getIdentifyAs());
// Retrieve the peer object
$registeredPeer = RegisteredPeerManager::getPeer($peerUuid);
}