Refactor SettingsUpdateInformationPrivacy and PeerInformationManager to ensure proper UUID validation and improve error handling for privacy state updates
https://github.com/nosial/Socialbox-PHP/issues/69
This commit is contained in:
parent
9c8945141c
commit
2967c87990
2 changed files with 16 additions and 8 deletions
|
@ -27,7 +27,7 @@
|
||||||
{
|
{
|
||||||
throw new MissingRpcArgumentException('field');
|
throw new MissingRpcArgumentException('field');
|
||||||
}
|
}
|
||||||
$fieldName = InformationFieldName::tryFrom(strtoupper($rpcRequest->getParameter('field')));
|
$fieldName = InformationFieldName::tryFrom(strtoupper((string)$rpcRequest->getParameter('field')));
|
||||||
if($fieldName === null)
|
if($fieldName === null)
|
||||||
{
|
{
|
||||||
throw new InvalidRpcArgumentException('field');
|
throw new InvalidRpcArgumentException('field');
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
throw new MissingRpcArgumentException('privacy');
|
throw new MissingRpcArgumentException('privacy');
|
||||||
}
|
}
|
||||||
|
|
||||||
$privacy = PrivacyState::tryFrom(strtoupper($rpcRequest->getParameter('privacy')));
|
$privacy = PrivacyState::tryFrom(strtoupper((string)$rpcRequest->getParameter('privacy')));
|
||||||
if($privacy === null)
|
if($privacy === null)
|
||||||
{
|
{
|
||||||
throw new InvalidRpcArgumentException('privacy');
|
throw new InvalidRpcArgumentException('privacy');
|
||||||
|
@ -47,20 +47,19 @@
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$peer = $request->getPeer();
|
$requestingPeer = $request->getPeer();
|
||||||
if(!PeerInformationManager::fieldExists($peer, $fieldName))
|
if(!PeerInformationManager::fieldExists($requestingPeer, $fieldName))
|
||||||
{
|
{
|
||||||
return $rpcRequest->produceResponse(false);
|
return $rpcRequest->produceResponse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
PeerInformationManager::updatePrivacyState($peer, $fieldName, $privacy);
|
PeerInformationManager::updatePrivacyState($requestingPeer, $fieldName, $privacy);
|
||||||
}
|
}
|
||||||
catch(DatabaseOperationException $e)
|
catch(DatabaseOperationException $e)
|
||||||
{
|
{
|
||||||
throw new StandardRpcException('Failed to update the information field', StandardError::INTERNAL_SERVER_ERROR, $e);
|
throw new StandardRpcException('Failed to update the information field', StandardError::INTERNAL_SERVER_ERROR, $e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return $rpcRequest->produceResponse(true);
|
return $rpcRequest->produceResponse(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
namespace Socialbox\Managers;
|
namespace Socialbox\Managers;
|
||||||
|
|
||||||
|
use InvalidArgumentException;
|
||||||
use PDOException;
|
use PDOException;
|
||||||
use Socialbox\Classes\Configuration;
|
use Socialbox\Classes\Configuration;
|
||||||
use Socialbox\Classes\Database;
|
use Socialbox\Classes\Database;
|
||||||
|
use Socialbox\Classes\Validator;
|
||||||
use Socialbox\Enums\PrivacyState;
|
use Socialbox\Enums\PrivacyState;
|
||||||
use Socialbox\Enums\Types\InformationFieldName;
|
use Socialbox\Enums\Types\InformationFieldName;
|
||||||
use Socialbox\Exceptions\DatabaseOperationException;
|
use Socialbox\Exceptions\DatabaseOperationException;
|
||||||
|
@ -113,10 +115,14 @@
|
||||||
{
|
{
|
||||||
$peerUuid = $peerUuid->getUuid();
|
$peerUuid = $peerUuid->getUuid();
|
||||||
}
|
}
|
||||||
|
elseif(!Validator::validateUuid($peerUuid))
|
||||||
|
{
|
||||||
|
throw new InvalidArgumentException('The given internal peer UUID is not a valid UUID V4');
|
||||||
|
}
|
||||||
|
|
||||||
if(!self::fieldExists($peerUuid, $property))
|
if(!self::fieldExists($peerUuid, $property))
|
||||||
{
|
{
|
||||||
throw new \InvalidArgumentException(sprintf('Cannot update privacy state, the requested property %s does not exist with %s', $property->value, $peerUuid));
|
throw new InvalidArgumentException(sprintf('Cannot update privacy state, the requested property %s does not exist with %s', $property->value, $peerUuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -149,6 +155,10 @@
|
||||||
{
|
{
|
||||||
$peerUuid = $peerUuid->getUuid();
|
$peerUuid = $peerUuid->getUuid();
|
||||||
}
|
}
|
||||||
|
elseif(!Validator::validateUuid($peerUuid))
|
||||||
|
{
|
||||||
|
throw new InvalidArgumentException('The given internal peer UUID is not a valid UUID V4');
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -253,7 +263,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
$results = [];
|
$results = [];
|
||||||
/** @var PrivacyState $privacyState */
|
|
||||||
foreach($privacyFilters as $privacyState)
|
foreach($privacyFilters as $privacyState)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
Loading…
Add table
Reference in a new issue