[Database version 1499] Create new paradigm classes for Diaspora Contact
- Switch table fcontact for dcontact in views
This commit is contained in:
@@ -33,7 +33,6 @@ use Friendica\Database\DBA;
|
||||
use Friendica\DI;
|
||||
use Friendica\Model\Contact;
|
||||
use Friendica\Model\Conversation;
|
||||
use Friendica\Model\FContact;
|
||||
use Friendica\Model\GServer;
|
||||
use Friendica\Model\Item;
|
||||
use Friendica\Model\ItemURI;
|
||||
@@ -42,7 +41,7 @@ use Friendica\Model\Post;
|
||||
use Friendica\Model\Tag;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Network\HTTPClient\Client\HttpClientAccept;
|
||||
use Friendica\Network\HTTPException\InternalServerErrorException;
|
||||
use Friendica\Network\HTTPException;
|
||||
use Friendica\Network\Probe;
|
||||
use Friendica\Util\Crypto;
|
||||
use Friendica\Util\DateTimeFormat;
|
||||
@@ -455,9 +454,8 @@ class Diaspora
|
||||
}
|
||||
|
||||
// Once we have the author URI, go to the web and try to find their public key
|
||||
// (first this will look it up locally if it is in the fcontact cache)
|
||||
// (first this will look it up locally if it is in the diaspora-contact cache)
|
||||
// This will also convert diaspora public key from pkcs#1 to pkcs#8
|
||||
|
||||
Logger::notice('Fetching key for ' . $author);
|
||||
$key = self::key($author);
|
||||
if (!$key) {
|
||||
@@ -795,13 +793,11 @@ class Diaspora
|
||||
private static function key(WebFingerUri $uri): string
|
||||
{
|
||||
Logger::notice('Fetching diaspora key', ['handle' => $uri->getAddr(), 'callstack' => System::callstack(20)]);
|
||||
|
||||
$fcontact = FContact::getByURL($uri);
|
||||
if (!empty($fcontact['pubkey'])) {
|
||||
return $fcontact['pubkey'];
|
||||
try {
|
||||
return DI::dsprContact()->getByAddr($uri)->pubKey;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -822,15 +818,17 @@ class Diaspora
|
||||
/**
|
||||
* Checks if the given contact url does support ActivityPub
|
||||
*
|
||||
* @param string $url profile url
|
||||
* @param boolean $update true = always update, false = never update, null = update when not found or outdated
|
||||
* @param string $url profile url or WebFinger address
|
||||
* @param boolean|null $update true = always update, false = never update, null = update when not found or outdated
|
||||
* @return boolean
|
||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||
* @throws \ImagickException
|
||||
*/
|
||||
public static function isSupportedByContactUrl(string $url, $update = null)
|
||||
public static function isSupportedByContactUrl(string $url, ?bool $update = null): bool
|
||||
{
|
||||
return !empty(FContact::getByURL($url, $update));
|
||||
$contact = Contact::getByURL($url, $update);
|
||||
|
||||
return DI::dsprContact()->existsByUriId($contact['uri-id'] ?? 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -977,7 +975,7 @@ class Diaspora
|
||||
// 0 => '[url=/people/0123456789abcdef]Foo Bar[/url]'
|
||||
// 1 => '0123456789abcdef'
|
||||
// 2 => 'Foo Bar'
|
||||
$handle = FContact::getUrlByGuid($match[1]);
|
||||
$handle = DI::dsprContact()->getUrlByGuid($match[1]);
|
||||
|
||||
if ($handle) {
|
||||
$return = '@[url=' . $handle . ']' . $match[2] . '[/url]';
|
||||
@@ -1188,18 +1186,21 @@ class Diaspora
|
||||
$item = Post::selectFirst($fields, $condition);
|
||||
|
||||
if (!DBA::isResult($item)) {
|
||||
$person = FContact::getByURL($author);
|
||||
$result = self::storeByGuid($guid, $person['url'], false);
|
||||
try {
|
||||
$result = self::storeByGuid($guid, DI::dsprContact()->getByAddr($author)->url, false);
|
||||
|
||||
// We don't have an url for items that arrived at the public dispatcher
|
||||
if (!$result && !empty($contact['url'])) {
|
||||
$result = self::storeByGuid($guid, $contact['url'], false);
|
||||
}
|
||||
// We don't have an url for items that arrived at the public dispatcher
|
||||
if (!$result && !empty($contact['url'])) {
|
||||
$result = self::storeByGuid($guid, $contact['url'], false);
|
||||
}
|
||||
|
||||
if ($result) {
|
||||
Logger::info('Fetched missing item ' . $guid . ' - result: ' . $result);
|
||||
if ($result) {
|
||||
Logger::info('Fetched missing item ' . $guid . ' - result: ' . $result);
|
||||
|
||||
$item = Post::selectFirst($fields, $condition);
|
||||
$item = Post::selectFirst($fields, $condition);
|
||||
}
|
||||
} catch (HTTPException\NotFoundException $e) {
|
||||
Logger::notice('Unable to retrieve author details', ['author' => $author->getAddr()]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1422,16 +1423,14 @@ class Diaspora
|
||||
private static function getUriFromGuid(string $guid, WebFingerUri $person_uri = null): string
|
||||
{
|
||||
$item = Post::selectFirst(['uri'], ['guid' => $guid]);
|
||||
if (DBA::isResult($item)) {
|
||||
if ($item) {
|
||||
return $item['uri'];
|
||||
} elseif ($person_uri) {
|
||||
$person = FContact::getByURL($person_uri);
|
||||
|
||||
$parts = parse_url($person['url']);
|
||||
unset($parts['path']);
|
||||
$host_url = (string)Uri::fromParts($parts);
|
||||
|
||||
return $host_url . '/objects/' . $guid;
|
||||
try {
|
||||
return DI::dsprContact()->selectOneByAddr($person_uri)->baseurl . '/objects/' . $guid;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
@@ -1462,12 +1461,12 @@ class Diaspora
|
||||
continue;
|
||||
}
|
||||
|
||||
$person = FContact::getByURL($match[3]);
|
||||
if (empty($person)) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
$contact = DI::dsprContact()->getByUrl(new Uri($match[3]));
|
||||
Tag::storeByHash($uriid, $match[1], $contact->name ?: $contact->nick, $contact->url);
|
||||
} catch (\Throwable $e) {
|
||||
|
||||
Tag::storeByHash($uriid, $match[1], $person['name'] ?: $person['nick'], $person['url']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1523,14 +1522,15 @@ class Diaspora
|
||||
return false;
|
||||
}
|
||||
|
||||
$person = FContact::getByURL($author);
|
||||
if (!is_array($person)) {
|
||||
Logger::notice('Unable to find author details');
|
||||
try {
|
||||
$author_url = (string)DI::dsprContact()->getByAddr($author)->url;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
Logger::notice('Unable to find author details', ['author' => $author->getAddr()]);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fetch the contact id - if we know this contact
|
||||
$author_contact = self::authorContactByUrl($contact, $person['url'], $importer['uid']);
|
||||
$author_contact = self::authorContactByUrl($contact, $author_url, $importer['uid']);
|
||||
|
||||
$datarray = [];
|
||||
|
||||
@@ -1538,11 +1538,11 @@ class Diaspora
|
||||
$datarray['contact-id'] = $author_contact['cid'];
|
||||
$datarray['network'] = $author_contact['network'];
|
||||
|
||||
$datarray['author-link'] = $person['url'];
|
||||
$datarray['author-id'] = Contact::getIdForURL($person['url'], 0);
|
||||
$datarray['author-link'] = $author_url;
|
||||
$datarray['author-id'] = Contact::getIdForURL($author_url);
|
||||
|
||||
$datarray['owner-link'] = $contact['url'];
|
||||
$datarray['owner-id'] = Contact::getIdForURL($contact['url'], 0);
|
||||
$datarray['owner-id'] = Contact::getIdForURL($contact['url']);
|
||||
|
||||
// Will be overwritten for sharing accounts in Item::insert
|
||||
$datarray = self::setDirection($datarray, $direction);
|
||||
@@ -1569,7 +1569,7 @@ class Diaspora
|
||||
$datarray['plink'] = self::plink($author, $guid, $toplevel_parent_item['guid']);
|
||||
$body = Markdown::toBBCode($text);
|
||||
|
||||
$datarray['body'] = self::replacePeopleGuid($body, $person['url']);
|
||||
$datarray['body'] = self::replacePeopleGuid($body, $author_url);
|
||||
|
||||
self::storeMentions($datarray['uri-id'], $text);
|
||||
Tag::storeRawTagsFromBody($datarray['uri-id'], $datarray['body']);
|
||||
@@ -1633,6 +1633,12 @@ class Diaspora
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$msg_author_uri = WebFingerUri::fromString($msg_author_handle);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$msg_guid = XML::unescape($mesg->guid);
|
||||
$msg_conversation_guid = XML::unescape($mesg->conversation_guid);
|
||||
$msg_text = XML::unescape($mesg->text);
|
||||
@@ -1643,20 +1649,18 @@ class Diaspora
|
||||
return false;
|
||||
}
|
||||
|
||||
$body = Markdown::toBBCode($msg_text);
|
||||
|
||||
$person = FContact::getByURL($msg_author_handle);
|
||||
$msg_author = DI::dsprContact()->getByAddr($msg_author_uri);
|
||||
|
||||
return Mail::insert([
|
||||
'uid' => $importer['uid'],
|
||||
'guid' => $msg_guid,
|
||||
'convid' => $conversation['id'],
|
||||
'from-name' => $person['name'],
|
||||
'from-photo' => $person['photo'],
|
||||
'from-url' => $person['url'],
|
||||
'from-name' => $msg_author->name,
|
||||
'from-photo' => (string)$msg_author->photo,
|
||||
'from-url' => (string)$msg_author->url,
|
||||
'contact-id' => $contact['id'],
|
||||
'title' => $subject,
|
||||
'body' => $body,
|
||||
'body' => Markdown::toBBCode($msg_text),
|
||||
'uri' => $msg_author_handle . ':' . $msg_guid,
|
||||
'parent-uri' => $author_handle . ':' . $guid,
|
||||
'created' => $msg_created_at
|
||||
@@ -1770,14 +1774,15 @@ class Diaspora
|
||||
return false;
|
||||
}
|
||||
|
||||
$person = FContact::getByURL($author);
|
||||
if (!is_array($person)) {
|
||||
Logger::notice('Unable to find author details');
|
||||
try {
|
||||
$author_url = (string)DI::dsprContact()->getByAddr($author)->url;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
Logger::notice('Unable to find author details', ['author' => $author->getAddr()]);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fetch the contact id - if we know this contact
|
||||
$author_contact = self::authorContactByUrl($contact, $person['url'], $importer['uid']);
|
||||
$author_contact = self::authorContactByUrl($contact, $author_url, $importer['uid']);
|
||||
|
||||
// "positive" = "false" would be a Dislike - wich isn't currently supported by Diaspora
|
||||
// We would accept this anyhow.
|
||||
@@ -1797,8 +1802,8 @@ class Diaspora
|
||||
|
||||
$datarray = self::setDirection($datarray, $direction);
|
||||
|
||||
$datarray['owner-link'] = $datarray['author-link'] = $person['url'];
|
||||
$datarray['owner-id'] = $datarray['author-id'] = Contact::getIdForURL($person['url'], 0);
|
||||
$datarray['owner-link'] = $datarray['author-link'] = $author_url;
|
||||
$datarray['owner-id'] = $datarray['author-id'] = Contact::getIdForURL($author_url);
|
||||
|
||||
$datarray['guid'] = $guid;
|
||||
$datarray['uri'] = self::getUriFromGuid($guid, $author);
|
||||
@@ -1860,13 +1865,13 @@ class Diaspora
|
||||
*/
|
||||
private static function receiveMessage(array $importer, SimpleXMLElement $data): bool
|
||||
{
|
||||
$author = WebFingerUri::fromString(XML::unescape($data->author));
|
||||
$author_uri = WebFingerUri::fromString(XML::unescape($data->author));
|
||||
$guid = XML::unescape($data->guid);
|
||||
$conversation_guid = XML::unescape($data->conversation_guid);
|
||||
$text = XML::unescape($data->text);
|
||||
$created_at = DateTimeFormat::utc(XML::unescape($data->created_at));
|
||||
|
||||
$contact = self::allowedContactByHandle($importer, $author, true);
|
||||
$contact = self::allowedContactByHandle($importer, $author_uri, true);
|
||||
if (!$contact) {
|
||||
return false;
|
||||
}
|
||||
@@ -1882,29 +1887,30 @@ class Diaspora
|
||||
return false;
|
||||
}
|
||||
|
||||
$person = FContact::getByURL($author);
|
||||
if (!$person) {
|
||||
Logger::notice('Unable to find author details');
|
||||
try {
|
||||
$author = DI::dsprContact()->getByAddr($author_uri);
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
Logger::notice('Unable to find author details', ['author' => $author_uri->getAddr()]);
|
||||
return false;
|
||||
}
|
||||
|
||||
$body = Markdown::toBBCode($text);
|
||||
|
||||
$body = self::replacePeopleGuid($body, $person['url']);
|
||||
$body = self::replacePeopleGuid($body, $author->url);
|
||||
|
||||
return Mail::insert([
|
||||
'uid' => $importer['uid'],
|
||||
'guid' => $guid,
|
||||
'convid' => $conversation['id'],
|
||||
'from-name' => $person['name'],
|
||||
'from-photo' => $person['photo'],
|
||||
'from-url' => $person['url'],
|
||||
'from-name' => $author->name,
|
||||
'from-photo' => (string)$author->photo,
|
||||
'from-url' => (string)$author->url,
|
||||
'contact-id' => $contact['id'],
|
||||
'title' => $conversation['subject'],
|
||||
'body' => $body,
|
||||
'reply' => 1,
|
||||
'uri' => $author . ':' . $guid,
|
||||
'parent-uri' => $author . ':' . $conversation['guid'],
|
||||
'uri' => $author_uri . ':' . $guid,
|
||||
'parent-uri' => $author_uri . ':' . $conversation['guid'],
|
||||
'created' => $created_at
|
||||
]);
|
||||
}
|
||||
@@ -1953,13 +1959,14 @@ class Diaspora
|
||||
return false;
|
||||
}
|
||||
|
||||
$person = FContact::getByURL($author);
|
||||
if (!is_array($person)) {
|
||||
Logger::notice('Person not found: ' . $author);
|
||||
try {
|
||||
$author_url = (string)DI::dsprContact()->getByAddr($author)->url;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
Logger::notice('unable to find author details', ['author' => $author->getAddr()]);
|
||||
return false;
|
||||
}
|
||||
|
||||
$author_contact = self::authorContactByUrl($contact, $person['url'], $importer['uid']);
|
||||
$author_contact = self::authorContactByUrl($contact, $author_url, $importer['uid']);
|
||||
|
||||
// Store participation
|
||||
$datarray = [];
|
||||
@@ -1972,8 +1979,8 @@ class Diaspora
|
||||
|
||||
$datarray = self::setDirection($datarray, $direction);
|
||||
|
||||
$datarray['owner-link'] = $datarray['author-link'] = $person['url'];
|
||||
$datarray['owner-id'] = $datarray['author-id'] = Contact::getIdForURL($person['url'], 0);
|
||||
$datarray['owner-link'] = $datarray['author-link'] = $author_url;
|
||||
$datarray['owner-id'] = $datarray['author-id'] = Contact::getIdForURL($author_url);
|
||||
|
||||
$datarray['guid'] = $guid;
|
||||
$datarray['uri'] = self::getUriFromGuid($guid, $author);
|
||||
@@ -2233,22 +2240,24 @@ class Diaspora
|
||||
Logger::info("Author " . $author . " wants to listen to us.");
|
||||
}
|
||||
|
||||
$ret = FContact::getByURL($author);
|
||||
|
||||
if (!$ret || ($ret['network'] != Protocol::DIASPORA)) {
|
||||
Logger::notice("Cannot resolve diaspora handle " . $author . " for ".$recipient);
|
||||
try {
|
||||
$author_url = (string)DI::dsprContact()->getByAddr($author)->url;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
Logger::notice('Cannot resolve diaspora handle for recipient', ['author' => $author->getAddr(), 'recipient' => $recipient]);
|
||||
return false;
|
||||
}
|
||||
|
||||
$cid = Contact::getIdForURL($ret['url'], $importer['uid']);
|
||||
$cid = Contact::getIdForURL($author_url, $importer['uid']);
|
||||
if (!empty($cid)) {
|
||||
$contact = DBA::selectFirst('contact', [], ['id' => $cid, 'network' => Protocol::NATIVE_SUPPORT]);
|
||||
} else {
|
||||
$contact = [];
|
||||
}
|
||||
|
||||
$item = ['author-id' => Contact::getIdForURL($ret['url']),
|
||||
'author-link' => $ret['url']];
|
||||
$item = [
|
||||
'author-id' => Contact::getIdForURL($author_url),
|
||||
'author-link' => $author_url
|
||||
];
|
||||
|
||||
$result = Contact::addRelationship($importer, $contact, $item, false);
|
||||
if ($result === true) {
|
||||
@@ -2346,7 +2355,12 @@ class Diaspora
|
||||
$author = WebFingerUri::fromString(XML::unescape($data->author));
|
||||
$guid = XML::unescape($data->guid);
|
||||
$created_at = DateTimeFormat::utc(XML::unescape($data->created_at));
|
||||
$root_author = XML::unescape($data->root_author);
|
||||
try {
|
||||
$root_author = WebFingerUri::fromString(XML::unescape($data->root_author));
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$root_guid = XML::unescape($data->root_guid);
|
||||
/// @todo handle unprocessed property "provider_display_name"
|
||||
$public = XML::unescape($data->public);
|
||||
@@ -2365,8 +2379,9 @@ class Diaspora
|
||||
return true;
|
||||
}
|
||||
|
||||
$original_person = FContact::getByURL($root_author);
|
||||
if (!$original_person) {
|
||||
try {
|
||||
$original_person = DI::dsprContact()->getByAddr($root_author);
|
||||
} catch (HTTPException\NotFoundException $e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2394,7 +2409,7 @@ class Diaspora
|
||||
|
||||
$datarray = self::setDirection($datarray, $direction);
|
||||
|
||||
$datarray['quote-uri-id'] = self::getQuoteUriId($root_guid, $importer['uid'], $original_person['url']);
|
||||
$datarray['quote-uri-id'] = self::getQuoteUriId($root_guid, $importer['uid'], $original_person->url);
|
||||
if (empty($datarray['quote-uri-id'])) {
|
||||
return false;
|
||||
}
|
||||
@@ -2462,19 +2477,18 @@ class Diaspora
|
||||
*/
|
||||
private static function itemRetraction(array $importer, array $contact, SimpleXMLElement $data): bool
|
||||
{
|
||||
$author_handle = XML::unescape($data->author);
|
||||
$author_uri = WebFingerUri::fromString(XML::unescape($data->author));
|
||||
$target_guid = XML::unescape($data->target_guid);
|
||||
$target_type = XML::unescape($data->target_type);
|
||||
|
||||
$person = FContact::getByURL($author_handle);
|
||||
if (!is_array($person)) {
|
||||
Logger::notice('Unable to find author detail for ' . $author_handle);
|
||||
try {
|
||||
$author = DI::dsprContact()->getByAddr($author_uri);
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
Logger::notice('Unable to find details for author', ['author' => $author_uri->getAddr()]);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($contact['url'])) {
|
||||
$contact['url'] = $person['url'];
|
||||
}
|
||||
$contact_url = $contact['url'] ?? '' ?: (string)$author->url;
|
||||
|
||||
// Fetch items that are about to be deleted
|
||||
$fields = ['uid', 'id', 'parent', 'author-link', 'uri-id'];
|
||||
@@ -2502,8 +2516,8 @@ class Diaspora
|
||||
$parent = Post::selectFirst(['author-link'], ['id' => $item['parent']]);
|
||||
|
||||
// Only delete it if the parent author really fits
|
||||
if (!Strings::compareLink($parent['author-link'], $contact['url']) && !Strings::compareLink($item['author-link'], $contact['url'])) {
|
||||
Logger::info("Thread author " . $parent['author-link'] . " and item author " . $item['author-link'] . " don't fit to expected contact " . $contact['url']);
|
||||
if (!Strings::compareLink($parent['author-link'], $contact_url) && !Strings::compareLink($item['author-link'], $contact_url)) {
|
||||
Logger::info("Thread author " . $parent['author-link'] . " and item author " . $item['author-link'] . " don't fit to expected contact " . $contact_url);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -2968,13 +2982,13 @@ class Diaspora
|
||||
|
||||
$logid = Strings::getRandomHex(4);
|
||||
|
||||
// We always try to use the data from the fcontact table.
|
||||
// We always try to use the data from the diaspora-contact table.
|
||||
// This is important for transmitting data to Friendica servers.
|
||||
if (!empty($contact['addr'])) {
|
||||
$fcontact = FContact::getByURL($contact['addr']);
|
||||
if (!empty($fcontact)) {
|
||||
$dest_url = ($public_batch ? $fcontact['batch'] : $fcontact['notify']);
|
||||
}
|
||||
try {
|
||||
$target = DI::dsprContact()->getByAddr(WebFingerUri::fromString($contact['addr']));
|
||||
$dest_url = $public_batch ? $target->batch : $target->notify;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
|
||||
}
|
||||
|
||||
if (empty($dest_url)) {
|
||||
@@ -3043,18 +3057,19 @@ class Diaspora
|
||||
}
|
||||
|
||||
// When sending content to Friendica contacts using the Diaspora protocol
|
||||
// we have to fetch the public key from the fcontact.
|
||||
// we have to fetch the public key from the diaspora-contact.
|
||||
// This is due to the fact that legacy DFRN had unique keys for every contact.
|
||||
$pubkey = $contact['pubkey'];
|
||||
if (!empty($contact['addr'])) {
|
||||
$fcontact = FContact::getByURL($contact['addr']);
|
||||
if (!empty($fcontact)) {
|
||||
$pubkey = $fcontact['pubkey'];
|
||||
try {
|
||||
$pubkey = DI::dsprContact()->getByAddr(WebFingerUri::fromString($contact['addr']))->pubKey;
|
||||
} catch (HTTPException\NotFoundException|\InvalidArgumentException $e) {
|
||||
|
||||
}
|
||||
} else {
|
||||
// The "addr" field should always be filled.
|
||||
// If this isn't the case, it will raise a notice some lines later.
|
||||
// And in the log we will see where it came from and we can handle it there.
|
||||
// And in the log we will see where it came from, and we can handle it there.
|
||||
Logger::notice('Empty addr', ['contact' => $contact ?? [], 'callstack' => System::callstack(20)]);
|
||||
}
|
||||
|
||||
@@ -4038,6 +4053,8 @@ class Diaspora
|
||||
*
|
||||
* @param integer $parent_id
|
||||
* @return boolean
|
||||
* @throws InternalServerErrorException
|
||||
* @throws \ImagickException
|
||||
*/
|
||||
private static function parentSupportDiaspora(int $parent_id): bool
|
||||
{
|
||||
@@ -4047,7 +4064,7 @@ class Diaspora
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty(FContact::getByURL($parent_post['author-link'], false))) {
|
||||
if (!self::isSupportedByContactUrl($parent_post['author-link'], false)) {
|
||||
Logger::info('Parent author is no Diaspora contact.', ['parent-id' => $parent_id]);
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user