X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=mod%2Fostatus_subscribe.php;h=31564ad32e808d002fc6b45a587744d89faacc28;hb=bfe68702db90271e4e2c79c4ddefd4567b616989;hp=e5a3f1e9b44c12fbb019f2bfff71be0a2ebac540;hpb=1bc4b2e0788ac11d3b377013b410f2250fff68aa;p=friendica.git diff --git a/mod/ostatus_subscribe.php b/mod/ostatus_subscribe.php index e5a3f1e9b4..31564ad32e 100644 --- a/mod/ostatus_subscribe.php +++ b/mod/ostatus_subscribe.php @@ -1,54 +1,91 @@ . + * */ use Friendica\App; use Friendica\Core\Protocol; +use Friendica\Core\Session; use Friendica\DI; +use Friendica\Model\APContact; use Friendica\Model\Contact; -use Friendica\Network\Probe; -use Friendica\Util\Network; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; +use Friendica\Protocol\ActivityPub; -function ostatus_subscribe_content(App $a) +function ostatus_subscribe_content(App $a): string { - if (!local_user()) { - notice(DI::l10n()->t('Permission denied.') . EOL); + if (!DI::userSession()->getLocalUserId()) { + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); DI::baseUrl()->redirect('ostatus_subscribe'); // NOTREACHED } - $o = '

' . DI::l10n()->t('Subscribing to OStatus contacts') . '

'; + $o = '

' . DI::l10n()->t('Subscribing to contacts') . '

'; - $uid = local_user(); + $uid = DI::userSession()->getLocalUserId(); - $counter = intval($_REQUEST['counter']); + $counter = intval($_REQUEST['counter'] ?? 0); if (DI::pConfig()->get($uid, 'ostatus', 'legacy_friends') == '') { - if ($_REQUEST['url'] == '') { DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); return $o . DI::l10n()->t('No contact provided.'); } - $contact = Probe::uri($_REQUEST['url']); - + $contact = Contact::getByURL($_REQUEST['url']); if (!$contact) { DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); return $o . DI::l10n()->t('Couldn\'t fetch information for contact.'); } - $api = $contact['baseurl'] . '/api/'; - - // Fetching friends - $curlResult = Network::curl($api . 'statuses/friends.json?screen_name=' . $contact['nick']); - - if (!$curlResult->isSuccess()) { + if ($contact['network'] == Protocol::OSTATUS) { + $api = $contact['baseurl'] . '/api/'; + + // Fetching friends + $curlResult = DI::httpClient()->get($api . 'statuses/friends.json?screen_name=' . $contact['nick'], HttpClientAccept::JSON); + + if (!$curlResult->isSuccess()) { + DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); + return $o . DI::l10n()->t('Couldn\'t fetch friends for contact.'); + } + + $friends = $curlResult->getBody(); + if (empty($friends)) { + DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); + return $o . DI::l10n()->t('Couldn\'t fetch following contacts.'); + } + DI::pConfig()->set($uid, 'ostatus', 'legacy_friends', $friends); + } elseif ($apcontact = APContact::getByURL($contact['url'])) { + if (empty($apcontact['following'])) { + DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); + return $o . DI::l10n()->t('Couldn\'t fetch remote profile.'); + } + $followings = ActivityPub::fetchItems($apcontact['following']); + if (empty($followings)) { + DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); + return $o . DI::l10n()->t('Couldn\'t fetch following contacts.'); + } + DI::pConfig()->set($uid, 'ostatus', 'legacy_friends', json_encode($followings)); + } else { DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); - return $o . DI::l10n()->t('Couldn\'t fetch friends for contact.'); + return $o . DI::l10n()->t('Unsupported network'); } - - DI::pConfig()->set($uid, 'ostatus', 'legacy_friends', $curlResult->getBody()); } $friends = json_decode(DI::pConfig()->get($uid, 'ostatus', 'legacy_friends')); @@ -69,13 +106,13 @@ function ostatus_subscribe_content(App $a) $friend = $friends[$counter++]; - $url = $friend->statusnet_profile_url; + $url = $friend->statusnet_profile_url ?? $friend; $o .= '

' . $counter . '/' . $total . ': ' . $url; - $probed = Probe::uri($url); - if ($probed['network'] == Protocol::OSTATUS) { - $result = Contact::createFromProbe($uid, $url, true, Protocol::OSTATUS); + $probed = Contact::getByURL($url); + if (in_array($probed['network'], Protocol::FEDERATED)) { + $result = Contact::createFromProbeForUser($a->getLoggedInUserId(), $probed['url']); if ($result['success']) { $o .= ' - ' . DI::l10n()->t('success'); } else {