Merge pull request #2635 from annando/1606-probe-diaspora

Support for the case when the guid and public key will vanish from webfinger
This commit is contained in:
rabuzarus 2016-06-25 13:58:45 +02:00 committed by GitHub
commit 9c2446c53c

View File

@ -90,9 +90,18 @@ function scrape_dfrn($url, $dont_probe = false) {
if(attribute_contains($item->getAttribute('class'), 'vcard')) {
$level2 = $item->getElementsByTagName('*');
foreach($level2 as $x) {
if(attribute_contains($x->getAttribute('class'),'fn')) {
if(attribute_contains($x->getAttribute('class'),'uid'))
$ret['guid'] = $x->textContent;
if(attribute_contains($x->getAttribute('class'),'nickname'))
$ret['nickname'] = $x->textContent;
if(attribute_contains($x->getAttribute('class'),'fn'))
$ret['fn'] = $x->textContent;
}
if(attribute_contains($x->getAttribute('class'),'searchable'))
$ret['searchable'] = $x->textContent;
if(attribute_contains($x->getAttribute('class'),'key'))
$ret['key'] = $x->textContent;
if(attribute_contains($x->getAttribute('class'),'url'))
$ret['url'] = $x->textContent;
if((attribute_contains($x->getAttribute('class'),'photo'))
|| (attribute_contains($x->getAttribute('class'),'avatar'))) {
$size = intval($x->getAttribute('width'));
@ -102,9 +111,6 @@ function scrape_dfrn($url, $dont_probe = false) {
$largest_photo = (($size == 175) ? 9999 : $size);
}
}
if(attribute_contains($x->getAttribute('class'),'key')) {
$ret['key'] = $x->textContent;
}
}
}
}
@ -585,6 +591,11 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
// Diaspora will remove it from the webfinger somewhere in the future.
if (($hcard != "") AND ($pubkey == "")) {
$ret = scrape_dfrn(($hcard) ? $hcard : $dfrn, true);
if (isset($ret["guid"]))
$diaspora_guid = $ret["guid"];
if (isset($ret["url"]))
$diaspora_base = $ret["url"];
if (isset($ret["key"])) {
$hcard_key = $ret["key"];
if(strstr($hcard_key,'RSA '))
@ -593,8 +604,9 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
$pubkey = $hcard_key;
}
}
if($diaspora && $diaspora_base && $diaspora_guid) {
if(($network != "") && $diaspora_base && $diaspora_guid) {
$diaspora_notify = $diaspora_base.'receive/users/'.$diaspora_guid;
$diaspora = true;
if($mode == PROBE_DIASPORA || !$notify || ($notify == $diaspora_notify)) {
$notify = $diaspora_notify;
@ -782,7 +794,10 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
if(($network === NETWORK_FEED) && ($poll) && (! x($vcard,'fn')))
$vcard['fn'] = $url;
if (($notify != "") AND ($poll != "")) {
if ($diaspora_base != "")
$baseurl = $diaspora_base;
if (($baseurl == "") AND ($notify != "") AND ($poll != "")) {
$baseurl = matching_url(normalise_link($notify), normalise_link($poll));
$baseurl2 = matching_url($baseurl, normalise_link($profile));
@ -812,6 +827,7 @@ function probe_url($url, $mode = PROBE_NORMAL, $level = 1) {
$result['name'] = $vcard['fn'];
$result['nick'] = $vcard['nick'];
$result['guid'] = $diaspora_guid;
$result['url'] = $profile;
$result['addr'] = $addr;
$result['batch'] = $batch;