- $a = get_app();
-
- $counter = intval($_REQUEST['counter']);
-
- if (get_pconfig($uid, "ostatus", "legacy_friends") == "") {
-
- if ($_REQUEST["url"] == "")
- return $o.t("No contact provided.");
-
- $contact = probe_url($_REQUEST["url"]);
-
- if (!$contact)
- return $o.t("Couldn't fetch information for contact.");
-
- $api = $contact["baseurl"]."/api/";
-
- // Fetching friends
- $data = z_fetch_url($api."statuses/friends.json?screen_name=".$contact["nick"]);
+ $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 = Contact::getByURL($_REQUEST['url']);
+ if (!$contact) {
+ DI::pConfig()->delete($uid, 'ostatus', 'legacy_contact');
+ return $o . DI::l10n()->t('Couldn\'t fetch information 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');
+ }
+ }