From aba9adf9169ba5c8f70df58d77a565c160a5d286 Mon Sep 17 00:00:00 2001 From: netkas Date: Fri, 24 Jan 2025 19:12:03 -0500 Subject: [PATCH] Added the method AddressBookGetContact and minor improvements in other implementations --- .../StandardMethods/AddressBookAddContact.php | 2 +- .../StandardMethods/AddressBookGetContact.php | 53 +++++++++++++++++++ .../AddressBookGetContacts.php | 7 +-- src/Socialbox/Socialbox.php | 8 ++- 4 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 src/Socialbox/Classes/StandardMethods/AddressBookGetContact.php diff --git a/src/Socialbox/Classes/StandardMethods/AddressBookAddContact.php b/src/Socialbox/Classes/StandardMethods/AddressBookAddContact.php index 39b70d6..70442ca 100644 --- a/src/Socialbox/Classes/StandardMethods/AddressBookAddContact.php +++ b/src/Socialbox/Classes/StandardMethods/AddressBookAddContact.php @@ -24,7 +24,7 @@ { if(!$rpcRequest->containsParameter('peer')) { - return $rpcRequest->produceError(StandardError::RPC_INVALID_ARGUMENTS, 'Missing required \'peer\' parameter'); + return $rpcRequest->produceError(StandardError::RPC_INVALID_ARGUMENTS, 'Missing required peer parameter'); } try diff --git a/src/Socialbox/Classes/StandardMethods/AddressBookGetContact.php b/src/Socialbox/Classes/StandardMethods/AddressBookGetContact.php new file mode 100644 index 0000000..8bb51d5 --- /dev/null +++ b/src/Socialbox/Classes/StandardMethods/AddressBookGetContact.php @@ -0,0 +1,53 @@ +containsParameter('peer')) + { + return $rpcRequest->produceError(StandardError::RPC_INVALID_ARGUMENTS, 'Missing required peer parameter'); + } + + try + { + $address = PeerAddress::fromAddress($rpcRequest->getParameter('peer')); + } + catch(InvalidArgumentException $e) + { + throw new StandardException('Invalid peer address', StandardError::RPC_INVALID_ARGUMENTS, $e); + } + + try + { + if(!ContactManager::isContact($request->getPeer(), $address)) + { + return $rpcRequest->produceError(StandardError::FORBIDDEN, 'Contact does not exist'); + } + + $contact = ContactManager::getContact($request->getPeer(), $address); + } + catch(DatabaseOperationException $e) + { + throw new StandardException('Failed to get contact', StandardError::INTERNAL_SERVER_ERROR, $e); + } + + return $rpcRequest->produceResponse($contact->toStandard()); + } + } \ No newline at end of file diff --git a/src/Socialbox/Classes/StandardMethods/AddressBookGetContacts.php b/src/Socialbox/Classes/StandardMethods/AddressBookGetContacts.php index 2abffb0..ed355d1 100644 --- a/src/Socialbox/Classes/StandardMethods/AddressBookGetContacts.php +++ b/src/Socialbox/Classes/StandardMethods/AddressBookGetContacts.php @@ -52,12 +52,7 @@ throw new StandardException('Failed to get contacts', StandardError::INTERNAL_SERVER_ERROR, $e); } - $results = []; - foreach($contacts as $contact) - { - $results[] = $contact->toStandard(); - } - return $rpcRequest->produceResponse($results); + return $rpcRequest->produceResponse(array_map(function($contact) {return $contact->toStandard();}, $contacts)); } } \ No newline at end of file diff --git a/src/Socialbox/Socialbox.php b/src/Socialbox/Socialbox.php index d4383c9..5d25cdf 100644 --- a/src/Socialbox/Socialbox.php +++ b/src/Socialbox/Socialbox.php @@ -761,10 +761,11 @@ * Resolves an external peer based on the given peer address or string identifier. * * @param PeerAddress|string $peerAddress The external peer address or string identifier to be resolved. + * @param PeerAddress|string|null $identifiedAs Optional. The peer address or string identifier by which the caller is identified * @return Peer The resolved external peer after synchronization. * @throws StandardException Thrown if there was an error with the resolution process */ - public static function resolvePeer(PeerAddress|string $peerAddress): Peer + public static function resolvePeer(PeerAddress|string $peerAddress, null|PeerAddress|string $identifiedAs=null): Peer { if(is_string($peerAddress)) { @@ -844,6 +845,11 @@ return $registeredPeer; } + private static function localResolvePeer(PeerAddress|string $peerAddress, null|PeerAddress|string $identifiedAs=null) + { + + } + /** * Retrieves the server information by assembling data from the configuration settings. *