]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
fixed parser error, need parentheses
[friendica.git] / include / diaspora.php
index 484aa93786f3f636660c76c40876eb3302643275..820f8bd8967d73ed997653e2c1a0aff1e8368f5e 100644 (file)
@@ -8,11 +8,12 @@
  * This will change in the future.
  */
 
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\Config;
 
 require_once 'include/items.php';
 require_once 'include/bb2diaspora.php';
-require_once 'include/Scrape.php';
+require_once 'include/probe.php';
 require_once 'include/Contact.php';
 require_once 'include/Photo.php';
 require_once 'include/socgraph.php';
@@ -576,32 +577,38 @@ class Diaspora {
                foreach ($element->children() AS $fieldname => $entry) {
                        if ($oldXML) {
                                // Translation for the old XML structure
-                               if ($fieldname == "diaspora_handle")
+                               if ($fieldname == "diaspora_handle") {
                                        $fieldname = "author";
-
-                               if ($fieldname == "participant_handles")
+                               }
+                               if ($fieldname == "participant_handles") {
                                        $fieldname = "participants";
-
+                               }
                                if (in_array($type, array("like", "participation"))) {
-                                       if ($fieldname == "target_type")
+                                       if ($fieldname == "target_type") {
                                                $fieldname = "parent_type";
+                                       }
                                }
-
-                               if ($fieldname == "sender_handle")
+                               if ($fieldname == "sender_handle") {
                                        $fieldname = "author";
-
-                               if ($fieldname == "recipient_handle")
+                               }
+                               if ($fieldname == "recipient_handle") {
                                        $fieldname = "recipient";
-
-                               if ($fieldname == "root_diaspora_id")
+                               }
+                               if ($fieldname == "root_diaspora_id") {
                                        $fieldname = "root_author";
-
+                               }
+                               if ($type == "status_message") {
+                                       if ($fieldname == "raw_message") {
+                                               $fieldname = "text";
+                                       }
+                               }
                                if ($type == "retraction") {
-                                       if ($fieldname == "post_guid")
+                                       if ($fieldname == "post_guid") {
                                                $fieldname = "target_guid";
-
-                                       if ($fieldname == "type")
+                                       }
+                                       if ($fieldname == "type") {
                                                $fieldname = "target_type";
+                                       }
                                }
                        }
 
@@ -630,7 +637,7 @@ class Diaspora {
                        }
 
                // Only some message types have signatures. So we quit here for the other types.
-               if (!in_array($type, array("comment", "message", "like"))) {
+               if (!in_array($type, array("comment", "like"))) {
                        return array("fields" => $fields, "relayed" => false);
                }
                // No author_signature? This is a must, so we quit.
@@ -688,7 +695,7 @@ class Diaspora {
         *
         * @return array the queried data
         */
-       private static function person_by_handle($handle) {
+       public static function person_by_handle($handle) {
 
                $r = q("SELECT * FROM `fcontact` WHERE `network` = '%s' AND `addr` = '%s' LIMIT 1",
                        dbesc(NETWORK_DIASPORA),
@@ -1363,10 +1370,10 @@ class Diaspora {
         * @return int The message id of the generated comment or "false" if there was an error
         */
        private static function receive_comment($importer, $sender, $data, $xml) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
                $parent_guid = notags(unxmlify($data->parent_guid));
                $text = unxmlify($data->text);
-               $author = notags(unxmlify($data->author));
 
                if (isset($data->created_at)) {
                        $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
@@ -1481,16 +1488,9 @@ class Diaspora {
         * @return bool "true" if it was successful
         */
        private static function receive_conversation_message($importer, $contact, $data, $msg, $mesg, $conversation) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
                $subject = notags(unxmlify($data->subject));
-               $author = notags(unxmlify($data->author));
-
-               $msg_guid = notags(unxmlify($mesg->guid));
-               $msg_parent_guid = notags(unxmlify($mesg->parent_guid));
-               $msg_parent_author_signature = notags(unxmlify($mesg->parent_author_signature));
-               $msg_author_signature = notags(unxmlify($mesg->author_signature));
-               $msg_text = unxmlify($mesg->text);
-               $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at)));
 
                // "diaspora_handle" is the element name from the old version
                // "author" is the element name from the new version
@@ -1502,7 +1502,10 @@ class Diaspora {
                        return false;
                }
 
+               $msg_guid = notags(unxmlify($mesg->guid));
                $msg_conversation_guid = notags(unxmlify($mesg->conversation_guid));
+               $msg_text = unxmlify($mesg->text);
+               $msg_created_at = datetime_convert("UTC", "UTC", notags(unxmlify($mesg->created_at)));
 
                if ($msg_conversation_guid != $guid) {
                        logger("message conversation guid does not belong to the current conversation.");
@@ -1512,44 +1515,11 @@ class Diaspora {
                $body = diaspora2bb($msg_text);
                $message_uri = $msg_author.":".$msg_guid;
 
-               $author_signed_data = $msg_guid.";".$msg_parent_guid.";".$msg_text.";".unxmlify($mesg->created_at).";".$msg_author.";".$msg_conversation_guid;
-
-               $author_signature = base64_decode($msg_author_signature);
-
-               if (strcasecmp($msg_author,$msg["author"]) == 0) {
-                       $person = $contact;
-                       $key = $msg["key"];
-               } else {
-                       $person = self::person_by_handle($msg_author);
-
-                       if (is_array($person) && x($person, "pubkey")) {
-                               $key = $person["pubkey"];
-                       } else {
-                               logger("unable to find author details");
-                                       return false;
-                       }
-               }
-
-               if (!rsa_verify($author_signed_data, $author_signature, $key, "sha256")) {
-                       logger("verification failed.");
-                       return false;
-               }
-
-               if ($msg_parent_author_signature) {
-                       $owner_signed_data = $msg_guid.";".$msg_parent_guid.";".$msg_text.";".unxmlify($mesg->created_at).";".$msg_author.";".$msg_conversation_guid;
-
-                       $parent_author_signature = base64_decode($msg_parent_author_signature);
-
-                       $key = $msg["key"];
-
-                       if (!rsa_verify($owner_signed_data, $parent_author_signature, $key, "sha256")) {
-                               logger("owner verification failed.");
-                               return false;
-                       }
-               }
+               $person = self::person_by_handle($msg_author);
 
-               $r = q("SELECT `id` FROM `mail` WHERE `uri` = '%s' LIMIT 1",
-                       dbesc($message_uri)
+               $r = q("SELECT `id` FROM `mail` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1",
+                       dbesc($msg_guid),
+                       intval($importer["uid"])
                );
                if (dbm::is_result($r)) {
                        logger("duplicate message already delivered.", LOGGER_DEBUG);
@@ -1606,10 +1576,10 @@ class Diaspora {
         * @return bool Success
         */
        private static function receive_conversation($importer, $msg, $data) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
                $subject = notags(unxmlify($data->subject));
                $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
-               $author = notags(unxmlify($data->author));
                $participants = notags(unxmlify($data->participants));
 
                $messages = $data->message;
@@ -1714,11 +1684,11 @@ class Diaspora {
         * @return int The message id of the generated like or "false" if there was an error
         */
        private static function receive_like($importer, $sender, $data) {
-               $positive = notags(unxmlify($data->positive));
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
-               $parent_type = notags(unxmlify($data->parent_type));
                $parent_guid = notags(unxmlify($data->parent_guid));
-               $author = notags(unxmlify($data->author));
+               $parent_type = notags(unxmlify($data->parent_type));
+               $positive = notags(unxmlify($data->positive));
 
                // likes on comments aren't supported by Diaspora - only on posts
                // But maybe this will be supported in the future, so we will accept it.
@@ -1813,12 +1783,11 @@ class Diaspora {
         * @return bool Success?
         */
        private static function receive_message($importer, $data) {
+               $author = notags(unxmlify($data->author));
                $guid = notags(unxmlify($data->guid));
-               $parent_guid = notags(unxmlify($data->parent_guid));
+               $conversation_guid = notags(unxmlify($data->conversation_guid));
                $text = unxmlify($data->text);
                $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
-               $author = notags(unxmlify($data->author));
-               $conversation_guid = notags(unxmlify($data->conversation_guid));
 
                $contact = self::allowed_contact_by_handle($importer, $author, true);
                if (!$contact) {
@@ -1846,8 +1815,8 @@ class Diaspora {
                        return false;
                }
 
-               $r = q("SELECT `id` FROM `mail` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
-                       dbesc($message_uri),
+               $r = q("SELECT `id` FROM `mail` WHERE `guid` = '%s' AND `uid` = %d LIMIT 1",
+                       dbesc($guid),
                        intval($importer["uid"])
                );
                if (dbm::is_result($r)) {
@@ -1873,7 +1842,7 @@ class Diaspora {
                        0,
                        1,
                        dbesc($message_uri),
-                       dbesc($author.":".$parent_guid),
+                       dbesc($author.":".$conversation["guid"]),
                        dbesc($created_at)
                );
 
@@ -1942,9 +1911,9 @@ class Diaspora {
                $name = unxmlify($data->first_name).((strlen($data->last_name)) ? " ".unxmlify($data->last_name) : "");
                $image_url = unxmlify($data->image_url);
                $birthday = unxmlify($data->birthday);
-               $location = diaspora2bb(unxmlify($data->location));
-               $about = diaspora2bb(unxmlify($data->bio));
                $gender = unxmlify($data->gender);
+               $about = diaspora2bb(unxmlify($data->bio));
+               $location = diaspora2bb(unxmlify($data->location));
                $searchable = (unxmlify($data->searchable) == "true");
                $nsfw = (unxmlify($data->nsfw) == "true");
                $tags = unxmlify($data->tag_string);
@@ -2364,12 +2333,13 @@ class Diaspora {
         * @return int the message id
         */
        private static function receive_reshare($importer, $data, $xml) {
+               $author = notags(unxmlify($data->author));
+               $guid = notags(unxmlify($data->guid));
+               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
                $root_author = notags(unxmlify($data->root_author));
                $root_guid = notags(unxmlify($data->root_guid));
-               $guid = notags(unxmlify($data->guid));
-               $author = notags(unxmlify($data->author));
+               /// @todo handle unprocessed property "provider_display_name"
                $public = notags(unxmlify($data->public));
-               $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
 
                $contact = self::allowed_contact_by_handle($importer, $author, false);
                if (!$contact) {
@@ -2444,9 +2414,9 @@ class Diaspora {
         * @return bool success
         */
        private static function item_retraction($importer, $contact, $data) {
-               $target_type = notags(unxmlify($data->target_type));
-               $target_guid = notags(unxmlify($data->target_guid));
                $author = notags(unxmlify($data->author));
+               $target_guid = notags(unxmlify($data->target_guid));
+               $target_type = notags(unxmlify($data->target_type));
 
                $person = self::person_by_handle($author);
                if (!is_array($person)) {
@@ -2548,19 +2518,13 @@ class Diaspora {
         * @return int The message id of the newly created item
         */
        private static function receive_status_message($importer, $data, $xml) {
-               $raw_message = unxmlify($data->raw_message);
-               $guid = notags(unxmlify($data->guid));
                $author = notags(unxmlify($data->author));
-               $public = notags(unxmlify($data->public));
+               $guid = notags(unxmlify($data->guid));
                $created_at = datetime_convert("UTC", "UTC", notags(unxmlify($data->created_at)));
+               $public = notags(unxmlify($data->public));
+               $text = unxmlify($data->text);
                $provider_display_name = notags(unxmlify($data->provider_display_name));
 
-               /// @todo enable support for polls
-               //if ($data->poll) {
-               //      foreach ($data->poll AS $poll)
-               //              print_r($poll);
-               //      die("poll!\n");
-               //}
                $contact = self::allowed_contact_by_handle($importer, $author, false);
                if (!$contact) {
                        return false;
@@ -2578,7 +2542,7 @@ class Diaspora {
                        }
                }
 
-               $body = diaspora2bb($raw_message);
+               $body = diaspora2bb($text);
 
                $datarray = array();
 
@@ -2599,6 +2563,15 @@ class Diaspora {
                        }
                }
 
+               /// @todo enable support for polls
+               //if ($data->poll) {
+               //      foreach ($data->poll AS $poll)
+               //              print_r($poll);
+               //      die("poll!\n");
+               //}
+
+               /// @todo enable support for events
+
                $datarray["uid"] = $importer["uid"];
                $datarray["contact-id"] = $contact["id"];
                $datarray["network"] = NETWORK_DIASPORA;
@@ -3848,4 +3821,3 @@ class Diaspora {
                return true;
        }
 }
-?>