Merge pull request #7612 from annando/issue-7610-2

Issue 7610-2: Read the "hide" status for non DFRN profiles
This commit is contained in:
Hypolite Petovan 2019-09-10 17:18:36 -04:00 committed by GitHub
commit 7a9aba7674
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -394,6 +394,10 @@ class Probe
$data['network'] = Protocol::PHANTOM; $data['network'] = Protocol::PHANTOM;
} }
if (!isset($data['hide']) && in_array($data['network'], Protocol::FEDERATED)) {
$data['hide'] = self::getHideStatus($data['url']);
}
$data = self::rearrangeData($data); $data = self::rearrangeData($data);
// Only store into the cache if the value seems to be valid // Only store into the cache if the value seems to be valid
@ -404,6 +408,70 @@ class Probe
return $data; return $data;
} }
/**
* Fetches the "hide" status from the profile
*
* @param string $url URL of the profile
*
* @return boolean "hide" status
*/
private static function getHideStatus($url)
{
$curlResult = Network::curl($url);
if (!$curlResult->isSuccess()) {
return false;
}
// If the file is too large then exit
if (defaults($curlResult->getInfo(), 'download_content_length', 0) > 1000000) {
return false;
}
// If it isn't a HTML file then exit
if (($curlResult->getContentType() != '') && !strstr(strtolower($curlResult->getContentType()), 'html')) {
return false;
}
$body = $curlResult->getBody();
$doc = new DOMDocument();
@$doc->loadHTML($body);
$xpath = new DOMXPath($doc);
$list = $xpath->query('//meta[@name]');
foreach ($list as $node) {
$meta_tag = [];
if ($node->attributes->length) {
foreach ($node->attributes as $attribute) {
$meta_tag[$attribute->name] = $attribute->value;
}
}
if (empty($meta_tag['content'])) {
continue;
}
$content = strtolower(trim($meta_tag['content']));
switch (strtolower(trim($meta_tag['name']))) {
case 'dfrn-global-visibility':
if ($content == 'false') {
return true;
}
break;
case 'robots':
if (strpos($content, 'noindex') !== false) {
return true;
}
break;
}
}
return false;
}
/** /**
* @brief Checks if a profile url should be OStatus but only provides partial information * @brief Checks if a profile url should be OStatus but only provides partial information
* *