<?php
/**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n;
use Friendica\Model\User;
+use Friendica\Module\Response;
use Friendica\Network\HTTPException;
use Friendica\Protocol\Diaspora;
use Friendica\Util\Network;
/** @var IManageConfigValues */
protected $config;
- public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, IManageConfigValues $config, array $server, array $parameters = [])
+ public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IManageConfigValues $config, array $server, array $parameters = [])
{
- parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $server, $parameters);
+ parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
$this->config = $config;
}
- protected function post(array $request = [], array $post = [])
+ protected function post(array $request = [])
{
$enabled = $this->config->get('system', 'diaspora_enabled', false);
if (!$enabled) {
/**
* Receive a public Diaspora posting
*
+ * @return void
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
$this->logger->info('Diaspora: Dispatching.');
- Diaspora::dispatchPublic($msg);
+ Diaspora::dispatchPublic($msg, Diaspora::PUSHED);
}
/**
* Receive a Diaspora posting for a user
*
+ * @return void
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
$this->logger->info('Diaspora: Receiving post.');
$importer = User::getByGuid($this->parameters['guid']);
+ if (empty($importer)) {
+ // We haven't found the user.
+ // To avoid the remote system trying again we send the message that we accepted the content.
+ throw new HTTPException\AcceptedException();
+ }
+
+ if ($importer['account-type'] == User::ACCOUNT_TYPE_COMMUNITY) {
+ // Communities aren't working with the Diaspora protocol
+ // We throw an "accepted" here, so that the sender doesn't repeat the delivery
+ throw new HTTPException\AcceptedException();
+ }
- $msg = $this->decodePost(false, $importer['prvkey'] ?? '');
+ $msg = $this->decodePost(false, $importer['prvkey']);
$this->logger->info('Diaspora: Dispatching.');
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- private function decodePost(bool $public = true, string $privKey = '')
+ private function decodePost(bool $public = true, string $privKey = ''): array
{
if (empty($_POST['xml'])) {