DFRN payload is receivable via the Diaspora transport layer
This commit is contained in:
parent
c01c0681c0
commit
9d83369d88
2 changed files with 51 additions and 5 deletions
|
@ -12,6 +12,7 @@ use Friendica\Core\System;
|
||||||
use Friendica\Database\DBM;
|
use Friendica\Database\DBM;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Protocol\DFRN;
|
use Friendica\Protocol\DFRN;
|
||||||
|
use Friendica\Protocol\Diaspora;
|
||||||
|
|
||||||
require_once 'include/items.php';
|
require_once 'include/items.php';
|
||||||
require_once 'include/event.php';
|
require_once 'include/event.php';
|
||||||
|
@ -19,9 +20,52 @@ require_once 'include/event.php';
|
||||||
function dfrn_notify_post(App $a) {
|
function dfrn_notify_post(App $a) {
|
||||||
logger(__function__, LOGGER_TRACE);
|
logger(__function__, LOGGER_TRACE);
|
||||||
|
|
||||||
if (empty($_POST)) {
|
$postdata = file_get_contents('php://input');
|
||||||
|
|
||||||
|
if (empty($_POST) || !empty($postdata)) {
|
||||||
|
$data = json_decode($postdata);
|
||||||
|
if (is_object($data)) {
|
||||||
|
$nick = defaults($a->argv, 1, '');
|
||||||
|
$user = dba::selectFirst('user', [], ['nickname' => $nick, 'account_expired' => false, 'account_removed' => false]);
|
||||||
|
if (!DBM::is_result($user)) {
|
||||||
|
System::httpExit(500);
|
||||||
|
}
|
||||||
|
$msg = Diaspora::decodeRaw($user, $postdata);
|
||||||
|
|
||||||
|
// Check if the user has got this contact
|
||||||
|
$cid = getIdForURL($msg['author'], $user['uid']);
|
||||||
|
if (!$cid) {
|
||||||
|
// Otherwise there should be a public contact
|
||||||
|
$cid = getIdForURL($msg['author']);
|
||||||
|
if (!$cid) {
|
||||||
|
logger('Contact not found for address ' . $msg['author']);
|
||||||
|
System::xmlExit(3, 'Contact not found');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We now have some contact, so we fetch it
|
||||||
|
$importer = dba::fetch_first("SELECT *, `name` as `senderName`
|
||||||
|
FROM `contact`
|
||||||
|
WHERE NOT `blocked` AND `id` = ? LIMIT 1",
|
||||||
|
$cid);
|
||||||
|
|
||||||
|
// This should never fail
|
||||||
|
if (!DBM::is_result($importer)) {
|
||||||
|
logger('Contact not found for address ' . $msg['author']);
|
||||||
|
System::xmlExit(3, 'Contact not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the user id. This is important if this is a public contact
|
||||||
|
$importer['uid'] = $user['uid'];
|
||||||
|
$importer['importer_uid'] = $user['uid'];
|
||||||
|
|
||||||
|
// Now we should be able to import it
|
||||||
|
$ret = DFRN::import($msg['message'], $importer);
|
||||||
|
System::xmlExit($ret, 'Processed');
|
||||||
|
} else {
|
||||||
require_once 'mod/salmon.php';
|
require_once 'mod/salmon.php';
|
||||||
salmon_post($a);
|
salmon_post($a, $postdata);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : '');
|
$dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : '');
|
||||||
|
|
|
@ -13,9 +13,11 @@ use Friendica\Util\Crypto;
|
||||||
|
|
||||||
require_once 'include/items.php';
|
require_once 'include/items.php';
|
||||||
|
|
||||||
function salmon_post(App $a) {
|
function salmon_post(App $a, $xml = '') {
|
||||||
|
|
||||||
|
if (empty($xml)) {
|
||||||
$xml = file_get_contents('php://input');
|
$xml = file_get_contents('php://input');
|
||||||
|
}
|
||||||
|
|
||||||
logger('new salmon ' . $xml, LOGGER_DATA);
|
logger('new salmon ' . $xml, LOGGER_DATA);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue