]> git.mxchange.org Git - friendica.git/commitdiff
Public posts are now transferred successfully to the DFRN part
authorMichael <heluecht@pirati.ca>
Sun, 22 Apr 2018 10:42:01 +0000 (10:42 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 22 Apr 2018 10:42:01 +0000 (10:42 +0000)
mod/dfrn_notify.php

index 9bd06c674802e16e798d6c204187da9f125ab275..86e1484f796dad205c323db49ba9eec80dd297ac 100644 (file)
@@ -25,24 +25,13 @@ function dfrn_notify_post(App $a) {
                $data = json_decode($postdata);
                if (is_object($data)) {
                        $nick = defaults($a->argv, 1, '');
-                       $public = empty($nick);
-                       if (!$public) {
-                               $user = dba::selectFirst('user', [], ['nickname' => $nick, 'account_expired' => false, 'account_removed' => false]);
-                               if (!DBM::is_result($user)) {
-                                       System::httpExit(500);
-                               }
-                       } else {
-                               // We don't need the user with public posts
-                               $user = [];
-                       }
-                       $msg = Diaspora::decodeRaw($user, $postdata);
 
-                       if ($public) {
-                               dfrn_dispatch_public($msg);
-                       } else {
-                               dfrn_dispatch_private($user, $msg);
+                       $user = dba::selectFirst('user', [], ['nickname' => $nick, 'account_expired' => false, 'account_removed' => false]);
+                       if (!DBM::is_result($user)) {
+                               System::httpExit(500);
                        }
-               } else {
+                       dfrn_dispatch_private($user, $postdata);
+               } elseif (!dfrn_dispatch_public($postdata)) {
                        require_once 'mod/salmon.php';
                        salmon_post($a, $postdata);
                }
@@ -207,10 +196,16 @@ function dfrn_notify_post(App $a) {
        // NOTREACHED
 }
 
-function dfrn_dispatch_public($msg)
+function dfrn_dispatch_public($postdata)
 {
+       $msg = Diaspora::decodeRaw([], $postdata);
+       if (!$msg) {
+               // We have to fail silently to be able to hand it over to the salmon parser
+               return false;
+       }
+
        // Fetch the corresponding public contact
-       $contact = getDetailsByAddr($msg['author'], 0);
+       $contact = Contact::getDetailsByAddr($msg['author'], 0);
        if (!$contact) {
                logger('Contact not found for address ' . $msg['author']);
                System::xmlExit(3, 'Contact not found');
@@ -220,7 +215,7 @@ function dfrn_dispatch_public($msg)
        $importer = dba::fetch_first("SELECT *, `name` as `senderName`
                                        FROM `contact`
                                        WHERE NOT `blocked` AND `id` = ? LIMIT 1",
-                                       $cid);
+                                       $contact['id']);
 
        // This should never fail
        if (!DBM::is_result($importer)) {
@@ -235,8 +230,13 @@ function dfrn_dispatch_public($msg)
        System::xmlExit($ret, 'Done');
 }
 
-function dfrn_dispatch_private($user, $msg)
+function dfrn_dispatch_private($user, $postdata)
 {
+       $msg = Diaspora::decodeRaw($user, $postdata);
+       if (!$msg) {
+               System::xmlExit(4, 'Unable to parse message');
+       }
+
        // Check if the user has got this contact
        $cid = Contact::getIdForURL($msg['author'], $user['uid']);
        if (!$cid) {