]> git.mxchange.org Git - friendica.git/blob - mod/receive.php
Merge develop into 20171122_-_port_tagcloud
[friendica.git] / mod / receive.php
1 <?php
2
3 /**
4  * Diaspora endpoint
5  */
6
7 use Friendica\App;
8 use Friendica\Core\Config;
9 use Friendica\Database\DBM;
10 use Friendica\Protocol\Diaspora;
11
12 require_once('include/salmon.php');
13 require_once('include/crypto.php');
14
15 function receive_post(App $a) {
16         $enabled = intval(Config::get('system', 'diaspora_enabled'));
17         if (!$enabled) {
18                 logger('mod-diaspora: disabled');
19                 http_status_exit(500);
20         }
21
22         if (($a->argc == 2) && ($a->argv[1] === 'public')) {
23                 $public = true;
24                 $importer = false;
25         } else {
26                 $public = false;
27
28                 if ($a->argc != 3 || $a->argv[1] !== 'users') {
29                         http_status_exit(500);
30                 }
31                 $guid = $a->argv[2];
32
33                 $importer = dba::select('user', array(), array('guid' => $guid, 'account_expired' => false, 'account_removed' => false), array('limit' => 1));
34                 if (!DBM::is_result($importer)) {
35                         http_status_exit(500);
36                 }
37         }
38
39         // It is an application/x-www-form-urlencoded
40
41         logger('mod-diaspora: receiving post', LOGGER_DEBUG);
42
43         $xml = urldecode($_POST['xml']);
44
45         if (!$xml) {
46                 $postdata = file_get_contents("php://input");
47                 if ($postdata == '') {
48                         http_status_exit(500);
49                 }
50
51                 logger('mod-diaspora: message is in the new format', LOGGER_DEBUG);
52                 $msg = Diaspora::decodeRaw($importer, $postdata);
53         } else {
54                 logger('mod-diaspora: decode message in the old format', LOGGER_DEBUG);
55                 $msg = Diaspora::decode($importer, $xml);
56
57                 if ($public && !$msg) {
58                         logger('mod-diaspora: decode message in the new format', LOGGER_DEBUG);
59                         $msg = Diaspora::decodeRaw($importer, $xml);
60                 }
61         }
62
63         logger('mod-diaspora: decoded', LOGGER_DEBUG);
64
65         logger('mod-diaspora: decoded msg: ' . print_r($msg, true), LOGGER_DATA);
66
67         if (!is_array($msg)) {
68                 http_status_exit(500);
69         }
70
71         logger('mod-diaspora: dispatching', LOGGER_DEBUG);
72
73         $ret = true;
74         if ($public) {
75                 Diaspora::dispatchPublic($msg);
76         } else {
77                 $ret = Diaspora::dispatch($importer, $msg);
78         }
79
80         http_status_exit(($ret) ? 200 : 500);
81         // NOTREACHED
82 }
83