fix several probe related issues

This commit is contained in:
Friendika 2011-08-17 23:01:44 -07:00
parent 37fc7324b7
commit 9634287839
6 changed files with 102 additions and 59 deletions

View File

@ -803,7 +803,11 @@ function profile_load(&$a, $nickname, $profile = 0) {
if(! (x($a->page,'aside'))) if(! (x($a->page,'aside')))
$a->page['aside'] = ''; $a->page['aside'] = '';
$a->page['aside'] .= profile_sidebar($a->profile); $block = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
$a->page['aside'] .= profile_sidebar($a->profile, $block);
if(! $block)
$a->page['aside'] .= contact_block(); $a->page['aside'] .= contact_block();
return; return;
@ -827,7 +831,7 @@ function profile_load(&$a, $nickname, $profile = 0) {
if(! function_exists('profile_sidebar')) { if(! function_exists('profile_sidebar')) {
function profile_sidebar($profile) { function profile_sidebar($profile, $block = 0) {
$a = get_app(); $a = get_app();
@ -846,10 +850,9 @@ function profile_sidebar($profile) {
$tabs = ''; $tabs = '';
$photo = '<div id="profile-photo-wrapper"><img class="photo" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>'; $photo = '<div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>';
// don't show connect link to yourself // don't show connect link to yourself
$connect = (($profile['uid'] != local_user()) ? '<li><a id="dfrn-request-link" href="dfrn_request/' . $profile['nickname'] . '">' . t('Connect') . '</a></li>' : ''); $connect = (($profile['uid'] != local_user()) ? '<li><a id="dfrn-request-link" href="dfrn_request/' . $profile['nickname'] . '">' . t('Connect') . '</a></li>' : '');
// don't show connect link to authenticated visitors either // don't show connect link to authenticated visitors either
@ -877,6 +880,7 @@ function profile_sidebar($profile) {
} }
$gender = ((x($profile,'gender') == 1) ? '<div class="mf"><span class="gender-label">' . t('Gender:') . '</span> <span class="x-gender">' . $profile['gender'] . '</span></div><div class="profile-clear"></div>' : ''); $gender = ((x($profile,'gender') == 1) ? '<div class="mf"><span class="gender-label">' . t('Gender:') . '</span> <span class="x-gender">' . $profile['gender'] . '</span></div><div class="profile-clear"></div>' : '');
$pubkey = ((x($profile,'pubkey') == 1) ? '<div class="key" style="display:none;">' . $profile['pubkey'] . '</div>' : ''); $pubkey = ((x($profile,'pubkey') == 1) ? '<div class="key" style="display:none;">' . $profile['pubkey'] . '</div>' : '');
@ -885,13 +889,13 @@ function profile_sidebar($profile) {
$homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div><div class="profile-clear"></div>' : ''); $homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div><div class="profile-clear"></div>' : '');
if($profile['hidewall'] && (! local_user()) && (! remote_user())) { if(($profile['hidewall'] || $block) && (! local_user()) && (! remote_user())) {
$location = $gender = $marital = $homepage = ''; $location = $pdesc = $connect = $gender = $marital = $homepage = '';
} }
$podloc = $a->get_baseurl(); $podloc = $a->get_baseurl();
$searchable = (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' ); $searchable = (($profile['publish'] && $profile['net-publish']) ? 'true' : 'false' );
$nickname = $profile['nick']; $nickname = $profile['nickname'];
$photo300 = $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg'; $photo300 = $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg';
$photo100 = $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg'; $photo100 = $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg';
$photo50 = $a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg'; $photo50 = $a->get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg';
@ -902,13 +906,19 @@ function profile_sidebar($profile) {
<dl class='entity_nickname'> <dl class='entity_nickname'>
<dt>Nickname</dt> <dt>Nickname</dt>
<dd> <dd>
<a class="nickname url uid" href="$podloc" rel="me">$nickname</a> <a class="nickname url uid" href="$podloc/" rel="me">$nickname</a>
</dd>
</dl>
<dl class='entity_fn'>
<dt>Full name</dt>
<dd>
<span class='fn'>$fullname</span>
</dd> </dd>
</dl> </dl>
<dl class="entity_url"> <dl class="entity_url">
<dt>URL</dt> <dt>URL</dt>
<dd> <dd>
<a class="url" href="$podloc" id="pod_location" rel="me">$podloc</a> <a class="url" href="$podloc/" id="pod_location" rel="me">$podloc/</a>
</dd> </dd>
</dl> </dl>
<dl class="entity_photo"> <dl class="entity_photo">

View File

@ -44,8 +44,9 @@ function scrape_dfrn($url) {
$x = $item->getAttribute('rel'); $x = $item->getAttribute('rel');
if(($x === 'alternate') && ($item->getAttribute('type') === 'application/atom+xml')) if(($x === 'alternate') && ($item->getAttribute('type') === 'application/atom+xml'))
$ret['feed_atom'] = $item->getAttribute('href'); $ret['feed_atom'] = $item->getAttribute('href');
if(substr($x,0,5) == "dfrn-") if(substr($x,0,5) == "dfrn-") {
$ret[$x] = $item->getAttribute('href'); $ret[$x] = $item->getAttribute('href');
}
if($x === 'lrdd') { if($x === 'lrdd') {
$decoded = urldecode($item->getAttribute('href')); $decoded = urldecode($item->getAttribute('href'));
if(preg_match('/acct:([^@]*)@/',$decoded,$matches)) if(preg_match('/acct:([^@]*)@/',$decoded,$matches))
@ -55,20 +56,31 @@ function scrape_dfrn($url) {
// Pull out hCard profile elements // Pull out hCard profile elements
$largest_photo = 0;
$items = $dom->getElementsByTagName('*'); $items = $dom->getElementsByTagName('*');
foreach($items as $item) { foreach($items as $item) {
if(attribute_contains($item->getAttribute('class'), 'vcard')) { if(attribute_contains($item->getAttribute('class'), 'vcard')) {
$level2 = $item->getElementsByTagName('*'); $level2 = $item->getElementsByTagName('*');
foreach($level2 as $x) { foreach($level2 as $x) {
if(attribute_contains($x->getAttribute('class'),'fn')) if(attribute_contains($x->getAttribute('class'),'fn')) {
$ret['fn'] = $x->textContent; $ret['fn'] = $x->textContent;
if(attribute_contains($x->getAttribute('class'),'photo')) }
if((attribute_contains($x->getAttribute('class'),'photo'))
|| (attribute_contains($x->getAttribute('class'),'avatar'))) {
$size = intval($x->getAttribute('width'));
// dfrn prefers 175, so if we find this, we set largest_size so it can't be topped.
if(($size > $largest_photo) || ($size == 175) || (! $largest_photo)) {
$ret['photo'] = $x->getAttribute('src'); $ret['photo'] = $x->getAttribute('src');
if(attribute_contains($x->getAttribute('class'),'key')) $largest_photo = (($size == 175) ? 9999 : $size);
}
}
if(attribute_contains($x->getAttribute('class'),'key')) {
$ret['key'] = $x->textContent; $ret['key'] = $x->textContent;
} }
} }
} }
}
return $ret; return $ret;
}} }}
@ -190,11 +202,12 @@ function scrape_vcard($url) {
} }
} }
if((attribute_contains($x->getAttribute('class'),'nickname')) if((attribute_contains($x->getAttribute('class'),'nickname'))
|| (attribute_contains($x->getAttribute('class'),'uid'))) || (attribute_contains($x->getAttribute('class'),'uid'))) {
$ret['nick'] = $x->textContent; $ret['nick'] = $x->textContent;
} }
} }
} }
}
return $ret; return $ret;
}} }}
@ -288,8 +301,10 @@ function scrape_feed($url) {
return $ret; return $ret;
}} }}
define ( 'PROBE_NORMAL', 0);
define ( 'PROBE_DIASPORA', 1);
function probe_url($url) { function probe_url($url, $mode = PROBE_NORMAL) {
require_once('include/email.php'); require_once('include/email.php');
$result = array(); $result = array();
@ -366,7 +381,7 @@ function probe_url($url) {
} }
} }
} }
else { elseif($mode == PROBE_NORMAL) {
// Check email // Check email
@ -411,6 +426,7 @@ function probe_url($url) {
} }
} }
if($mode == PROBE_NORMAL) {
if(strlen($zot)) { if(strlen($zot)) {
$s = fetch_url($zot); $s = fetch_url($zot);
if($s) { if($s) {
@ -438,10 +454,17 @@ function probe_url($url) {
$confirm = $ret['dfrn-confirm']; $confirm = $ret['dfrn-confirm'];
$notify = $ret['dfrn-notify']; $notify = $ret['dfrn-notify'];
$poll = $ret['dfrn-poll']; $poll = $ret['dfrn-poll'];
$vcard = array();
$vcard['fn'] = $ret['fn'];
$vcard['nick'] = $ret['nick'];
$vcard['photo'] = $ret['photo'];
}
} }
} }
if($diaspora && $diaspora_base && $diaspora_guid) { if($diaspora && $diaspora_base && $diaspora_guid) {
if($mode == PROBE_DIASPORA || ! $notify)
$notify = $diaspora_base . 'receive/post/' . $diaspora_guid; $notify = $diaspora_base . 'receive/post/' . $diaspora_guid;
if(strpos($url,'@')) if(strpos($url,'@'))
$addr = str_replace('acct:', '', $url); $addr = str_replace('acct:', '', $url);
@ -454,7 +477,7 @@ function probe_url($url) {
$network = NETWORK_OSTATUS; $network = NETWORK_OSTATUS;
$priority = 0; $priority = 0;
if($hcard) { if($hcard && ! $vcard) {
$vcard = scrape_vcard($hcard); $vcard = scrape_vcard($hcard);
// Google doesn't use absolute url in profile photos // Google doesn't use absolute url in profile photos

View File

@ -279,6 +279,13 @@ function diaspora_get_contact_by_handle($uid,$handle) {
} }
function find_person_by_handle($handle) { function find_person_by_handle($handle) {
$r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1",
dbesc(NETWORK_DIASPORA),
dbesc($handle)
);
if(count($r))
return $r[0];
// we don't care about the uid, we just want to save an expensive webfinger probe // we don't care about the uid, we just want to save an expensive webfinger probe
$r = q("select * from contact where network = '%s' and addr = '%s' LIMIT 1", $r = q("select * from contact where network = '%s' and addr = '%s' LIMIT 1",
dbesc(NETWORK_DIASPORA), dbesc(NETWORK_DIASPORA),

View File

@ -2,8 +2,7 @@
function hcard_init(&$a) { function hcard_init(&$a) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
return;
if($a->argc > 1) if($a->argc > 1)
$which = $a->argv[1]; $which = $a->argv[1];
@ -31,10 +30,12 @@ function hcard_init(&$a) {
$a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n"; $a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
} }
if(! $blocked) {
$keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : ''); $keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
$keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords); $keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
if(strlen($keywords)) if(strlen($keywords))
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ; $a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
}
$a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ; $a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ;
$a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ; $a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ;

View File

@ -2,8 +2,7 @@
function profile_init(&$a) { function profile_init(&$a) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
return;
if($a->argc > 1) if($a->argc > 1)
$which = $a->argv[1]; $which = $a->argv[1];
@ -31,10 +30,12 @@ function profile_init(&$a) {
$a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n"; $a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
} }
if(! $blocked) {
$keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : ''); $keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
$keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords); $keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
if(strlen($keywords)) if(strlen($keywords))
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ; $a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
}
$a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ; $a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ;
$a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ; $a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ;

View File

@ -18,11 +18,12 @@
$pubkey $pubkey
$diaspora
</div> </div>
$marital $marital
$homepage $homepage
$diaspora