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:
commit
7a9aba7674
1 changed files with 68 additions and 0 deletions
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue