aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/network.php43
-rw-r--r--mod/webfinger.php31
-rw-r--r--version.inc2
3 files changed, 58 insertions, 18 deletions
diff --git a/include/network.php b/include/network.php
index 93fd836f8..4eca53f92 100644
--- a/include/network.php
+++ b/include/network.php
@@ -1288,12 +1288,22 @@ LSIeXnd14lQYK/uxW/8cTFjcmddsKxeXysoQxbSa9VdDK+KkpZdgYXYrTTofXs6v+
function webfinger_rfc7033($webbie,$zot = false) {
- if(! strpos($webbie,'@'))
- return false;
- $lhs = substr($webbie,0,strpos($webbie,'@'));
- $rhs = substr($webbie,strpos($webbie,'@')+1);
-
- $resource = 'acct:' . $webbie;
+ if(strpos($webbie,'@')) {
+ $lhs = substr($webbie,0,strpos($webbie,'@'));
+ $rhs = substr($webbie,strpos($webbie,'@')+1);
+ $resource = 'acct:' . $webbie;
+ }
+ else {
+ $m = parse_url($webbie);
+ if($m) {
+ if($m['scheme'] !== 'https')
+ return false;
+ $rhs = $m['host'] . (($m['port']) ? ':' . $m['port'] : '');
+ $resource = urlencode($webbie);
+ }
+ else
+ return false;
+ }
$s = z_fetch_url('https://' . $rhs . '/.well-known/webfinger?f=&resource=' . $resource . (($zot) ? '&zot=1' : ''));
@@ -1455,8 +1465,25 @@ function scrape_vcard($url) {
if(attribute_contains($item->getAttribute('class'), 'vcard')) {
$level2 = $item->getElementsByTagName('*');
foreach($level2 as $x) {
+ if(attribute_contains($x->getAttribute('id'),'pod_location'))
+ $ret['pod_location'] = $x->textContent;
if(attribute_contains($x->getAttribute('class'),'fn'))
$ret['fn'] = $x->textContent;
+ if(attribute_contains($x->getAttribute('class'),'uid'))
+ $ret['uid'] = $x->textContent;
+ if(attribute_contains($x->getAttribute('class'),'nickname'))
+ $ret['nick'] = $x->textContent;
+ if(attribute_contains($x->getAttribute('class'),'searchable'))
+ $ret['searchable'] = $x->textContent;
+ if(attribute_contains($x->getAttribute('class'),'key'))
+ $ret['public_key'] = $x->textContent;
+ if(attribute_contains($x->getAttribute('class'),'given_name'))
+ $ret['given_name'] = $x->textContent;
+ if(attribute_contains($x->getAttribute('class'),'family_name'))
+ $ret['family_name'] = $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'));
@@ -1465,10 +1492,6 @@ function scrape_vcard($url) {
$largest_photo = $size;
}
}
- if((attribute_contains($x->getAttribute('class'),'nickname'))
- || (attribute_contains($x->getAttribute('class'),'uid'))) {
- $ret['nick'] = $x->textContent;
- }
}
}
}
diff --git a/mod/webfinger.php b/mod/webfinger.php
index 74bfc3ce5..e35767338 100644
--- a/mod/webfinger.php
+++ b/mod/webfinger.php
@@ -4,6 +4,7 @@
function webfinger_content(&$a) {
+
$o .= '<h3>Webfinger Diagnostic</h3>';
$o .= '<form action="webfinger" method="get">';
@@ -11,18 +12,34 @@ function webfinger_content(&$a) {
$o .= '<input type="submit" name="submit" value="Submit" /></form>';
$o .= '<br /><br />';
-
+
+ $old = false;
if(x($_GET,'addr')) {
$addr = trim($_GET['addr']);
- if(strpos($addr,'@') !== false) {
+// if(strpos($addr,'@') !== false) {
$res = webfinger_rfc7033($addr,true);
- if(! $res)
+ if(! $res) {
$res = old_webfinger($addr);
+ $old = true;
+ }
+// }
+// else {
+// if(function_exists('lrdd'))
+// $res = lrdd($addr);
+// }
+
+ if($res && $old) {
+ foreach($res as $r) {
+ if($r['@attributes']['rel'] === 'http://microformats.org/profile/hcard') {
+ $hcard = unamp($r['@attributes']['href']);
+ require_once('library/HTML5/Parser.php');
+ $res['vcard'] = scrape_vcard($hcard);
+ break;
+ }
+ }
}
- else {
- if(function_exists('lrdd'))
- $res = lrdd($addr);
- }
+
+
$o .= '<pre>';
$o .= str_replace("\n",'<br />',print_r($res,true));
$o .= '</pre>';
diff --git a/version.inc b/version.inc
index 435a0e60c..745b7640c 100644
--- a/version.inc
+++ b/version.inc
@@ -1 +1 @@
-2016-03-13.1334H
+2016-03-14.1335H