X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fostatus_subscribe.php;h=f4d5077c0ad7b4a379ebcdd014288066d9ed2806;hb=1d5206d594a76297f36ecbaa85ac1ef46ba57c1d;hp=e8ba144a1633a7b2e5d30d4a35ffb502096eab73;hpb=241ed9a9cd3254db0afe63c78f2c367b6f8a7a05;p=friendica.git diff --git a/mod/ostatus_subscribe.php b/mod/ostatus_subscribe.php index e8ba144a16..f4d5077c0a 100644 --- a/mod/ostatus_subscribe.php +++ b/mod/ostatus_subscribe.php @@ -1,93 +1,131 @@ . + * */ + use Friendica\App; -use Friendica\Core\L10n; -use Friendica\Core\PConfig; -use Friendica\Core\System; +use Friendica\Core\Protocol; +use Friendica\DI; +use Friendica\Model\APContact; use Friendica\Model\Contact; -use Friendica\Network\Probe; -use Friendica\Util\Network; - -function ostatus_subscribe_content(App $a) { +use Friendica\Protocol\ActivityPub; - if (! local_user()) { - notice(L10n::t('Permission denied.') . EOL); - goaway($_SESSION['return_url']); +function ostatus_subscribe_content(App $a) +{ + if (!local_user()) { + notice(DI::l10n()->t('Permission denied.')); + DI::baseUrl()->redirect('ostatus_subscribe'); // NOTREACHED } - $o = "

".L10n::t("Subscribing to OStatus contacts")."

"; + $o = '

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

'; $uid = local_user(); - $a = get_app(); - - $counter = intval($_REQUEST['counter']); + $counter = intval($_REQUEST['counter'] ?? 0); - if (PConfig::get($uid, "ostatus", "legacy_friends") == "") { + if (DI::pConfig()->get($uid, 'ostatus', 'legacy_friends') == '') { - if ($_REQUEST["url"] == "") { - PConfig::delete($uid, "ostatus", "legacy_contact"); - return $o.L10n::t("No contact provided."); + 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) { - PConfig::delete($uid, "ostatus", "legacy_contact"); - return $o.L10n::t("Couldn't fetch information for 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 - $data = Network::curl($api."statuses/friends.json?screen_name=".$contact["nick"]); - - if (!$data["success"]) { - PConfig::delete($uid, "ostatus", "legacy_contact"); - return $o.L10n::t("Couldn't fetch friends for contact."); + if ($contact['network'] == Protocol::OSTATUS) { + $api = $contact['baseurl'] . '/api/'; + + // Fetching friends + $curlResult = DI::httpClient()->get($api . 'statuses/friends.json?screen_name=' . $contact['nick']); + + 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('Unsupported network'); } - - PConfig::set($uid, "ostatus", "legacy_friends", $data["body"]); } - $friends = json_decode(PConfig::get($uid, "ostatus", "legacy_friends")); + $friends = json_decode(DI::pConfig()->get($uid, 'ostatus', 'legacy_friends')); + + if (empty($friends)) { + $friends = []; + } $total = sizeof($friends); if ($counter >= $total) { - $a->page['htmlhead'] = ''; - PConfig::delete($uid, "ostatus", "legacy_friends"); - PConfig::delete($uid, "ostatus", "legacy_contact"); - $o .= L10n::t("Done"); + DI::page()['htmlhead'] = ''; + DI::pConfig()->delete($uid, 'ostatus', 'legacy_friends'); + DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact'); + $o .= DI::l10n()->t('Done'); return $o; } $friend = $friends[$counter++]; - $url = $friend->statusnet_profile_url; + $url = $friend->statusnet_profile_url ?? $friend; - $o .= "

".$counter."/".$total.": ".$url; + $o .= '

' . $counter . '/' . $total . ': ' . $url; - $data = Probe::uri($url); - if ($data["network"] == NETWORK_OSTATUS) { - $result = Contact::createFromProbe($uid, $url, true, NETWORK_OSTATUS); - if ($result["success"]) { - $o .= " - ".L10n::t("success"); + $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 { - $o .= " - ".L10n::t("failed"); + $o .= ' - ' . DI::l10n()->t('failed'); } } else { - $o .= " - ".L10n::t("ignored"); + $o .= ' - ' . DI::l10n()->t('ignored'); } - $o .= "

"; + $o .= '

'; - $o .= "

".L10n::t("Keep this window open until done.")."

"; + $o .= '

' . DI::l10n()->t('Keep this window open until done.') . '

'; - $a->page['htmlhead'] = ''; + DI::page()['htmlhead'] = ''; return $o; }