]> git.mxchange.org Git - friendica.git/commitdiff
Automatically update contact data.
authorMichael Vogel <icarus@dabo.de>
Sat, 11 Jul 2015 12:36:04 +0000 (14:36 +0200)
committerMichael Vogel <icarus@dabo.de>
Sat, 11 Jul 2015 12:36:04 +0000 (14:36 +0200)
include/follow.php
include/items.php
include/onepoll.php
mod/receive.php

index 287a38b6bffb03c33e81f5856da461661e3d6be0..b2b6c750277fdc4ebfeeade6b3129466febcabe8 100644 (file)
@@ -1,5 +1,30 @@
 <?php
 
+function update_contact($id) {
+       $r = q("SELECT `url`, `network` FROM `contact` WHERE `id` = %d", intval($id));
+       if (!$r)
+               return;
+
+       $ret = probe_url($r[0]["url"]);
+
+       // If probe_url fails the network code will be different
+       if ($ret["network"] != $r[0]["network"])
+               return;
+
+       q("UPDATE `contact` SET `url` = '%s', `nurl` = '%s', `addr` = '%s', `alias` = '%s', `batch` = '%s', `notify` = '%s', `poll` = '%s', `poco` = '%s', `name` = '%s', `nick` = '%s' WHERE `id` = %d",
+               dbesc($ret['url']),
+               dbesc(normalise_link($ret['url'])),
+               dbesc($ret['addr']),
+               dbesc($ret['alias']),
+               dbesc($ret['batch']),
+               dbesc($ret['notify']),
+               dbesc($ret['poll']),
+               dbesc($ret['poco']),
+               dbesc($ret['name']),
+               dbesc($ret['nick']),
+               intval($id)
+       );
+}
 
 //
 // Takes a $uid and a url/handle and adds a new contact
@@ -120,9 +145,10 @@ function new_contact($uid,$url,$interactive = false) {
        // the poll url is more reliable than the profile url, as we may have
        // indirect links or webfinger links
 
-       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` = '%s' AND `network` = '%s' LIMIT 1",
+       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` IN ('%s', '%s') AND `network` = '%s' LIMIT 1",
                intval($uid),
                dbesc($ret['poll']),
+               dbesc(normalise_link($ret['poll'])),
                dbesc($ret['network'])
        );
 
@@ -136,8 +162,8 @@ function new_contact($uid,$url,$interactive = false) {
                                intval($uid)
                        );
                }
-       }
-       else {
+
+       else {
 
 
                // check service class limits
index 45d25e379f84713931de7ba41653b6a2c826a681..c61ad1b1e2de95cd16c18f47a091a275f1ed8d94 100644 (file)
@@ -2064,11 +2064,11 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
                || ($contact['rel'] == CONTACT_IS_SHARING && strlen($contact['pubkey']))) {
                openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
                openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
-       }
-       else {
+       } elseif($contact['prvkey']) {
                openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
                openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
-       }
+       } else
+               logger("No private or public key for contact ".$contact['id']." ".$contact['url']);
 
        $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
 
@@ -2076,7 +2076,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
                $final_dfrn_id = substr($final_dfrn_id,2);
 
        if($final_dfrn_id != $orig_id) {
-               logger('dfrn_deliver: wrong dfrn_id.');
+               logger('dfrn_deliver: wrong dfrn_id. Original: '.$orig_id.' Target: '.$final_dfrn_id.' Test: '.$test);
                // did not decode properly - cannot trust this site
                return 3;
        }
index 7b93a9a2f0d0a63e7ee422f0919b2b08c28597cf..57b3521d533b5eda0b7357971b3d43d84b7a8608 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 
 require_once("boot.php");
+require_once("include/follow.php");
+require_once("include/Scrape.php");
 
 function RemoveReply($subject) {
        while (in_array(strtolower(substr($subject, 0, 3)), array("re:", "aw:")))
@@ -129,6 +131,10 @@ function onepoll_run(&$argv, &$argc){
                : datetime_convert('UTC','UTC',$contact['last-update'], ATOM_TIME)
        );
 
+       // Update the contact entry
+       if(($contact['network'] === NETWORK_OSTATUS) || ($contact['network'] === NETWORK_DIASPORA) || ($contact['network'] === NETWORK_DFRN))
+               update_contact($contact["id"]);
+
        if($contact['network'] === NETWORK_DFRN) {
 
 
@@ -231,11 +237,11 @@ function onepoll_run(&$argv, &$argc){
                if(($contact['duplex']) && strlen($contact['prvkey'])) {
                        openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
                        openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
-               }
-               else {
+               } elseif($contact['pubkey']) {
                        openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
                        openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
-               }
+               } else
+                       logger("No private or public key for contact ".$contact['id']." ".$contact['url']);
 
                $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
 
@@ -243,8 +249,8 @@ function onepoll_run(&$argv, &$argc){
                        $final_dfrn_id = substr($final_dfrn_id,2);
 
                if($final_dfrn_id != $orig_id) {
-                       logger('poller: ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);    
-                       // did not decode properly - cannot trust this site 
+                       logger('poller: ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);
+                       // did not decode properly - cannot trust this site
                        return;
                }
 
@@ -255,7 +261,7 @@ function onepoll_run(&$argv, &$argc){
                $xml = post_url($contact['poll'],$postvars);
 
        }
-       elseif(($contact['network'] === NETWORK_OSTATUS) 
+       elseif(($contact['network'] === NETWORK_OSTATUS)
                || ($contact['network'] === NETWORK_DIASPORA)
                || ($contact['network'] === NETWORK_FEED) ) {
 
@@ -265,7 +271,8 @@ function onepoll_run(&$argv, &$argc){
 
                $stat_writeable = ((($contact['notify']) && ($contact['rel'] == CONTACT_IS_FOLLOWER || $contact['rel'] == CONTACT_IS_FRIEND)) ? 1 : 0);
 
-               if($contact['network'] === NETWORK_OSTATUS && get_pconfig($importer_uid,'system','ostatus_autofriend'))
+               // Contacts from OStatus are always writable
+               if($contact['network'] === NETWORK_OSTATUS)
                        $stat_writeable = 1;
 
                if($stat_writeable != $contact['writable']) {
index ee15ebe8a379936e52e9d9c7153da4b4170b26f7..95a51016757da46217f277e4b641799c43b1ec2c 100644 (file)
@@ -9,7 +9,7 @@ require_once('include/salmon.php');
 require_once('include/crypto.php');
 require_once('include/diaspora.php');
 
-       
+
 function receive_post(&$a) {