Add AddressBookRevokeAllSignatures method for revoking all signing keys of a contact
https://github.com/nosial/Socialbox-PHP/issues/73
This commit is contained in:
parent
86f18b577a
commit
66d2cd7907
3 changed files with 97 additions and 2 deletions
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
namespace Socialbox\Classes\StandardMethods\AddressBook;
|
||||
|
||||
use Socialbox\Abstracts\Method;
|
||||
use Socialbox\Enums\StandardError;
|
||||
use Socialbox\Exceptions\DatabaseOperationException;
|
||||
use Socialbox\Exceptions\Standard\MissingRpcArgumentException;
|
||||
use Socialbox\Exceptions\Standard\StandardRpcException;
|
||||
use Socialbox\Interfaces\SerializableInterface;
|
||||
use Socialbox\Managers\ContactManager;
|
||||
use Socialbox\Objects\ClientRequest;
|
||||
use Socialbox\Objects\PeerAddress;
|
||||
use Socialbox\Objects\RpcRequest;
|
||||
|
||||
class AddressBookRevokeAllSignatures extends Method
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @noinspection DuplicatedCode
|
||||
*/
|
||||
public static function execute(ClientRequest $request, RpcRequest $rpcRequest): ?SerializableInterface
|
||||
{
|
||||
if(!$rpcRequest->containsParameter('peer'))
|
||||
{
|
||||
throw new MissingRpcArgumentException('peer');
|
||||
}
|
||||
|
||||
$peerAddress = PeerAddress::fromAddress($rpcRequest->getParameter('peer'));
|
||||
|
||||
try
|
||||
{
|
||||
// Check if the contact already exists
|
||||
$contact = ContactManager::getContact($request->getPeer(), $peerAddress);
|
||||
}
|
||||
catch (DatabaseOperationException $e)
|
||||
{
|
||||
throw new StandardRpcException('Failed to check contact state with calling peer', StandardError::INTERNAL_SERVER_ERROR, $e);
|
||||
}
|
||||
|
||||
if($contact === null)
|
||||
{
|
||||
return $rpcRequest->produceResponse(false);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ContactManager::removeAllContactSigningKeys($contact);
|
||||
}
|
||||
catch (DatabaseOperationException $e)
|
||||
{
|
||||
throw new StandardRpcException('Failed to remove all contact signatures', StandardError::INTERNAL_SERVER_ERROR, $e);
|
||||
}
|
||||
|
||||
// Return success
|
||||
return $rpcRequest->produceResponse(true);
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@
|
|||
use Socialbox\Classes\StandardMethods\AddressBook\AddressBookDeleteContact;
|
||||
use Socialbox\Classes\StandardMethods\AddressBook\AddressBookGetContact;
|
||||
use Socialbox\Classes\StandardMethods\AddressBook\AddressBookGetContacts;
|
||||
use Socialbox\Classes\StandardMethods\AddressBook\AddressBookRevokeAllSignatures;
|
||||
use Socialbox\Classes\StandardMethods\AddressBook\AddressBookRevokeSignature;
|
||||
use Socialbox\Classes\StandardMethods\AddressBook\AddressBookTrustSignature;
|
||||
use Socialbox\Classes\StandardMethods\AddressBook\AddressBookUpdateRelationship;
|
||||
|
@ -79,8 +80,9 @@
|
|||
case ADDRESS_BOOK_DELETE_CONTACT = 'addressBookDeleteContact';
|
||||
case ADDRESS_BOOK_GET_CONTACT = 'addressBookGetContact';
|
||||
case ADDRESS_BOOK_GET_CONTACTS = 'addressBookGetContacts';
|
||||
case ADDRESS_BOOK_TRUST_SIGNATURE = 'addressBookTrustSignature';
|
||||
case ADDRESS_BOOK_REVOKE_ALL_SIGNATURES = 'addressBookRevokeAllSignatures';
|
||||
case ADDRESS_BOOK_REVOKE_SIGNATURE = 'addressBookRevokeSignature';
|
||||
case ADDRESS_BOOK_TRUST_SIGNATURE = 'addressBookTrustSignature';
|
||||
case ADDRESS_BOOK_UPDATE_RELATIONSHIP = 'addressBookUpdateRelationship';
|
||||
|
||||
// Core Methods
|
||||
|
@ -203,8 +205,9 @@
|
|||
self::ADDRESS_BOOK_DELETE_CONTACT => AddressBookDeleteContact::execute($request, $rpcRequest),
|
||||
self::ADDRESS_BOOK_GET_CONTACT => AddressBookGetContact::execute($request, $rpcRequest),
|
||||
self::ADDRESS_BOOK_GET_CONTACTS => AddressBookGetContacts::execute($request, $rpcRequest),
|
||||
self::ADDRESS_BOOK_TRUST_SIGNATURE => AddressBookTrustSignature::execute($request, $rpcRequest),
|
||||
self::ADDRESS_BOOK_REVOKE_ALL_SIGNATURES => AddressBookRevokeAllSignatures::execute($request, $rpcRequest),
|
||||
self::ADDRESS_BOOK_REVOKE_SIGNATURE => AddressBookRevokeSignature::execute($request, $rpcRequest),
|
||||
self::ADDRESS_BOOK_TRUST_SIGNATURE => AddressBookTrustSignature::execute($request, $rpcRequest),
|
||||
self::ADDRESS_BOOK_UPDATE_RELATIONSHIP => AddressBookUpdateRelationship::execute($request, $rpcRequest),
|
||||
|
||||
// Core Methods
|
||||
|
|
|
@ -432,6 +432,14 @@
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a signing key from a contact in the database.
|
||||
*
|
||||
* @param string|ContactDatabaseRecord $contactUuid The unique identifier of the contact to remove the signing key from.
|
||||
* @param string $signatureUuid The UUID of the signing key to remove.
|
||||
* @return void
|
||||
* @throws DatabaseOperationException If the database query fails.
|
||||
*/
|
||||
public static function removeContactSigningKey(string|ContactDatabaseRecord $contactUuid, string $signatureUuid): void
|
||||
{
|
||||
if($contactUuid instanceof ContactDatabaseRecord)
|
||||
|
@ -452,6 +460,32 @@
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all signing keys for a contact from the database.
|
||||
*
|
||||
* @param string|ContactDatabaseRecord $contactUuid The unique identifier of the contact to remove all signing keys from.
|
||||
* @return void
|
||||
* @throws DatabaseOperationException If the database query fails.
|
||||
*/
|
||||
public static function removeAllContactSigningKeys(string|ContactDatabaseRecord $contactUuid): void
|
||||
{
|
||||
if($contactUuid instanceof ContactDatabaseRecord)
|
||||
{
|
||||
$contactUuid = $contactUuid->getUuid();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$statement = Database::getConnection()->prepare('DELETE FROM contacts_known_keys WHERE contact_uuid=:contact_uuid');
|
||||
$statement->bindParam(':contact_uuid', $contactUuid);
|
||||
$statement->execute();
|
||||
}
|
||||
catch(PDOException $e)
|
||||
{
|
||||
throw new DatabaseOperationException('Failed to remove all signing keys from a contact in the database', $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if a signing key UUID exists for a contact in the database.
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue