From 605e7d55b3bd6f2e229ee21b26e0b82467d88dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Fri, 17 Jun 2022 10:44:13 +0200 Subject: [PATCH] Continued: - added more type-hints - some methods in Diaspora returned void but integer was documented so I changed it to -1 to have a proper type-hint --- src/Model/APContact.php | 6 +- src/Model/FContact.php | 10 +- src/Protocol/Diaspora.php | 238 +++++++++++++++++++++----------------- 3 files changed, 142 insertions(+), 112 deletions(-) diff --git a/src/Model/APContact.php b/src/Model/APContact.php index a93484861..d6f487740 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -48,7 +48,7 @@ class APContact * @param string $addr Address * @return array webfinger data */ - private static function fetchWebfingerData(string $addr) + private static function fetchWebfingerData(string $addr): array { $addr_parts = explode('@', $addr); if (count($addr_parts) != 2) { @@ -117,7 +117,7 @@ class APContact * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function getByURL(string $url, $update = null) + public static function getByURL(string $url, $update = null): array { if (empty($url) || Network::isUrlBlocked($url)) { Logger::info('Domain is blocked', ['url' => $url]); @@ -527,7 +527,7 @@ class APContact * @param string $url inbox url * @param boolean $shared Shared Inbox */ - private static function unarchiveInbox($url, $shared) + private static function unarchiveInbox(string $url, bool $shared) { if (empty($url)) { return; diff --git a/src/Model/FContact.php b/src/Model/FContact.php index 6812f5fd0..97b1e98ef 100644 --- a/src/Model/FContact.php +++ b/src/Model/FContact.php @@ -40,7 +40,7 @@ class FContact * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function getByURL($handle, $update = null) + public static function getByURL(string $handle, $update = null): array { $person = DBA::selectFirst('fcontact', [], ['network' => Protocol::DIASPORA, 'addr' => $handle]); if (!DBA::isResult($person)) { @@ -90,7 +90,7 @@ class FContact * @param array $arr The fcontact data * @throws \Exception */ - public static function updateFromProbeArray($arr) + public static function updateFromProbeArray(array $arr) { $uriid = ItemURI::insert(['uri' => $arr['url'], 'guid' => $arr['guid']]); @@ -122,12 +122,12 @@ class FContact * get a url (scheme://domain.tld/u/user) from a given Diaspora* * fcontact guid * - * @param mixed $fcontact_guid Hexadecimal string guid + * @param string $fcontact_guid Hexadecimal string guid * - * @return string the contact url or null + * @return string|null the contact url or null * @throws \Exception */ - public static function getUrlByGuid($fcontact_guid) + public static function getUrlByGuid(string $fcontact_guid) { Logger::info('fcontact', ['guid' => $fcontact_guid]); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 70fd0f1f8..36f511a6a 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -74,7 +74,7 @@ class Diaspora * @return array of relay servers * @throws \Exception */ - public static function participantsForThread(array $item, array $contacts) + public static function participantsForThread(array $item, array $contacts): array { if (!in_array($item['private'], [Item::PUBLIC, Item::UNLISTED]) || in_array($item["verb"], [Activity::FOLLOW, Activity::TAG])) { Logger::info('Item is private or a participation request. It will not be relayed', ['guid' => $item['guid'], 'private' => $item['private'], 'verb' => $item['verb']]); @@ -114,11 +114,11 @@ class Diaspora * * @param string $envelope The magic envelope * - * @return string verified data + * @return string|bool verified data or false on error * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function verifyMagicEnvelope($envelope) + private static function verifyMagicEnvelope(string $envelope) { $basedom = XML::parseString($envelope, true); @@ -183,7 +183,7 @@ class Diaspora * * @return string encrypted data */ - private static function aesEncrypt($key, $iv, $data) + private static function aesEncrypt(string $key, string $iv, string $data): string { return openssl_encrypt($data, 'aes-256-cbc', str_pad($key, 32, "\0"), OPENSSL_RAW_DATA, str_pad($iv, 16, "\0")); } @@ -197,7 +197,7 @@ class Diaspora * * @return string decrypted data */ - private static function aesDecrypt($key, $iv, $encrypted) + private static function aesDecrypt(string $key, string $iv, string $encrypted): string { return openssl_decrypt($encrypted, 'aes-256-cbc', str_pad($key, 32, "\0"), OPENSSL_RAW_DATA, str_pad($iv, 16, "\0")); } @@ -216,7 +216,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function decodeRaw(string $raw, string $privKey = '', bool $no_exit = false) + public static function decodeRaw(string $raw, string $privKey = '', bool $no_exit = false): array { $data = json_decode($raw); @@ -232,7 +232,7 @@ class Diaspora if (!is_object($j_outer_key_bundle)) { Logger::notice('Outer Salmon did not verify. Discarding.'); if ($no_exit) { - return false; + return []; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -251,7 +251,7 @@ class Diaspora if (!is_object($basedom)) { Logger::notice('Received data does not seem to be an XML. Discarding. '.$xml); if ($no_exit) { - return false; + return []; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -277,7 +277,7 @@ class Diaspora if ($author_addr == '') { Logger::notice('No author could be decoded. Discarding. Message: ' . $xml); if ($no_exit) { - return false; + return []; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -287,7 +287,7 @@ class Diaspora if ($key == '') { Logger::notice("Couldn't get a key for handle " . $author_addr . ". Discarding."); if ($no_exit) { - return false; + return []; } else { throw new \Friendica\Network\HTTPException\BadRequestException(); } @@ -321,14 +321,14 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function decode(string $xml, string $privKey = '') + public static function decode(string $xml, string $privKey = ''): array { $public = false; $basedom = XML::parseString($xml); if (!is_object($basedom)) { Logger::notice('XML is not parseable.'); - return false; + return []; } $children = $basedom->children('https://joindiaspora.com/protocol'); @@ -342,7 +342,7 @@ class Diaspora // This happens with posts from a relais if (empty($privKey)) { Logger::info('This is no private post in the old format'); - return false; + return []; } $encrypted_header = json_decode(base64_decode($children->encrypted_header)); @@ -457,11 +457,11 @@ class Diaspora * @param array $msg The post that will be dispatched * @param int $direction Indicates if the message had been fetched or pushed (self::PUSHED, self::FETCHED, self::FORCED_FETCH) * - * @return int The message id of the generated message, "true" or "false" if there was an error + * @return int|bool The message id of the generated message, "true" or "false" if there was an error * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function dispatchPublic($msg, int $direction) + public static function dispatchPublic(array $msg, int $direction) { $enabled = intval(DI::config()->get("system", "diaspora_enabled")); if (!$enabled) { @@ -488,11 +488,11 @@ class Diaspora * @param SimpleXMLElement $fields SimpleXML object that contains the message * @param int $direction Indicates if the message had been fetched or pushed (self::PUSHED, self::FETCHED, self::FORCED_FETCH) * - * @return int The message id of the generated message, "true" or "false" if there was an error + * @return int|bool The message id of the generated message, "true" or "false" if there was an error * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function dispatch(array $importer, $msg, SimpleXMLElement $fields = null, int $direction = self::PUSHED) + public static function dispatch(array $importer, array $msg, SimpleXMLElement $fields = null, int $direction = self::PUSHED) { // The sender is the handle of the contact that sent the message. // This will often be different with relayed messages (for example "like" and "comment") @@ -598,7 +598,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function validPosting($msg) + private static function validPosting(array $msg) { $data = XML::parseString($msg["message"]); @@ -748,15 +748,15 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function key($handle) + private static function key(string $handle): string { $handle = strval($handle); Logger::notice("Fetching diaspora key for: ".$handle); - $r = FContact::getByURL($handle); - if ($r) { - return $r["pubkey"]; + $fcontact = FContact::getByURL($handle); + if ($fcontact) { + return $fcontact["pubkey"]; } return ""; @@ -771,7 +771,7 @@ class Diaspora * @return string the handle * @throws \Exception */ - private static function handleFromContact($contact_id, $pcontact_id = 0) + private static function handleFromContact(int $contact_id, int $pcontact_id = 0): string { $handle = ''; @@ -804,7 +804,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function contactByHandle($uid, $handle) + private static function contactByHandle(int $uid, string $handle): array { return Contact::getByURL($handle, null, [], $uid); } @@ -818,7 +818,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function isSupportedByContactUrl($url, $update = null) + public static function isSupportedByContactUrl(string $url, $update = null) { return !empty(FContact::getByURL($url, $update)); } @@ -832,7 +832,7 @@ class Diaspora * * @return bool is the contact allowed to post? */ - private static function postAllow(array $importer, array $contact, $is_comment = false) + private static function postAllow(array $importer, array $contact, bool $is_comment = false): bool { /* * Perhaps we were already sharing with this person. Now they're sharing with us. @@ -878,10 +878,10 @@ class Diaspora * @param string $handle The checked handle in the format user@domain.tld * @param bool $is_comment Is the check for a comment? * - * @return array The contact data + * @return array|bool The contact data or false on error * @throws \Exception */ - private static function allowedContactByHandle(array $importer, $handle, $is_comment = false) + private static function allowedContactByHandle(array $importer, string $handle, bool $is_comment = false) { $contact = self::contactByHandle($importer["uid"], $handle); if (!$contact) { @@ -912,7 +912,7 @@ class Diaspora * @return int|bool message id if the message already was stored into the system - or false. * @throws \Exception */ - private static function messageExists($uid, $guid) + private static function messageExists(int $uid, string $guid) { $item = Post::selectFirst(['id'], ['uid' => $uid, 'guid' => $guid]); if (DBA::isResult($item)) { @@ -958,7 +958,7 @@ class Diaspora * * @return string the replaced string */ - public static function replacePeopleGuid($body, $author_link) + public static function replacePeopleGuid(string $body, string $author_link): string { $return = preg_replace_callback( "&\[url=/people/([^\[\]]*)\](.*)\[\/url\]&Usi", @@ -994,7 +994,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function fetchGuidSub($match, $item) + private static function fetchGuidSub(array $match, array $item) { if (!self::storeByGuid($match[1], $item["author-link"], true)) { self::storeByGuid($match[1], $item["owner-link"], true); @@ -1008,11 +1008,11 @@ class Diaspora * @param string $server The server address * @param bool $force Forced fetch * - * @return int the message id of the stored message or false + * @return int|bool the message id of the stored message or false * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function storeByGuid($guid, $server, $force) + private static function storeByGuid(string $guid, string $server, bool $force) { $serverparts = parse_url($server); @@ -1049,7 +1049,7 @@ class Diaspora * 'key' => The public key of the author * @throws \Exception */ - public static function message($guid, $server, $level = 0) + public static function message(string $guid, string $server, int $level = 0) { if ($level > 5) { return false; @@ -1119,12 +1119,13 @@ class Diaspora * Fetches an item with a given URL * * @param string $url the message url + * @param int $uid User id * - * @return int the message id of the stored message or false + * @return int|bool the message id of the stored message or false * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function fetchByURL($url, $uid = 0) + public static function fetchByURL(string $url, int $uid = 0) { // Check for Diaspora (and Friendica) typical paths if (!preg_match("=(https?://.+)/(?:posts|display|objects)/([a-zA-Z0-9-_@.:%]+[a-zA-Z0-9])=i", $url, $matches)) { @@ -1162,10 +1163,10 @@ class Diaspora * @param string $author The handle of the item * @param array $contact The contact of the item owner * - * @return array the item record + * @return array|bool the item record or false on failure * @throws \Exception */ - private static function parentItem($uid, $guid, $author, array $contact) + private static function parentItem(int $uid, string $guid, string $author, array $contact) { $fields = ['id', 'parent', 'body', 'wall', 'uri', 'guid', 'private', 'origin', 'author-name', 'author-link', 'author-avatar', 'gravity', @@ -1210,7 +1211,7 @@ class Diaspora * 'network' => network type * @throws \Exception */ - private static function authorContactByUrl($def_contact, $person, $uid) + private static function authorContactByUrl(array $def_contact, array $person, int $uid): array { $condition = ['nurl' => Strings::normaliseLink($person["url"]), 'uid' => $uid]; $contact = DBA::selectFirst('contact', ['id', 'network'], $condition); @@ -1232,9 +1233,9 @@ class Diaspora * * @return bool is it a hubzilla server? */ - private static function isHubzilla($url) + private static function isHubzilla(string $url): bool { - return(strstr($url, '/channel/')); + return strstr($url, '/channel/'); } /** @@ -1248,7 +1249,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function plink(string $addr, string $guid, string $parent_guid = '') + private static function plink(string $addr, string $guid, string $parent_guid = ''): string { $contact = Contact::getByURL($addr); if (empty($contact)) { @@ -1312,8 +1313,10 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveAccountMigration(array $importer, $data) + private static function receiveAccountMigration(array $importer, $data): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $old_handle = XML::unescape($data->author); $new_handle = XML::unescape($data->profile->author); $signature = XML::unescape($data->signature); @@ -1365,8 +1368,10 @@ class Diaspora * @return bool Success * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private static function receiveAccountDeletion($data) + private static function receiveAccountDeletion($data): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $contacts = DBA::select('contact', ['id'], ['addr' => $author]); @@ -1387,11 +1392,11 @@ class Diaspora * @param string $guid Message guid * @param boolean $onlyfound Only return uri when found in the database * - * @return string The constructed uri or the one from our database + * @return string The constructed uri or the one from our database or empty string on if $onlyfound is true * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function getUriFromGuid($author, $guid, $onlyfound = false) + private static function getUriFromGuid(string $author, string $guid, bool $onlyfound = false): string { $item = Post::selectFirst(['uri'], ['guid' => $guid]); if (DBA::isResult($item)) { @@ -1456,8 +1461,10 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveComment(array $importer, $sender, $data, $xml, int $direction) + private static function receiveComment(array $importer, string $sender, $data, string $xml, int $direction): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $guid = XML::unescape($data->guid); $parent_guid = XML::unescape($data->parent_guid); @@ -1593,8 +1600,10 @@ class Diaspora * @return bool "true" if it was successful * @throws \Exception */ - private static function receiveConversationMessage(array $importer, array $contact, $data, $msg, $mesg, $conversation) + private static function receiveConversationMessage(array $importer, array $contact, $data, array $msg, $mesg, array $conversation): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data).',mesg='.get_class($mesg)); $author = XML::unescape($data->author); $guid = XML::unescape($data->guid); $subject = XML::unescape($data->subject); @@ -1650,8 +1659,10 @@ class Diaspora * @return bool Success * @throws \Exception */ - private static function receiveConversation(array $importer, $msg, $data) + private static function receiveConversation(array $importer, array $msg, $data) { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $guid = XML::unescape($data->guid); $subject = XML::unescape($data->subject); @@ -1708,12 +1719,14 @@ class Diaspora * @param object $data The message object * @param int $direction Indicates if the message had been fetched or pushed (self::PUSHED, self::FETCHED, self::FORCED_FETCH) * - * @return int The message id of the generated like or "false" if there was an error + * @return bool Success or failure * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveLike(array $importer, $sender, $data, int $direction) + private static function receiveLike(array $importer, string $sender, $data, int $direction): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $guid = XML::unescape($data->guid); $parent_guid = XML::unescape($data->parent_guid); @@ -1832,8 +1845,10 @@ class Diaspora * @return bool Success? * @throws \Exception */ - private static function receiveMessage(array $importer, $data) + private static function receiveMessage(array $importer, $data): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $guid = XML::unescape($data->guid); $conversation_guid = XML::unescape($data->conversation_guid); @@ -1899,8 +1914,10 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveParticipation(array $importer, $data, int $direction) + private static function receiveParticipation(array $importer, $data, int $direction): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = strtolower(XML::unescape($data->author)); $guid = XML::unescape($data->guid); $parent_guid = XML::unescape($data->parent_guid); @@ -2044,8 +2061,10 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveProfile(array $importer, $data) + private static function receiveProfile(array $importer, $data): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = strtolower(XML::unescape($data->author)); $contact = self::contactByHandle($importer["uid"], $author); @@ -2145,8 +2164,10 @@ class Diaspora * @return bool Success * @throws \Exception */ - private static function receiveContactRequest(array $importer, $data) + private static function receiveContactRequest(array $importer, $data): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $recipient = XML::unescape($data->recipient); @@ -2233,7 +2254,7 @@ class Diaspora $contact_record = self::contactByHandle($importer['uid'], $author); if (!$contact_record) { Logger::info('unable to locate newly created contact record.'); - return; + return false; } $user = DBA::selectFirst('user', [], ['uid' => $importer['uid']]); @@ -2253,11 +2274,11 @@ class Diaspora * * @param string $guid message guid * @param string $orig_author handle of the original post - * @return array The fetched item + * @return array|bool The fetched item or false on failure * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function originalItem($guid, $orig_author) + public static function originalItem(string $guid, string $orig_author) { if (empty($guid)) { Logger::notice('Empty guid. Quitting.'); @@ -2333,7 +2354,7 @@ class Diaspora * @param string $guid GUID string of reshare action * @param string $author Author handle */ - private static function addReshareActivity($item, $parent_message_id, $guid, $author) + private static function addReshareActivity(array $item, int $parent_message_id, string $guid, string $author) { $parent = Post::selectFirst(['uri', 'guid'], ['id' => $parent_message_id]); @@ -2388,12 +2409,14 @@ class Diaspora * @param string $xml The original XML of the message * @param int $direction Indicates if the message had been fetched or pushed (self::PUSHED, self::FETCHED, self::FORCED_FETCH) * - * @return int the message id + * @return bool Success or failure * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveReshare(array $importer, $data, $xml, int $direction) + private static function receiveReshare(array $importer, $data, string $xml, int $direction): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $guid = XML::unescape($data->guid); $created_at = DateTimeFormat::utc(XML::unescape($data->created_at)); @@ -2512,8 +2535,10 @@ class Diaspora * @return bool success * @throws \Exception */ - private static function itemRetraction(array $importer, array $contact, $data) + private static function itemRetraction(array $importer, array $contact, $data): bool { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $author = XML::unescape($data->author); $target_guid = XML::unescape($data->target_guid); $target_type = XML::unescape($data->target_type); @@ -2578,8 +2603,10 @@ class Diaspora * @return bool Success * @throws \Exception */ - private static function receiveRetraction(array $importer, $sender, $data) + private static function receiveRetraction(array $importer, string $sender, $data) { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('data='.get_class($data)); $target_type = XML::unescape($data->target_type); $contact = self::contactByHandle($importer["uid"], $sender); @@ -2624,7 +2651,7 @@ class Diaspora * * @return boolean Is the message wanted? */ - private static function isSolicitedMessage(array $item, string $author, string $body, int $direction) + private static function isSolicitedMessage(array $item, string $author, string $body, int $direction): bool { $contact = Contact::getByURL($author); if (DBA::exists('contact', ["`nurl` = ? AND `uid` != ? AND `rel` IN (?, ?)", @@ -2656,6 +2683,8 @@ class Diaspora */ private static function storePhotoAsMedia(int $uriid, $photo) { + // @TODO Need to find object type, roland@f.haeder.net + Logger::debug('photo='.get_class($photo)); $data = []; $data['uri-id'] = $uriid; $data['type'] = Post\Media::IMAGE; @@ -2675,11 +2704,11 @@ class Diaspora * @param string $xml The original XML of the message * @param int $direction Indicates if the message had been fetched or pushed (self::PUSHED, self::FETCHED, self::FORCED_FETCH) * - * @return int The message id of the newly created item + * @return int|bool The message id of the newly created item or false on error * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveStatusMessage(array $importer, SimpleXMLElement $data, $xml, int $direction) + private static function receiveStatusMessage(array $importer, SimpleXMLElement $data, string $xml, int $direction) { $author = XML::unescape($data->author); $guid = XML::unescape($data->guid); @@ -2826,7 +2855,7 @@ class Diaspora * @return string the handle in the format user@domain.tld * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private static function myHandle(array $contact) + private static function myHandle(array $contact): string { if (!empty($contact["addr"])) { return $contact["addr"]; @@ -2856,7 +2885,7 @@ class Diaspora * @return string The encrypted data * @throws \Exception */ - public static function encodePrivateData($msg, array $user, array $contact, $prvkey, $pubkey) + public static function encodePrivateData(string $msg, array $user, array $contact, string $prvkey, string $pubkey): string { Logger::debug("Message: ".$msg); @@ -2897,7 +2926,7 @@ class Diaspora * @return string The envelope * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function buildMagicEnvelope($msg, array $user) + public static function buildMagicEnvelope(string $msg, array $user): string { $b64url_data = Strings::base64UrlEncode($msg); $data = str_replace(["\n", "\r", " ", "\t"], ["", "", "", ""], $b64url_data); @@ -2941,7 +2970,7 @@ class Diaspora * @return string The message that will be transmitted to other servers * @throws \Exception */ - public static function buildMessage($msg, array $user, array $contact, $prvkey, $pubkey, $public = false) + public static function buildMessage(string $msg, array $user, array $contact, string $prvkey, string $pubkey, bool $public = false): string { // The message is put into an envelope with the sender's signature $envelope = self::buildMagicEnvelope($msg, $user); @@ -2962,7 +2991,7 @@ class Diaspora * * @return string The signature */ - private static function signature($owner, $message) + private static function signature(array $owner, array $message): string { $sigmsg = $message; unset($sigmsg["author_signature"]); @@ -2986,7 +3015,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function transmit(array $owner, array $contact, $envelope, $public_batch, $guid = "") + private static function transmit(array $owner, array $contact, string $envelope, bool $public_batch, string $guid = ""): int { $enabled = intval(DI::config()->get("system", "diaspora_enabled")); if (!$enabled) { @@ -3039,7 +3068,7 @@ class Diaspora * * @return string The post XML */ - public static function buildPostXml($type, $message) + public static function buildPostXml(string $type, array $message): array { $data = [$type => $message]; @@ -3060,7 +3089,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function buildAndTransmit(array $owner, array $contact, $type, $message, $public_batch = false, $guid = "") + private static function buildAndTransmit(array $owner, array $contact, string $type, array $message, bool $public_batch = false, string $guid = "") { $msg = self::buildPostXml($type, $message); @@ -3103,18 +3132,18 @@ class Diaspora * @return int The result of the transmission * @throws \Exception */ - private static function sendParticipation(array $contact, array $item) + private static function sendParticipation(array $contact, array $item): int { // Don't send notifications for private postings if ($item['private'] == Item::PRIVATE) { - return; + return -1; } $cachekey = "diaspora:sendParticipation:".$item['guid']; $result = DI::cache()->get($cachekey); if (!is_null($result)) { - return; + return -1; } // Fetch some user id to have a valid handle to transmit the participation. @@ -3156,7 +3185,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function sendAccountMigration(array $owner, array $contact, $uid) + public static function sendAccountMigration(array $owner, array $contact, int $uid): int { $old_handle = DI::pConfig()->get($uid, 'system', 'previous_addr'); $profile = self::createProfileData($uid); @@ -3182,7 +3211,7 @@ class Diaspora * @return int The result of the transmission * @throws \Exception */ - public static function sendShare(array $owner, array $contact) + public static function sendShare(array $owner, array $contact): int { /** * @todo support the different possible combinations of "following" and "sharing" @@ -3226,7 +3255,7 @@ class Diaspora * @return int The result of the transmission * @throws \Exception */ - public static function sendUnshare(array $owner, array $contact) + public static function sendUnshare(array $owner, array $contact): int { $message = ["author" => self::myHandle($owner), "recipient" => $contact["addr"], @@ -3248,7 +3277,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function isReshare($body, $complete = true) + public static function isReshare(string $body, bool $complete = true) { $body = trim($body); @@ -3304,7 +3333,7 @@ class Diaspora * @return array with event data * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private static function buildEvent($event_id) + private static function buildEvent(string $event_id): array { $event = DBA::selectFirst('event', [], ['id' => $event_id]); if (!DBA::isResult($event)) { @@ -3484,7 +3513,7 @@ class Diaspora return $msg; } - private static function prependParentAuthorMention($body, $profile_url) + private static function prependParentAuthorMention(string $body, string $profile_url): string { $profile = Contact::getByURL($profile_url, false, ['addr', 'name']); if (!empty($profile['addr']) @@ -3509,7 +3538,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function sendStatus(array $item, array $owner, array $contact, $public_batch = false) + public static function sendStatus(array $item, array $owner, array $contact, bool $public_batch = false): int { $status = self::buildStatus($item, $owner); @@ -3522,7 +3551,7 @@ class Diaspora * @param array $item The item that will be exported * @param array $owner the array of the item owner * - * @return array The data for a "like" + * @return array|bool The data for a "like" or false on error * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ private static function constructLike(array $item, array $owner) @@ -3540,12 +3569,12 @@ class Diaspora $positive = "false"; } - return(["author" => self::myHandle($owner), + return ["author" => self::myHandle($owner), "guid" => $item["guid"], "parent_guid" => $parent["guid"], "parent_type" => $target_type, "positive" => $positive, - "author_signature" => ""]); + "author_signature" => ""]; } /** @@ -3554,7 +3583,7 @@ class Diaspora * @param array $item The item that will be exported * @param array $owner the array of the item owner * - * @return array The data for an "EventParticipation" + * @return array|bool The data for an "EventParticipation" or false on error * @throws \Exception */ private static function constructAttend(array $item, array $owner) @@ -3579,11 +3608,11 @@ class Diaspora return false; } - return(["author" => self::myHandle($owner), + return ["author" => self::myHandle($owner), "guid" => $item["guid"], "parent_guid" => $parent["guid"], "status" => $attend_answer, - "author_signature" => ""]); + "author_signature" => ""]; } /** @@ -3651,7 +3680,7 @@ class Diaspora DI::cache()->set($cachekey, $comment, Duration::QUARTER_HOUR); - return($comment); + return $comment; } /** @@ -3666,7 +3695,7 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function sendFollowup(array $item, array $owner, array $contact, $public_batch = false) + public static function sendFollowup(array $item, array $owner, array $contact, bool $public_batch = false): int { if (in_array($item['verb'], [Activity::ATTEND, Activity::ATTENDNO, Activity::ATTENDMAYBE])) { $message = self::constructAttend($item, $owner); @@ -3680,7 +3709,7 @@ class Diaspora } if (empty($message)) { - return false; + return -1; } $message["author_signature"] = self::signature($owner, $message); @@ -3699,7 +3728,7 @@ class Diaspora * @return int The result of the transmission * @throws \Exception */ - public static function sendRelay(array $item, array $owner, array $contact, $public_batch = false) + public static function sendRelay(array $item, array $owner, array $contact, bool $public_batch = false): int { if ($item["deleted"]) { return self::sendRetraction($item, $owner, $contact, $public_batch, true); @@ -3750,7 +3779,7 @@ class Diaspora * @return int The result of the transmission * @throws \Exception */ - public static function sendRetraction(array $item, array $owner, array $contact, $public_batch = false, $relay = false) + public static function sendRetraction(array $item, array $owner, array $contact, bool $public_batch = false, bool $relay = false): int { $itemaddr = self::handleFromContact($item["contact-id"], $item["author-id"]); @@ -3784,14 +3813,14 @@ class Diaspora * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */ - public static function sendMail(array $item, array $owner, array $contact) + public static function sendMail(array $item, array $owner, array $contact): int { $myaddr = self::myHandle($owner); $cnv = DBA::selectFirst('conv', [], ['id' => $item["convid"], 'uid' => $item["uid"]]); if (!DBA::isResult($cnv)) { Logger::notice("conversation not found."); - return; + return -1; } $body = BBCode::toMarkdown($item["body"]); @@ -3831,7 +3860,8 @@ class Diaspora * * @return array The array with "first" and "last" */ - public static function splitName($name) { + public static function splitName(string $name): array + { $name = trim($name); // Is the name longer than 64 characters? Then cut the rest of it. @@ -3888,7 +3918,7 @@ class Diaspora * @return array The profile data * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private static function createProfileData($uid) + private static function createProfileData(int $uid): array { $profile = DBA::selectFirst('owner-view', ['uid', 'addr', 'name', 'location', 'net-publish', 'dob', 'about', 'pub_keywords'], ['uid' => $uid]); if (!DBA::isResult($profile)) { @@ -3962,7 +3992,7 @@ class Diaspora * @return void * @throws \Exception */ - public static function sendProfile($uid, $recips = false) + public static function sendProfile(int $uid, bool $recips = false) { if (!$uid) { return; @@ -3996,10 +4026,10 @@ class Diaspora * @param integer $uid The user of that comment * @param array $item Item array * - * @return array Signed content + * @return array|bool Signed content or false on error * @throws \Exception */ - public static function createLikeSignature($uid, array $item) + public static function createLikeSignature(int $uid, array $item) { $owner = User::getOwnerDataById($uid); if (empty($owner)) { @@ -4026,7 +4056,7 @@ class Diaspora * * @param array $item Item array * - * @return array Signed content + * @return array|bool Signed content or false on error * @throws \Exception */ public static function createCommentSignature(array $item) @@ -4069,7 +4099,7 @@ class Diaspora return $message; } - public static function performReshare(int $UriId, int $uid) + public static function performReshare(int $UriId, int $uid): int { $fields = ['uri-id', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink']; $item = Post::selectFirst($fields, ['uri-id' => $UriId, 'uid' => [$uid, 0], 'private' => [Item::PUBLIC, Item::UNLISTED]]);