]> git.mxchange.org Git - friendica.git/commitdiff
Bugfix: Diaspora connects to a Soapbox account weren't established correctly
authorMichael Vogel <icarus@dabo.de>
Sun, 10 Jul 2016 10:09:58 +0000 (12:09 +0200)
committerMichael Vogel <icarus@dabo.de>
Sun, 10 Jul 2016 10:09:58 +0000 (12:09 +0200)
boot.php
database.sql
include/dbstructure.php
include/diaspora.php
include/notifier.php
update.php

index 70ab308169c64618de879493b3b097b29994cbe1..298010dd0d36cd6060aea172d73213a4f70bcb69 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -38,7 +38,7 @@ define ( 'FRIENDICA_PLATFORM',     'Friendica');
 define ( 'FRIENDICA_CODENAME',     'Asparagus');
 define ( 'FRIENDICA_VERSION',      '3.5-dev' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1198      );
+define ( 'DB_UPDATE_VERSION',      1199      );
 
 /**
  * @brief Constant with a HTML line break.
index c337df586eca26066a5c62a696cd9166313351f1..2b55a896f850f9c97f626d3309da364d4946989c 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 3.5-dev (Asparagus)
--- DB_UPDATE_VERSION 1198
+-- DB_UPDATE_VERSION 1199
 -- ------------------------------------------
 
 
@@ -234,6 +234,7 @@ CREATE TABLE IF NOT EXISTS `event` (
 --
 CREATE TABLE IF NOT EXISTS `fcontact` (
        `id` int(10) unsigned NOT NULL auto_increment,
+       `guid` varchar(255) NOT NULL DEFAULT '',
        `url` varchar(255) NOT NULL DEFAULT '',
        `name` varchar(255) NOT NULL DEFAULT '',
        `photo` varchar(255) NOT NULL DEFAULT '',
index b503b0ac048421718efd4ee827e06803358c8079..10e1e0e625cbac35882db74f76d66ec679b3574a 100644 (file)
@@ -568,6 +568,7 @@ function db_definition() {
        $database["fcontact"] = array(
                        "fields" => array(
                                        "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
+                                       "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
                                        "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
index 8598ca7949ca511d7c5426aab3520f49c6e16dac..f6ac59ed83f84aba4ff8a5de32d4ba01cd07d62c 100644 (file)
@@ -432,6 +432,8 @@ class diaspora {
                $type = $element->getName();
                $orig_type = $type;
 
+               logger("Got message type ".$type.": ".$msg["message"], LOGGER_DATA);
+
                // All retractions are handled identically from now on.
                // In the new version there will only be "retraction".
                if (in_array($type, array("signed_retraction", "relayable_retraction")))
@@ -568,6 +570,9 @@ class diaspora {
                        $d = strtotime($person["updated"]." +00:00");
                        if ($d < strtotime("now - 14 days"))
                                $update = true;
+
+                       if ($person["guid"] == "")
+                               $update = true;
                }
 
                if (!$person OR $update) {
@@ -601,6 +606,7 @@ class diaspora {
                                        `request` = '%s',
                                        `nick` = '%s',
                                        `addr` = '%s',
+                                       `guid` = '%s',
                                        `batch` = '%s',
                                        `notify` = '%s',
                                        `poll` = '%s',
@@ -614,6 +620,7 @@ class diaspora {
                                        dbesc($arr["request"]),
                                        dbesc($arr["nick"]),
                                        dbesc($arr["addr"]),
+                                       dbesc($arr["guid"]),
                                        dbesc($arr["batch"]),
                                        dbesc($arr["notify"]),
                                        dbesc($arr["poll"]),
@@ -625,7 +632,7 @@ class diaspora {
                                        dbesc($arr["network"])
                                );
                } else {
-                       $r = q("INSERT INTO `fcontact` (`url`,`name`,`photo`,`request`,`nick`,`addr`,
+                       $r = q("INSERT INTO `fcontact` (`url`,`name`,`photo`,`request`,`nick`,`addr`, `guid`,
                                        `batch`, `notify`,`poll`,`confirm`,`network`,`alias`,`pubkey`,`updated`)
                                VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
                                        dbesc($arr["url"]),
@@ -634,6 +641,7 @@ class diaspora {
                                        dbesc($arr["request"]),
                                        dbesc($arr["nick"]),
                                        dbesc($arr["addr"]),
+                                       dbesc($arr["guid"]),
                                        dbesc($arr["batch"]),
                                        dbesc($arr["notify"]),
                                        dbesc($arr["poll"]),
@@ -1838,10 +1846,31 @@ class diaspora {
                // That makes us friends.
                if ($contact) {
                        if ($following AND $sharing) {
+                               logger("Author ".$author." (Contact ".$contact["id"].") wants to have a bidirectional conection.", LOGGER_DEBUG);
                                self::receive_request_make_friend($importer, $contact);
+
+                               // refetch the contact array
+                               $contact = self::contact_by_handle($importer["uid"],$author);
+
+                               // If we are now friends, we are sending a share message.
+                               // Normally we needn't to do so, but the first message could have been vanished.
+                               if (in_array($contact["rel"], array(CONTACT_IS_FRIEND, CONTACT_IS_FOLLOWER))) {
+                                       $u = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`,
+                                                       `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`,
+                                                       `user`.`page-flags`, `user`.`prvnets`, `user`.`guid`
+                                               FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
+                                                       WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
+                                               intval($importer["uid"]));
+                                       if($u) {
+                                               logger("Sending share message to author ".$author." - Contact: ".$contact["id"]." - User: ".$importer["uid"], LOGGER_DEBUG);
+                                               $ret = self::send_share($u[0], $contact);
+                                       }
+                               }
                                return true;
-                       } else /// @todo Handle all possible variations of adding and retracting of permissions
+                       } else { /// @todo Handle all possible variations of adding and retracting of permissions
+                               logger("Author ".$author." (Contact ".$contact["id"].") wants to change the relationship: Following: ".$following." - sharing: ".$sharing. "(By now unsupported)", LOGGER_DEBUG);
                                return false;
+                       }
                }
 
                if (!$following AND $sharing AND in_array($importer["page-flags"], array(PAGE_SOAPBOX, PAGE_NORMAL))) {
@@ -1850,6 +1879,12 @@ class diaspora {
                } elseif (!$following AND !$sharing) {
                        logger("Author ".$author." doesn't want anything - and we don't know the author. Request is ignored.", LOGGER_DEBUG);
                        return false;
+               } elseif (!$following AND $sharing) {
+                       logger("Author ".$author." wants to share with us.", LOGGER_DEBUG);
+               } elseif ($following AND $sharing) {
+                       logger("Author ".$author." wants to have a bidirectional conection.", LOGGER_DEBUG);
+               } elseif ($following AND !$sharing) {
+                       logger("Author ".$author." wants to listen to us.", LOGGER_DEBUG);
                }
 
                $ret = self::person_by_handle($author);
@@ -1889,6 +1924,8 @@ class diaspora {
                        return;
                }
 
+               logger("Author ".$author." was added as contact number ".$contact_record["id"].".", LOGGER_DEBUG);
+
                $def_gid = get_default_group($importer['uid'], $ret["network"]);
 
                if(intval($def_gid))
@@ -1898,6 +1935,8 @@ class diaspora {
 
                if($importer["page-flags"] == PAGE_NORMAL) {
 
+                       logger("Sending intra message for author ".$author.".", LOGGER_DEBUG);
+
                        $hash = random_string().(string)time();   // Generate a confirm_key
 
                        $ret = q("INSERT INTO `intro` (`uid`, `contact-id`, `blocked`, `knowyou`, `note`, `hash`, `datetime`)
@@ -1914,6 +1953,8 @@ class diaspora {
 
                        // automatic friend approval
 
+                       logger("Does an automatic friend approval for author ".$author.".", LOGGER_DEBUG);
+
                        update_contact_avatar($contact_record["photo"],$importer["uid"],$contact_record["id"]);
 
                        // technically they are sharing with us (CONTACT_IS_SHARING),
@@ -1941,9 +1982,16 @@ class diaspora {
                                intval($contact_record["id"])
                        );
 
-                       $u = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($importer["uid"]));
-                       if($u)
+                       $u = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`,
+                                       `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`,
+                                       `user`.`page-flags`, `user`.`prvnets`, `user`.`guid`
+                               FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
+                                       WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
+                               intval($importer["uid"]));
+                       if($u) {
+                               logger("Sending share message (Relation: ".$new_relation.") to author ".$author." - Contact: ".$contact_record["id"]." - User: ".$importer["uid"], LOGGER_DEBUG);
                                $ret = self::send_share($u[0], $contact_record);
+                       }
                }
 
                return true;
@@ -2655,6 +2703,8 @@ class diaspora {
                $message = array("sender_handle" => self::my_handle($owner),
                                "recipient_handle" => $contact["addr"]);
 
+               logger("Send share ".print_r($message, true), LOGGER_DEBUG);
+
                return self::build_and_transmit($owner, $contact, "request", $message);
        }
 
@@ -2672,6 +2722,8 @@ class diaspora {
                                "diaspora_handle" => self::my_handle($owner),
                                "type" => "Person");
 
+               logger("Send unshare ".print_r($message, true), LOGGER_DEBUG);
+
                return self::build_and_transmit($owner, $contact, "retraction", $message);
        }
 
index e7eb278effe0f04be4b60810c7427dc6ca79ba29..446824a26ae065164374d23b599b8bba464a4dee 100644 (file)
@@ -134,7 +134,7 @@ function notifier_run(&$argv, &$argc){
        } elseif($cmd === 'removeme') {
                $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`,
                                `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`,
-                               `user`.`page-flags`, `user`.`prvnets`
+                               `user`.`page-flags`, `user`.`prvnets`, `user`.`guid`
                        FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
                                WHERE `contact`.`uid` = %d AND `contact`.`self` LIMIT 1",
                                intval($item_id));
index c254d71c8633b472ba25a0190ef7e5ba8ddfc806..41f238e91300a0cd2bcae16ec3922c273d955181 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define('UPDATE_VERSION' , 1198);
+define('UPDATE_VERSION' , 1199);
 
 /**
  *