Improved check for the server base url
This commit is contained in:
parent
b42167f0ac
commit
953477de87
1 changed files with 53 additions and 6 deletions
|
@ -309,7 +309,18 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
|
|||
|
||||
logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
|
||||
|
||||
poco_check_server($server_url, $network);
|
||||
// We check the server url to be sure that it is a real one
|
||||
$server_url2 = poco_detect_server($profile_url);
|
||||
|
||||
// We are no sure that it is a correct URL. So we use it in the future
|
||||
if ($server_url2 != "") {
|
||||
$server_url = $server_url2;
|
||||
}
|
||||
|
||||
// The server URL doesn't seem to be valid, so we don't store it.
|
||||
if (!poco_check_server($server_url, $network)) {
|
||||
$server_url = "";
|
||||
}
|
||||
|
||||
$gcontact = array("url" => $profile_url,
|
||||
"addr" => $addr,
|
||||
|
@ -401,13 +412,47 @@ function poco_detect_server($profile) {
|
|||
|
||||
// Mastodon
|
||||
if ($server_url == "") {
|
||||
$red = preg_replace("=(https?://)(.*)/users/(.*)=ism", "$1$2", $profile);
|
||||
if ($red != $profile) {
|
||||
$server_url = $red;
|
||||
$mastodon = preg_replace("=(https?://)(.*)/users/(.*)=ism", "$1$2", $profile);
|
||||
if ($mastodon != $profile) {
|
||||
$server_url = $mastodon;
|
||||
$network = NETWORK_OSTATUS;
|
||||
}
|
||||
}
|
||||
|
||||
// Numeric OStatus variant
|
||||
if ($server_url == "") {
|
||||
$ostatus = preg_replace("=(https?://)(.*)/user/(.*)=ism", "$1$2", $profile);
|
||||
if ($ostatus != $profile) {
|
||||
$server_url = $ostatus;
|
||||
$network = NETWORK_OSTATUS;
|
||||
}
|
||||
}
|
||||
|
||||
// Wild guess
|
||||
if ($server_url == "") {
|
||||
$base = preg_replace("=(https?://)(.*?)/(.*)=ism", "$1$2", $profile);
|
||||
if (base != $profile) {
|
||||
$server_url = $base;
|
||||
$network = NETWORK_PHANTOM;
|
||||
}
|
||||
}
|
||||
|
||||
if ($server_url == "") {
|
||||
return "";
|
||||
}
|
||||
|
||||
$r = q("SELECT `id` FROM `gserver` WHERE `nurl` = '%s' AND `last_contact` > `last_failure`",
|
||||
dbesc(normalise_link($server_url)));
|
||||
if (dbm::is_result($r)) {
|
||||
return $server_url;
|
||||
}
|
||||
|
||||
// Fetch the host-meta to check if this really is a server
|
||||
$serverret = z_fetch_url($server_url."/.well-known/host-meta");
|
||||
if (!$serverret["success"]) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return $server_url;
|
||||
}
|
||||
|
||||
|
@ -424,10 +469,12 @@ function poco_last_updated($profile, $force = false) {
|
|||
q("UPDATE `gcontact` SET `created` = '%s' WHERE `nurl` = '%s'",
|
||||
dbesc(datetime_convert()), dbesc(normalise_link($profile)));
|
||||
|
||||
if ($gcontacts[0]["server_url"] != "")
|
||||
if ($gcontacts[0]["server_url"] != "") {
|
||||
$server_url = $gcontacts[0]["server_url"];
|
||||
else
|
||||
}
|
||||
if (($server_url == '') OR ($gcontacts[0]["server_url"] == $gcontacts[0]["nurl"])) {
|
||||
$server_url = poco_detect_server($profile);
|
||||
}
|
||||
|
||||
if (!in_array($gcontacts[0]["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_FEED, NETWORK_OSTATUS, ""))) {
|
||||
logger("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", LOGGER_DEBUG);
|
||||
|
|
Loading…
Reference in a new issue