]> git.mxchange.org Git - friendica.git/commitdiff
more graceful handling of some statusnet followups
authorFriendika <info@friendika.com>
Wed, 9 Feb 2011 02:44:30 +0000 (18:44 -0800)
committerFriendika <info@friendika.com>
Wed, 9 Feb 2011 02:44:30 +0000 (18:44 -0800)
boot.php
database.sql
include/items.php
mod/follow.php
mod/item.php
mod/salmon.php
update.php

index 7fbd2a6fbde635a9c153d5b7bae1c0845542b8b3..8492b8be077d71633f5c20df5549bc0f98072447 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -2,7 +2,7 @@
 
 set_time_limit(0);
 
-define ( 'BUILD_ID',               1037   );
+define ( 'BUILD_ID',               1038   );
 define ( 'FRIENDIKA_VERSION',      '2.10.0905' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.1'  );
 
@@ -1378,10 +1378,12 @@ function webfinger($s) {
                logger('webfinger: lrdd template: ' . $tpl);
                if(strlen($tpl)) {
                        $pxrd = str_replace('{uri}', urlencode('acct:'.$s), $tpl);
+                       logger('webfinger: pxrd: ' . $pxrd);
                        $links = fetch_xrd_links($pxrd);
                        if(! count($links)) {
                                // try with double slashes
                                $pxrd = str_replace('{uri}', urlencode('acct://'.$s), $tpl);
+                               logger('webfinger: pxrd: ' . $pxrd);
                                $links = fetch_xrd_links($pxrd);
                        }
                        return $links;
@@ -1453,6 +1455,7 @@ function fetch_lrdd_template($host) {
        $tpl = '';
        $url = 'http://' . $host . '/.well-known/host-meta' ;
        $links = fetch_xrd_links($url);
+logger('template: ' . print_r($links,true));
        if(count($links)) {
                foreach($links as $link)
                        if($link['@attributes']['rel'] && $link['@attributes']['rel'] === 'lrdd')
@@ -1479,15 +1482,30 @@ function fetch_xrd_links($url) {
        $h = simplexml_load_string($xml);
        $arr = convert_xml_element_to_array($h);
 
+       $links = array();
+
        if(isset($arr['xrd']['link'])) {
                $link = $arr['xrd']['link'];
                if(! isset($link[0]))
                        $links = array($link);
                else
                        $links = $link;
-               return $links;
        }
-       return array();
+       if(isset($arr['xrd']['alias'])) {
+               $alias = $arr['xrd']['alias'];
+               if(! isset($alias[0]))
+                       $aliases = array($alias);
+               else
+                       $aliases = $alias;
+               foreach($aliases as $alias) {
+                       $links[]['@attributes'] = array('rel' => 'alias' , 'href' => $alias);
+               }
+       }
+
+       logger('fetch_xrd_links: ' . print_r($links,true), LOGGER_DATA);
+
+       return $links;
+
 }}
 
 // Convert an ACL array to a storable string
index 83e0e4b6f49ea6b14c5a7ce663c9126954cf77fa..34b80797935d705c13a817b565791d1383b957e5 100644 (file)
@@ -64,7 +64,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
   `issued-id` char(255) NOT NULL,
   `dfrn-id` char(255) NOT NULL,
   `url` char(255) NOT NULL,
-  `lrdd` char(255) NOT NULL,
+  `alias` char(255) NOT NULL,
   `pubkey` text NOT NULL,
   `prvkey` text NOT NULL,
   `request` text NOT NULL,
index cffd13a01e16679e6a9af92d432ebc22d8758f8c..b5bdd783354f8ee7c8982900f4eb52792f29ee49 100644 (file)
@@ -1128,15 +1128,16 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
                        }
 
                        if(($is_reply) && is_array($contact)) {
-       
+
                                // Have we seen it? If not, import it.
        
                                $item_id = $item->get_id();
-       
+
                                $r = q("SELECT `uid`, `last-child`, `edited` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
                                        dbesc($item_id),
                                        intval($importer['uid'])
                                );
+
                                // FIXME update content if 'updated' changes
                                if(count($r)) {
                                        $allow = $item->get_item_tags( NAMESPACE_DFRN, 'comment-allow');
@@ -1155,6 +1156,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
                                        }
                                        continue;
                                }
+
                                $datarray = get_atom_elements($feed,$item);
                                $force_parent = false;
                                if($contact['network'] === 'stat') {
index 8c1dc348fa7d4addd416a48135a5e837fef758ef..eaee7d5aca2f0002fa56f2dcd9f7fb69afc53782 100644 (file)
@@ -15,7 +15,7 @@ function follow_post(&$a) {
        $email_conversant = false;
 
        if($url) {
-               $links = lrdd($url);
+               $links = @lrdd($url);
                if(count($links)) {
                        foreach($links as $link) {
                                if($link['@attributes']['rel'] === NAMESPACE_DFRN)
@@ -30,6 +30,26 @@ function follow_post(&$a) {
                                        $profile = $link['@attributes']['href'];
 
                        }
+
+                       // Status.Net can have more than one profile URL. We need to match the profile URL
+                       // to a contact on incoming messages to prevent spam, and we won't know which one
+                       // to match. So in case of two, one of them is stored as an alias. Only store URL's
+                       // and not webfinger user@host aliases. If they've got more than two non-email style
+                       // aliases, let's hope we're lucky and get one that matches the feed author-uri because 
+                       // otherwise we're screwed.
+
+                       foreach($links as $link) {
+                               if($link['@attributes']['rel'] === 'alias') {
+                                       if(strpos($link['@attributes']['href'],'@') === false) {
+                                               if(isset($profile)) {
+                                                       if($link['@attributes']['href'] !== $profile)
+                                                               $alias = $link['@attributes']['href'];
+                                               }
+                                               else
+                                                       $profile = $link['@attributes']['href'];
+                                       }
+                               }
+                       }
                }
                else {
                        if((strpos($orig_url,'@')) && validate_email($orig_url)) {
@@ -165,12 +185,13 @@ function follow_post(&$a) {
        }
        else {
                // create contact record 
-               $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
+               $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
                        `blocked`, `readonly`, `pending` )
-                       VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 0, 0, 0 ) ",
+                       VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 0, 0, 0 ) ",
                        intval(local_user()),
                        dbesc(datetime_convert()),
                        dbesc($profile),
+                       dbesc($alias),
                        dbesc($notify),
                        dbesc($poll),
                        dbesc($vcard['fn']),
index 2264ea5b9fdbeead022e94bbdee718fc10beb719..737fe83419baa09fa6bb8f845bd3dc39a670af1d 100644 (file)
@@ -246,18 +246,20 @@ function item_post(&$a) {
                                                );
                                        }
                                        if(count($r)) {
-                                               if($r[0]['network'] === 'stat')
-                                                       $stat = true;
                                                $profile = $r[0]['url'];
-                                               $newname = $r[0]['name'];
+                                               if($r[0]['network'] === 'stat') {
+                                                       $newname = $r[0]['nick'];
+                                                       $stat = true;
+                                               }
+                                               else
+                                                       $newname = $r[0]['name'];
                                                if(strlen($inform))
                                                        $inform .= ',';
                                                $inform .= 'cid:' . $r[0]['id'];
                                        }
                                }
                                if($profile) {
-                                       if(! $stat)
-                                               $body = str_replace('@' . $name, '@' . '[url=' . $profile . ']' . $newname      . '[/url]', $body);
+                                       $body = str_replace('@' . $name, '@' . '[url=' . $profile . ']' . $newname      . '[/url]', $body);
                                        $profile = str_replace(',','%2c',$profile);
                                        if(strlen($str_tags))
                                                $str_tags .= ',';
index 8c7d921c86041328549b7e299647f2aa59775937..885ba470c8458e64a8456f9015e52c2cbfd2da82 100644 (file)
@@ -177,7 +177,7 @@ function salmon_post(&$a) {
        *
        */
 
-       $r = q("SELECT * FROM `contact` WHERE `network` = 'stat' AND ( `url` = '%s' OR `lrdd` = '%s') 
+       $r = q("SELECT * FROM `contact` WHERE `network` = 'stat' AND ( `url` = '%s' OR `alias` = '%s') 
                AND `uid` = %d LIMIT 1",
                dbesc($author_link),
                dbesc($author_link),
index e51e8ac33ed92492418c086a5ae4171273997ac1..84eaebe185c947728e7897b0197aede140d15a64 100644 (file)
@@ -363,3 +363,10 @@ function update_1036() {
                }
        }
 }
+
+function update_1037() {
+
+       q("ALTER TABLE `contact` CHANGE `lrdd` `alias` CHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ");
+
+}
+