X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Freceive.php;h=95a51016757da46217f277e4b641799c43b1ec2c;hb=aded5e4127a04c3df7ff44a811b96057412adf37;hp=8514371242aa5c53cca1fbb7a8cb9012473c7ae5;hpb=70017ebb8ce0321976a55d686178715885d1b6a9;p=friendica.git diff --git a/mod/receive.php b/mod/receive.php index 8514371242..95a5101675 100644 --- a/mod/receive.php +++ b/mod/receive.php @@ -6,80 +6,71 @@ require_once('include/salmon.php'); -require_once('include/certfns.php'); +require_once('include/crypto.php'); require_once('include/diaspora.php'); - function receive_post(&$a) { - if($a->argc != 3 || $a->argv[1] !== 'users') - receive_return(500); - $guid = $a->argv[2]; + $enabled = intval(get_config('system','diaspora_enabled')); + if(! $enabled) { + logger('mod-diaspora: disabled'); + http_status_exit(500); + } - $r = q("SELECT * FROM `user` WHERE `guid` = '%s' LIMIT 1", - dbesc($guid) - ); - if(! count($r)) - receive_return(500); + $public = false; - $importer = $r[0]; + if(($a->argc == 2) && ($a->argv[1] === 'public')) { + $public = true; + } + else { - $xml = $_POST['xml']; + if($a->argc != 3 || $a->argv[1] !== 'users') + http_status_exit(500); - logger('mod-diaspora: new salmon ' . $xml, LOGGER_DATA); + $guid = $a->argv[2]; - if(! $xml) - receive_return(500); + $r = q("SELECT * FROM `user` WHERE `guid` = '%s' AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", + dbesc($guid) + ); + if(! count($r)) + http_status_exit(500); - $msg = diaspora_decode($importer,$xml); - if(! $msg) - receive_return(500); - - // If we reached this point, the message is good. - // Now let's figure out if the author is allowed to send us stuff. - - $r = q("SELECT * FROM `contact` WHERE `network` = 'dspr' AND ( `url` = '%s' OR `alias` = '%s') - AND `uid` = %d LIMIT 1", - dbesc($author_link), - dbesc($author_link), - intval($importer['uid']) - ); - if(! count($r)) { - logger('mod-diaspora: Author unknown to us.'); - } - - // is this a follower? Or have we ignored the person? - // If so we can not accept this post. - - if((count($r)) && (($r[0]['readonly']) || ($r[0]['rel'] == CONTACT_IS_FOLLOWER) || ($r[0]['blocked']))) { - logger('mod-diaspora: Ignoring this author.'); - receive_return(202); - // NOTREACHED + $importer = $r[0]; } - require_once('include/items.php'); + // It is an application/x-www-form-urlencoded - // Placeholder for hub discovery. We shouldn't find any hubs - // since we supplied the fake feed header - and it doesn't have any. + logger('mod-diaspora: receiving post', LOGGER_DEBUG); - $hub = ''; + $xml = urldecode($_POST['xml']); - /** - * - * anti-spam measure: consume_feed will accept a follow activity from - * this person (and nothing else) if there is no existing contact record. - * - */ + logger('mod-diaspora: new salmon ' . $xml, LOGGER_DATA); + + if(! $xml) + http_status_exit(500); - $contact_rec = ((count($r)) ? $r[0] : null); + logger('mod-diaspora: message is okay', LOGGER_DEBUG); + + $msg = diaspora_decode($importer,$xml); + logger('mod-diaspora: decoded', LOGGER_DEBUG); - receive_return(200); + logger('mod-diaspora: decoded msg: ' . print_r($msg,true), LOGGER_DATA); + if(! is_array($msg)) + http_status_exit(500); + logger('mod-diaspora: dispatching', LOGGER_DEBUG); + $ret = 0; + if($public) + diaspora_dispatch_public($msg); + else + $ret = diaspora_dispatch($importer,$msg); + http_status_exit(($ret) ? $ret : 200); + // NOTREACHED }