Public posts are now transferred successfully to the DFRN part

This commit is contained in:
Michael 2018-04-22 10:42:01 +00:00
parent c59b28a8c4
commit b77ae3a8a7

View file

@ -25,24 +25,13 @@ function dfrn_notify_post(App $a) {
$data = json_decode($postdata); $data = json_decode($postdata);
if (is_object($data)) { if (is_object($data)) {
$nick = defaults($a->argv, 1, ''); $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) { $user = dba::selectFirst('user', [], ['nickname' => $nick, 'account_expired' => false, 'account_removed' => false]);
dfrn_dispatch_public($msg); if (!DBM::is_result($user)) {
} else { System::httpExit(500);
dfrn_dispatch_private($user, $msg);
} }
} else { dfrn_dispatch_private($user, $postdata);
} elseif (!dfrn_dispatch_public($postdata)) {
require_once 'mod/salmon.php'; require_once 'mod/salmon.php';
salmon_post($a, $postdata); salmon_post($a, $postdata);
} }
@ -207,10 +196,16 @@ function dfrn_notify_post(App $a) {
// NOTREACHED // 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 // Fetch the corresponding public contact
$contact = getDetailsByAddr($msg['author'], 0); $contact = Contact::getDetailsByAddr($msg['author'], 0);
if (!$contact) { if (!$contact) {
logger('Contact not found for address ' . $msg['author']); logger('Contact not found for address ' . $msg['author']);
System::xmlExit(3, 'Contact not found'); System::xmlExit(3, 'Contact not found');
@ -220,7 +215,7 @@ function dfrn_dispatch_public($msg)
$importer = dba::fetch_first("SELECT *, `name` as `senderName` $importer = dba::fetch_first("SELECT *, `name` as `senderName`
FROM `contact` FROM `contact`
WHERE NOT `blocked` AND `id` = ? LIMIT 1", WHERE NOT `blocked` AND `id` = ? LIMIT 1",
$cid); $contact['id']);
// This should never fail // This should never fail
if (!DBM::is_result($importer)) { if (!DBM::is_result($importer)) {
@ -235,8 +230,13 @@ function dfrn_dispatch_public($msg)
System::xmlExit($ret, 'Done'); 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 // Check if the user has got this contact
$cid = Contact::getIdForURL($msg['author'], $user['uid']); $cid = Contact::getIdForURL($msg['author'], $user['uid']);
if (!$cid) { if (!$cid) {