Merge pull request #2467 from annando/1604-gcontact-cleanup

Some more checks that the gcontact table contains valid data
This commit is contained in:
Tobias Diekershoff 2016-04-20 14:14:35 +02:00
commit 8c8e635d2e
4 changed files with 41 additions and 6 deletions

View File

@ -799,6 +799,9 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
if (substr($baseurl, -10) == "/index.php") if (substr($baseurl, -10) == "/index.php")
$baseurl = str_replace("/index.php", "", $baseurl); $baseurl = str_replace("/index.php", "", $baseurl);
if ($network == "")
$network = NETWORK_PHANTOM;
$baseurl = rtrim($baseurl, "/"); $baseurl = rtrim($baseurl, "/");
if(strpos($url,'@') AND ($addr == "") AND ($network == NETWORK_DFRN)) 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 // 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); 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 /// @todo temporary fix - we need a real contact update function that updates only changing fields

View File

@ -58,7 +58,7 @@ function gprobe_run(&$argv, &$argc){
if (is_null($result)) if (is_null($result))
Cache::set("gprobe:".$urlparts["host"],serialize($arr)); 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); update_gcontact($arr);
$r = q("SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1", $r = q("SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1",

View File

@ -1374,9 +1374,30 @@ function clean_contact_url($url) {
if (isset($parts["path"])) if (isset($parts["path"]))
$new_url .= $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; 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 * @brief Fetch the gcontact id, add an entry if not existed
* *
@ -1387,14 +1408,20 @@ function get_gcontact_id($contact) {
$gcontact_id = 0; $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; return false;
}
if ($contact["network"] == NETWORK_STATUSNET) if ($contact["network"] == NETWORK_STATUSNET)
$contact["network"] = NETWORK_OSTATUS; $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=...") // 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", $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 2",
dbesc(normalise_link($contact["url"]))); dbesc(normalise_link($contact["url"])));
@ -1477,6 +1504,9 @@ function update_gcontact($contact) {
if ($contact["network"] == NETWORK_STATUSNET) if ($contact["network"] == NETWORK_STATUSNET)
$contact["network"] = NETWORK_OSTATUS; $contact["network"] = NETWORK_OSTATUS;
// Replace alternate OStatus user format with the primary one
fix_alternate_contact_address($contact);
if (!isset($contact["updated"])) if (!isset($contact["updated"]))
$contact["updated"] = datetime_convert(); $contact["updated"] = datetime_convert();
@ -1571,8 +1601,10 @@ function update_gcontact($contact) {
function update_gcontact_from_probe($url) { function update_gcontact_from_probe($url) {
$data = probe_url($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; return;
}
update_gcontact($data); update_gcontact($data);
} }

View File

@ -1147,7 +1147,7 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
if (!$r) { if (!$r) {
$probed = probe_url($name); $probed = probe_url($name);
if (isset($probed["url"])) { if ($result['network'] != NETWORK_PHANTOM) {
update_gcontact($probed); update_gcontact($probed);
$r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
dbesc(normalise_link($probed["url"]))); dbesc(normalise_link($probed["url"])));