]> git.mxchange.org Git - friendica.git/commitdiff
improved diaspora discovery
authorFriendika <info@friendika.com>
Fri, 12 Aug 2011 10:01:11 +0000 (03:01 -0700)
committerFriendika <info@friendika.com>
Fri, 12 Aug 2011 10:01:11 +0000 (03:01 -0700)
include/Scrape.php
include/diaspora.php
mod/receive.php

index ef5d7dcae4751f6cd86f246de4e2e4c1d96ef22e..c4882243d5898dbdb10af07978b125016de50a9f 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 require_once('library/HTML5/Parser.php');
+require_once('include/crypto.php');
 
 if(! function_exists('scrape_dfrn')) {
 function scrape_dfrn($url) {
@@ -171,6 +172,8 @@ function scrape_vcard($url) {
 
        // Pull out hCard profile elements
 
+       $largest_photo = 0;
+
        $items = $dom->getElementsByTagName('*');
        foreach($items as $item) {
                if(attribute_contains($item->getAttribute('class'), 'vcard')) {
@@ -179,8 +182,13 @@ function scrape_vcard($url) {
                                if(attribute_contains($x->getAttribute('class'),'fn'))
                                        $ret['fn'] = $x->textContent;
                                if((attribute_contains($x->getAttribute('class'),'photo'))
-                                       || (attribute_contains($x->getAttribute('class'),'avatar')))
-                                       $ret['photo'] = $x->getAttribute('src');
+                                       || (attribute_contains($x->getAttribute('class'),'avatar'))) {
+                                       $size = intval($x->getAttribute('width'));
+                                       if(($size > $largest_photo) || (! $largest_photo)) {
+                                               $ret['photo'] = $x->getAttribute('src');
+                                               $largest_photo = $size;
+                                       }
+                               }
                                if((attribute_contains($x->getAttribute('class'),'nickname'))
                                        || (attribute_contains($x->getAttribute('class'),'uid')))
                                        $ret['nick'] = $x->textContent;
@@ -289,7 +297,10 @@ function probe_url($url) {
        if(! $url)
                return $result;
 
-       $diaspora = false;      
+       $diaspora = false;
+       $diaspora_base = '';
+       $diaspora_guid = '';    
+       $diaspora_key = '';
        $email_conversant = false;
 
        $twitter = ((strpos($url,'twitter.com') !== false) ? true : false);
@@ -320,8 +331,19 @@ function probe_url($url) {
                                        $hcard = unamp($link['@attributes']['href']);
                                if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page')
                                        $profile = unamp($link['@attributes']['href']);
-                               if($link['@attributes']['rel'] === 'http://joindiaspora.com/seed_location')
+                               if($link['@attributes']['rel'] === 'http://joindiaspora.com/seed_location') {
+                                       $diaspora_base = unamp($link['@attributes']['href']);
+                                       $diaspora = true;
+                               }
+                               if($link['@attributes']['rel'] === 'http://joindiaspora.com/guid') {
+                                       $diaspora_guid = unamp($link['@attributes']['href']);
                                        $diaspora = true;
+                               }
+                               if($link['@attributes']['rel'] === 'diaspora-public-key') {
+                                       $diaspora_key = base64_decode(unamp($link['@attributes']['href']));
+                                       $pubkey = rsatopem($diaspora_key);
+                                       $diaspora = true;
+                               }
                        }
 
                        // Status.Net can have more than one profile URL. We need to match the profile URL
@@ -419,8 +441,17 @@ function probe_url($url) {
                }
        }
 
+       if($diaspora && $diaspora_base && $diaspora_guid) {
+               $notify = $diaspora_base . 'receive/post/' . $diaspora_guid;
+               if(strpos($url,'@'))
+                       $addr = str_replace('acct:', '', $url);
+       }                       
+
        if($network !== NETWORK_ZOT && $network !== NETWORK_DFRN && $network !== NETWORK_MAIL) {
-               $network  = NETWORK_OSTATUS;
+               if($diaspora)
+                       $network = NETWORK_DIASPORA;
+               else
+                       $network  = NETWORK_OSTATUS;
                $priority = 0;
 
                if($hcard) {
index f799b6a499d841f88e86bed8987fa64ba8b43adb..d4e9c530c9ffa9c1226cb8089880ef734c54b23f 100644 (file)
@@ -244,6 +244,39 @@ function diaspora_decode($importer,$xml) {
 
 function diaspora_request($importer,$contact,$xml) {
 
+       $sender_handle = $xml->sender_handle;
+       $recipient_handle = $xml->recipient_handle;
+
+       if(! $sender_handle || ! $recipient_handle)
+               return;
+       
+       if($contact) {
+               q("UPDATE `contact` SET `rel` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
+                       intval(CONTACT_IS_FRIEND),
+                       intval($contact['id']),
+                       intval($importer['uid'])
+               );
+               // send notification
+               return;
+       }
+       
+       require_once('include/Scrape.php');
+       $ret = probe_url($sender_handle);
+       $errors = false;
+       if((! count($ret)) || ($ret['network'] != NETWORK_DIASPORA)) {
+               logger('diaspora_request: Cannot resolve diaspora handle ' . $sender_handle . ' for ' . $recipient_handle);
+               $errors = true;
+       }
+
+
+       if($errors)
+               return;
+
+
+
+
+
+
 }
 
 function diaspora_post($importer,$contact,$xml) {
index 1dfbe59bd69a3c1ec138d185d8589c42b06bf6d1..72d528093bd53fe3bf5aad01b0b03478be01f45a 100644 (file)
@@ -71,7 +71,7 @@ function receive_post(&$a) {
 
        $contact = ((count($r)) ? $r[0] : null);
 
-
+       logger('diaspora msg: ' . $msg, LOGGER_DATA); 
 
        if($xmlbase->request) {
                diaspora_request($importer,$contact,$xmlbase->request);