diff --git a/include/Scrape.php b/include/Scrape.php index 84257f4811..542adc22ab 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -799,6 +799,9 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { if (substr($baseurl, -10) == "/index.php") $baseurl = str_replace("/index.php", "", $baseurl); + if ($network == "") + $network = NETWORK_PHANTOM; + $baseurl = rtrim($baseurl, "/"); if(strpos($url,'@') AND ($addr == "") AND ($network == NETWORK_DFRN)) @@ -846,7 +849,7 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) { } // Only store into the cache if the value seems to be valid - if (!in_array($result['network'], array(NETWORK_PHANTOM, ""))) { + if ($result['network'] != NETWORK_PHANTOM) { Cache::set("probe_url:".$mode.":".$original_url,serialize($result), CACHE_DAY); /// @todo temporary fix - we need a real contact update function that updates only changing fields diff --git a/include/gprobe.php b/include/gprobe.php index dfa9137d7d..bd8503835b 100644 --- a/include/gprobe.php +++ b/include/gprobe.php @@ -58,7 +58,7 @@ function gprobe_run(&$argv, &$argc){ if (is_null($result)) Cache::set("gprobe:".$urlparts["host"],serialize($arr)); - if (!in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM))) + if (!in_array($arr["network"], array(NETWORK_FEED, NETWORK_PHANTOM))) update_gcontact($arr); $r = q("SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1", diff --git a/include/socgraph.php b/include/socgraph.php index 402fee8593..b7d6f29344 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -1374,9 +1374,30 @@ function clean_contact_url($url) { if (isset($parts["path"])) $new_url .= $parts["path"]; + if ($new_url != $url) + logger("Cleaned contact url ".$url." to ".$new_url." - Called by: ".App::callstack(), LOGGER_DEBUG); + return $new_url; } +/** + * @brief Replace alternate OStatus user format with the primary one + * + * @param arr $contact contact array (called by reference) + */ +function fix_alternate_contact_address(&$contact) { + if (($contact["network"] == NETWORK_OSTATUS) AND poco_alternate_ostatus_url($contact["url"])) { + $data = probe_url($contact["url"]); + if ($contact["network"] == NETWORK_OSTATUS) { + logger("Fix primary url from ".$contact["url"]." to ".$data["url"]." - Called by: ".App::callstack(), LOGGER_DEBUG); + $contact["url"] = $data["url"]; + $contact["addr"] = $data["addr"]; + $contact["alias"] = $data["alias"]; + $contact["server_url"] = $data["baseurl"]; + } + } +} + /** * @brief Fetch the gcontact id, add an entry if not existed * @@ -1387,14 +1408,20 @@ function get_gcontact_id($contact) { $gcontact_id = 0; - if ($contact["network"] == NETWORK_PHANTOM) + if (in_array($contact["network"], array(NETWORK_PHANTOM))) { + logger("Invalid network for contact url ".$contact["url"]." - Called by: ".App::callstack(), LOGGER_DEBUG); return false; + } if ($contact["network"] == NETWORK_STATUSNET) $contact["network"] = NETWORK_OSTATUS; + // Replace alternate OStatus user format with the primary one + fix_alternate_contact_address($contact); + // Remove unwanted parts from the contact url (e.g. "?zrl=...") - $contact["url"] = clean_contact_url($contact["url"]); + if (in_array($contact["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) + $contact["url"] = clean_contact_url($contact["url"]); $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 2", dbesc(normalise_link($contact["url"]))); @@ -1477,6 +1504,9 @@ function update_gcontact($contact) { if ($contact["network"] == NETWORK_STATUSNET) $contact["network"] = NETWORK_OSTATUS; + // Replace alternate OStatus user format with the primary one + fix_alternate_contact_address($contact); + if (!isset($contact["updated"])) $contact["updated"] = datetime_convert(); @@ -1571,8 +1601,10 @@ function update_gcontact($contact) { function update_gcontact_from_probe($url) { $data = probe_url($url); - if ($data["network"] == NETWORK_PHANTOM) + if (in_array($data["network"], array(NETWORK_PHANTOM))) { + logger("Invalid network for contact url ".$data["url"]." - Called by: ".App::callstack(), LOGGER_DEBUG); return; + } update_gcontact($data); } diff --git a/mod/item.php b/mod/item.php index ffb486a7db..60e6931583 100644 --- a/mod/item.php +++ b/mod/item.php @@ -1147,7 +1147,7 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo if (!$r) { $probed = probe_url($name); - if (isset($probed["url"])) { + if ($result['network'] != NETWORK_PHANTOM) { update_gcontact($probed); $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", dbesc(normalise_link($probed["url"])));