diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 758e85e9d..4549ba643 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -42,6 +42,7 @@ use Friendica\Model\Tag; use Friendica\Model\User; use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPException; +use Friendica\Network\HTTPException\BadRequestException; use Friendica\Network\Probe; use Friendica\Protocol\Delivery; use Friendica\Util\Crypto; @@ -267,7 +268,7 @@ class Diaspora if ($no_exit) { return false; } else { - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } } } else { @@ -281,7 +282,7 @@ class Diaspora if ($no_exit) { return false; } else { - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } } @@ -307,7 +308,7 @@ class Diaspora if ($no_exit) { return false; } else { - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } } @@ -322,7 +323,7 @@ class Diaspora if ($no_exit) { return false; } else { - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } } @@ -332,7 +333,7 @@ class Diaspora if ($no_exit) { return false; } else { - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } } @@ -424,7 +425,7 @@ class Diaspora if (!$base) { Logger::notice('unable to locate salmon data in xml'); - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } @@ -444,14 +445,11 @@ class Diaspora $encoding = $base->encoding; $alg = $base->alg; - $signed_data = $data . '.' . Strings::base64UrlEncode($type) . '.' . Strings::base64UrlEncode($encoding) . '.' . Strings::base64UrlEncode($alg); - // decode the data $data = Strings::base64UrlDecode($data); - if ($public) { $inner_decrypted = $data; } else { @@ -467,14 +465,14 @@ class Diaspora $key = self::key($author); if (!$key) { Logger::notice('Could not retrieve author key.'); - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } $verify = Crypto::rsaVerify($signed_data, $signature, $key); if (!$verify) { Logger::notice('Message did not verify. Discarding.'); - throw new \Friendica\Network\HTTPException\BadRequestException(); + throw new BadRequestException(); } Logger::info('Message verified.'); @@ -499,8 +497,7 @@ class Diaspora */ public static function dispatchPublic(array $msg, int $direction) { - $enabled = intval(DI::config()->get('system', 'diaspora_enabled')); - if (!$enabled) { + if (!DI::config()->get('system', 'diaspora_enabled')) { Logger::notice('Diaspora is disabled'); return false; } @@ -940,7 +937,7 @@ class Diaspora { $item = Post::selectFirst(['id'], ['uid' => $uid, 'guid' => $guid]); if (DBA::isResult($item)) { - Logger::notice('Message ' . $guid . ' already exists for user ' . $uid); + Logger::notice('Message already exists.', ['uid' => $uid, 'guid' => $guid, 'id' => $item['id']]); return $item['id']; } @@ -951,6 +948,7 @@ class Diaspora * Checks for links to posts in a message * * @param array $item The item array + * * @return void */ private static function fetchGuid(array $item) @@ -2569,19 +2567,21 @@ class Diaspora * * @param int $uriid * @param object $photo + * * @return void */ 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; - $data['url'] = XML::unescape($photo->remote_photo_path) . XML::unescape($photo->remote_photo_name); - $data['height'] = (int)XML::unescape($photo->height ?? 0); - $data['width'] = (int)XML::unescape($photo->width ?? 0); - $data['description'] = XML::unescape($photo->text ?? ''); + $data = [ + 'uri-id' => $uriid, + 'type' => Post\Media::IMAGE, + 'url' => XML::unescape($photo->remote_photo_path) . XML::unescape($photo->remote_photo_name), + 'height' => (int)XML::unescape($photo->height ?? 0), + 'width' => (int)XML::unescape($photo->width ?? 0), + 'description' => XML::unescape($photo->text ?? ''), + ]; Post\Media::insert($data); } @@ -2653,7 +2653,25 @@ class Diaspora $raw_body = $body = Markdown::toBBCode($text); - $datarray = []; + $datarray = [ + 'guid' => $guid, + 'uri-id' => ItemURI::insert(['uri' => $guid, 'guid' => $guid]), + 'uid' => $importer['uid'], + 'contact-id' => $contact['id'], + 'network' => Protocol::DIASPORA, + 'author-link' => $contact['url'], + 'author-id' => Contact::getIdForURL($contact['url'], 0), + 'verb' => Activity::POST, + 'gravity' => Item::GRAVITY_PARENT, + 'protocol' => Conversation::PARCEL_DIASPORA, + 'source' => $xml, + 'body' => self::replacePeopleGuid($body, $contact['url']), + 'raw-body' => self::replacePeopleGuid($raw_body, $contact['url']), + 'private' => (($public == 'false') ? Item::PRIVATE : Item::PUBLIC), + // Default is note (aka. comment), later below is being checked the real type + 'object-type' => Activity\ObjectType::NOTE, + 'post-type' => Item::PT_NOTE, + ]; $datarray['guid'] = $guid; $datarray['uri'] = $datarray['thr-parent'] = self::getUriFromGuid($guid, $author); @@ -2670,9 +2688,6 @@ class Diaspora } elseif ($data->poll) { $datarray['object-type'] = Activity\ObjectType::NOTE; $datarray['post-type'] = Item::PT_POLL; - } else { - $datarray['object-type'] = Activity\ObjectType::NOTE; - $datarray['post-type'] = Item::PT_NOTE; } /// @todo enable support for polls @@ -2684,27 +2699,6 @@ class Diaspora /// @todo enable support for events - $datarray['uid'] = $importer['uid']; - $datarray['contact-id'] = $contact['id']; - $datarray['network'] = Protocol::DIASPORA; - - $datarray['author-link'] = $contact['url']; - $datarray['author-id'] = Contact::getIdForURL($contact['url'], 0); - - $datarray['owner-link'] = $datarray['author-link']; - $datarray['owner-id'] = $datarray['author-id']; - - $datarray['verb'] = Activity::POST; - $datarray['gravity'] = Item::GRAVITY_PARENT; - - $datarray['protocol'] = Conversation::PARCEL_DIASPORA; - $datarray['source'] = $xml; - - $datarray = self::setDirection($datarray, $direction); - - $datarray['body'] = self::replacePeopleGuid($body, $contact['url']); - $datarray['raw-body'] = self::replacePeopleGuid($raw_body, $contact['url']); - self::storeMentions($datarray['uri-id'], $text); Tag::storeRawTagsFromBody($datarray['uri-id'], $datarray['body']); @@ -2718,7 +2712,6 @@ class Diaspora } $datarray['plink'] = self::plink($author, $guid); - $datarray['private'] = (($public == 'false') ? Item::PRIVATE : Item::PUBLIC); $datarray['changed'] = $datarray['created'] = $datarray['edited'] = $created_at; if (isset($address['address'])) {