database & requests

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
pull/912/head
Maxence Lange 2020-06-17 12:41:58 -01:00
rodzic 09a6aac937
commit 745810e2b0
24 zmienionych plików z 147 dodań i 588 usunięć

Wyświetl plik

@ -52,16 +52,18 @@ return [
['name' => 'ActivityPub#actorAlias', 'url' => '/@{username}/', 'verb' => 'GET'], ['name' => 'ActivityPub#actorAlias', 'url' => '/@{username}/', 'verb' => 'GET'],
['name' => 'ActivityPub#inbox', 'url' => '/@{username}/inbox', 'verb' => 'POST'], ['name' => 'ActivityPub#inbox', 'url' => '/@{username}/inbox', 'verb' => 'POST'],
['name' => 'ActivityPub#sharedInbox', 'url' => '/inbox', 'verb' => 'POST'], ['name' => 'ActivityPub#sharedInbox', 'url' => '/inbox', 'verb' => 'POST'],
['name' => 'ActivityPub#outbox', 'url' => '/@{username}/outbox', 'verb' => 'POST'],
['name' => 'ActivityPub#outbox', 'url' => '/@{username}/outbox', 'verb' => 'GET'],
['name' => 'ActivityPub#outbox', 'url' => '/@{username}/outbox', 'verb' => 'POST'], // Check if needed
['name' => 'ActivityPub#followers', 'url' => '/@{username}/followers', 'verb' => 'GET'], ['name' => 'ActivityPub#followers', 'url' => '/@{username}/followers', 'verb' => 'GET'],
['name' => 'ActivityPub#following', 'url' => '/@{username}/following', 'verb' => 'GET'], ['name' => 'ActivityPub#following', 'url' => '/@{username}/following', 'verb' => 'GET'],
['name' => 'ActivityPub#displayPost', 'url' => '/@{username}/{token}', 'verb' => 'GET'],
['name' => 'OStatus#subscribe', 'url' => '/ostatus/follow/{uri}', 'verb' => 'GET'], ['name' => 'OStatus#subscribe', 'url' => '/ostatus/follow/{uri}', 'verb' => 'GET'],
['name' => 'OStatus#followRemote', 'url' => '/api/v1/ostatus/followRemote/{local}', 'verb' => 'GET'], ['name' => 'OStatus#followRemote', 'url' => '/api/v1/ostatus/followRemote/{local}', 'verb' => 'GET'],
['name' => 'OStatus#getLink', 'url' => '/api/v1/ostatus/link/{local}/{account}', 'verb' => 'GET'], ['name' => 'OStatus#getLink', 'url' => '/api/v1/ostatus/link/{local}/{account}', 'verb' => 'GET'],
['name' => 'ActivityPub#displayPost', 'url' => '/@{username}/{token}', 'verb' => 'GET'],
['name' => 'Local#streamHome', 'url' => '/api/v1/stream/home', 'verb' => 'GET'], ['name' => 'Local#streamHome', 'url' => '/api/v1/stream/home', 'verb' => 'GET'],
['name' => 'Local#streamNotifications', 'url' => '/api/v1/stream/notifications', 'verb' => 'GET'], ['name' => 'Local#streamNotifications', 'url' => '/api/v1/stream/notifications', 'verb' => 'GET'],
['name' => 'Local#streamTimeline', 'url' => '/api/v1/stream/timeline', 'verb' => 'GET'], ['name' => 'Local#streamTimeline', 'url' => '/api/v1/stream/timeline', 'verb' => 'GET'],

Wyświetl plik

@ -138,7 +138,7 @@ class StreamDetails extends ExtendedBase {
$this->output->writeln('* <info>Direct</info>: ' . json_encode($direct, JSON_PRETTY_PRINT)); $this->output->writeln('* <info>Direct</info>: ' . json_encode($direct, JSON_PRETTY_PRINT));
$this->output->writeln('* <info>Public</info>: ' . ($details->isPublic() ? 'true' : 'false')); $this->output->writeln('* <info>Public</info>: ' . ($details->isPublic() ? 'true' : 'false'));
$this->output->writeln('* <info>Federated</info>: ' . ($details->isFederated() ? 'true' : 'true')); $this->output->writeln('* <info>Federated</info>: ' . ($details->isFederated() ? 'true' : 'false'));
} }
} }

Wyświetl plik

@ -139,7 +139,6 @@ class Timeline extends ExtendedBase {
} }
/** /**
* @param Person $actor * @param Person $actor
* @param string $timeline * @param string $timeline
@ -147,19 +146,25 @@ class Timeline extends ExtendedBase {
* @throws Exception * @throws Exception
*/ */
private function displayStream(Person $actor, string $timeline) { private function displayStream(Person $actor, string $timeline) {
$this->streamRequest->setViewer($actor);
switch ($timeline) { switch ($timeline) {
case 'home': case 'home':
$stream = $this->streamRequest->getTimelineHome($actor, 0, $this->count); $stream = $this->streamRequest->getTimelineHome(0, $this->count);
$this->outputStreams($stream); $this->outputStreams($stream);
break; break;
case 'direct': case 'direct':
$stream = $this->streamRequest->getTimelineDirect($actor, 0, $this->count); $stream = $this->streamRequest->getTimelineDirect(0, $this->count);
$this->outputStreams($stream); $this->outputStreams($stream);
break; break;
case 'notifications': case 'notifications':
$stream = $this->streamRequest->getTimelineNotifications($actor, 0, $this->count); $stream = $this->streamRequest->getTimelineNotifications(0, $this->count);
$this->outputStreams($stream);
break;
case 'liked':
$stream = $this->streamRequest->getTimelineLiked(0, $this->count);
$this->outputStreams($stream); $this->outputStreams($stream);
break; break;
@ -175,7 +180,7 @@ class Timeline extends ExtendedBase {
default: default:
throw new Exception( throw new Exception(
'Unknown timeline. Try home, direct, local, global, notification.' 'Unknown timeline. Try home, direct, notifications, liked, local, global.'
); );
} }
} }

Wyświetl plik

@ -400,7 +400,7 @@ class LocalController extends Controller {
public function streamNotifications($since = 0, int $limit = 5): DataResponse { public function streamNotifications($since = 0, int $limit = 5): DataResponse {
try { try {
$this->initViewer(true); $this->initViewer(true);
$posts = $this->streamService->getStreamNotifications($this->viewer, $since, $limit); $posts = $this->streamService->getStreamNotifications($since, $limit);
return $this->success($posts); return $this->success($posts);
} catch (Exception $e) { } catch (Exception $e) {

Wyświetl plik

@ -36,10 +36,8 @@ use OC\BackgroundJob\TimedJob;
use OCA\Social\AppInfo\Application; use OCA\Social\AppInfo\Application;
use OCA\Social\Service\AccountService; use OCA\Social\Service\AccountService;
use OCA\Social\Service\CacheActorService; use OCA\Social\Service\CacheActorService;
use OCA\Social\Service\ConfigService;
use OCA\Social\Service\DocumentService; use OCA\Social\Service\DocumentService;
use OCA\Social\Service\HashtagService; use OCA\Social\Service\HashtagService;
use OCA\Social\Service\MiscService;
use OCP\AppFramework\QueryException; use OCP\AppFramework\QueryException;
@ -63,12 +61,6 @@ class Cache extends TimedJob {
/** @var HashtagService */ /** @var HashtagService */
private $hashtagService; private $hashtagService;
/** @var ConfigService */
private $configService;
/** @var MiscService */
private $miscService;
/** /**
* Cache constructor. * Cache constructor.
@ -91,8 +83,6 @@ class Cache extends TimedJob {
$this->cacheActorService = $c->query(CacheActorService::class); $this->cacheActorService = $c->query(CacheActorService::class);
$this->documentService = $c->query(DocumentService::class); $this->documentService = $c->query(DocumentService::class);
$this->hashtagService = $c->query(HashtagService::class); $this->hashtagService = $c->query(HashtagService::class);
$this->configService = $c->query(ConfigService::class);
$this->miscService = $c->query(MiscService::class);
$this->manageCache(); $this->manageCache();
} }

Wyświetl plik

@ -396,16 +396,17 @@ class StreamRequest extends StreamRequestBuilder {
* - someone wants to follow you (not yet) * - someone wants to follow you (not yet)
* - someone is following you (not yet) * - someone is following you (not yet)
* *
* @param Person $actor
* @param int $since * @param int $since
* @param int $limit * @param int $limit
* *
* @return Stream[] * @return Stream[]
* @throws DateTimeException * @throws DateTimeException
*/ */
public function getTimelineNotifications(Person $actor, int $since = 0, int $limit = 5): array { public function getTimelineNotifications(int $since = 0, int $limit = 5): array {
$qb = $this->getStreamSelectSql(); $qb = $this->getStreamSelectSql();
$actor = $qb->getViewer();
$qb->limitPaginate($since, $limit); $qb->limitPaginate($since, $limit);
$qb->selectDestFollowing('sd', ''); $qb->selectDestFollowing('sd', '');

Wyświetl plik

@ -1,39 +0,0 @@
<?php
/**
* Nextcloud - Social Support
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2018, Maxence Lange <maxence@artificial-owl.com>
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Social\Exceptions;
use Exception;
class RequestContentException extends Exception {
}

Wyświetl plik

@ -1,39 +0,0 @@
<?php
/**
* Nextcloud - Social Support
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2018, Maxence Lange <maxence@artificial-owl.com>
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Social\Exceptions;
use Exception;
class RequestNetworkException extends Exception {
}

Wyświetl plik

@ -1,39 +0,0 @@
<?php
/**
* Nextcloud - Social Support
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2018, Maxence Lange <maxence@artificial-owl.com>
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Social\Exceptions;
use Exception;
class RequestResultNotJsonException extends Exception {
}

Wyświetl plik

@ -1,39 +0,0 @@
<?php
/**
* Nextcloud - Social Support
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2018, Maxence Lange <maxence@artificial-owl.com>
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Social\Exceptions;
use Exception;
class RequestResultSizeException extends Exception {
}

Wyświetl plik

@ -1,39 +0,0 @@
<?php
/**
* Nextcloud - Social Support
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2018, Maxence Lange <maxence@artificial-owl.com>
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Social\Exceptions;
use Exception;
class RequestServerException extends Exception {
}

Wyświetl plik

@ -44,11 +44,11 @@ use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemNotFoundException; use OCA\Social\Exceptions\ItemNotFoundException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException; use daita\MySmallPhpTools\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException; use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException; use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException; use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException; use daita\MySmallPhpTools\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\StreamNotFoundException; use OCA\Social\Exceptions\StreamNotFoundException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;

Wyświetl plik

@ -41,11 +41,11 @@ use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemNotFoundException; use OCA\Social\Exceptions\ItemNotFoundException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException; use daita\MySmallPhpTools\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException; use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException; use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException; use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException; use daita\MySmallPhpTools\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Interfaces\IActivityPubInterface; use OCA\Social\Interfaces\IActivityPubInterface;
use OCA\Social\Interfaces\Internal\SocialAppNotificationInterface; use OCA\Social\Interfaces\Internal\SocialAppNotificationInterface;

Wyświetl plik

@ -30,6 +30,11 @@ declare(strict_types=1);
namespace OCA\Social\Service; namespace OCA\Social\Service;
use daita\MySmallPhpTools\Exceptions\RequestContentException;
use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use daita\MySmallPhpTools\Exceptions\RequestServerException;
use daita\MySmallPhpTools\Model\Request; use daita\MySmallPhpTools\Model\Request;
use daita\MySmallPhpTools\Traits\TArrayTools; use daita\MySmallPhpTools\Traits\TArrayTools;
use Exception; use Exception;
@ -43,11 +48,6 @@ use OCA\Social\Exceptions\ItemAlreadyExistsException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\NoHighPriorityRequestException; use OCA\Social\Exceptions\NoHighPriorityRequestException;
use OCA\Social\Exceptions\QueueStatusException; use OCA\Social\Exceptions\QueueStatusException;
use OCA\Social\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;
use OCA\Social\Model\ActivityPub\ACore; use OCA\Social\Model\ActivityPub\ACore;
@ -284,41 +284,20 @@ class ActivityService {
try { try {
$this->signatureService->signRequest($request, $queue); $this->signatureService->signRequest($request, $queue);
$this->curlService->request($request); $this->curlService->retrieveJson($request);
$this->requestQueueService->endRequest($queue, true); $this->requestQueueService->endRequest($queue, true);
} catch (UnauthorizedFediverseException $e) { } catch (UnauthorizedFediverseException | RequestResultNotJsonException $e) {
$this->requestQueueService->endRequest($queue, true); $this->requestQueueService->endRequest($queue, true);
} catch (RequestResultNotJsonException $e) { } catch (ActorDoesNotExistException | RequestContentException | RequestResultSizeException $e) {
$this->requestQueueService->endRequest($queue, true);
} catch (ActorDoesNotExistException $e) {
$this->miscService->log( $this->miscService->log(
'Error while managing request: ' . json_encode($request) . ' ' . $e->getMessage(), 1 'Error while managing request: ' . json_encode($request) . ' ' . get_class($e) . ': '
);
$this->requestQueueService->deleteRequest($queue);
} catch (RequestContentException $e) {
$this->miscService->log(
'Error while managing request: ' . json_encode($request) . ' ' . $e->getMessage(), 1
);
$this->requestQueueService->deleteRequest($queue);
} catch (RequestResultSizeException $e) {
$this->miscService->log(
'Error while managing request: ' . json_encode($request) . ' ' . $e->getMessage(), 1
);
$this->requestQueueService->deleteRequest($queue);
} catch (RequestServerException $e) {
$this->miscService->log(
'Temporary error while managing request: RequestServerException - ' . json_encode(
$request
) . ' - '
. $e->getMessage(), 1 . $e->getMessage(), 1
); );
$this->requestQueueService->endRequest($queue, false); $this->requestQueueService->deleteRequest($queue);
$this->failInstances[] = $host; } catch (RequestNetworkException | RequestServerException $e) {
} catch (RequestNetworkException $e) {
$this->miscService->log( $this->miscService->log(
'Temporary error while managing request: RequestNetworkException - ' . json_encode( 'Temporary error while managing request: RequestServerException - ' . json_encode($request)
$request . ' - ' . get_class($e) . ': ' . $e->getMessage(), 1
) . ' - ' . $e->getMessage(), 1
); );
$this->requestQueueService->endRequest($queue, false); $this->requestQueueService->endRequest($queue, false);
$this->failInstances[] = $host; $this->failInstances[] = $host;

Wyświetl plik

@ -31,6 +31,11 @@ namespace OCA\Social\Service;
use daita\MySmallPhpTools\Exceptions\MalformedArrayException; use daita\MySmallPhpTools\Exceptions\MalformedArrayException;
use daita\MySmallPhpTools\Exceptions\RequestContentException;
use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use daita\MySmallPhpTools\Exceptions\RequestServerException;
use daita\MySmallPhpTools\Traits\TArrayTools; use daita\MySmallPhpTools\Traits\TArrayTools;
use Exception; use Exception;
use OCA\Social\AP; use OCA\Social\AP;
@ -41,11 +46,6 @@ use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemAlreadyExistsException; use OCA\Social\Exceptions\ItemAlreadyExistsException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException;
use OCA\Social\Exceptions\RetrieveAccountFormatException; use OCA\Social\Exceptions\RetrieveAccountFormatException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;
@ -71,10 +71,6 @@ class CacheActorService {
private $miscService; private $miscService;
/** @var Person */
private $viewer = null;
/** /**
* CacheService constructor. * CacheService constructor.
* *
@ -98,7 +94,6 @@ class CacheActorService {
* @param Person $viewer * @param Person $viewer
*/ */
public function setViewer(Person $viewer) { public function setViewer(Person $viewer) {
$this->viewer = $viewer;
$this->cacheActorsRequest->setViewer($viewer); $this->cacheActorsRequest->setViewer($viewer);
} }

Wyświetl plik

@ -31,6 +31,10 @@ namespace OCA\Social\Service;
use daita\MySmallPhpTools\Exceptions\MalformedArrayException; use daita\MySmallPhpTools\Exceptions\MalformedArrayException;
use daita\MySmallPhpTools\Exceptions\RequestContentException;
use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use daita\MySmallPhpTools\Exceptions\RequestServerException;
use daita\MySmallPhpTools\Model\Request; use daita\MySmallPhpTools\Model\Request;
use daita\MySmallPhpTools\Traits\TArrayTools; use daita\MySmallPhpTools\Traits\TArrayTools;
use daita\MySmallPhpTools\Traits\TStringTools; use daita\MySmallPhpTools\Traits\TStringTools;
@ -40,11 +44,6 @@ use Gumlet\ImageResizeException;
use OCA\Social\Exceptions\CacheContentException; use OCA\Social\Exceptions\CacheContentException;
use OCA\Social\Exceptions\CacheContentMimeTypeException; use OCA\Social\Exceptions\CacheContentMimeTypeException;
use OCA\Social\Exceptions\CacheDocumentDoesNotExistException; use OCA\Social\Exceptions\CacheDocumentDoesNotExistException;
use OCA\Social\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;
use OCA\Social\Model\ActivityPub\Object\Document; use OCA\Social\Model\ActivityPub\Object\Document;
@ -122,7 +121,6 @@ class CacheDocumentService {
* @throws NotPermittedException * @throws NotPermittedException
* @throws RequestContentException * @throws RequestContentException
* @throws RequestNetworkException * @throws RequestNetworkException
* @throws RequestResultNotJsonException
* @throws RequestResultSizeException * @throws RequestResultSizeException
* @throws RequestServerException * @throws RequestServerException
* @throws SocialAppConfigException * @throws SocialAppConfigException
@ -260,7 +258,6 @@ class CacheDocumentService {
* @throws MalformedArrayException * @throws MalformedArrayException
* @throws RequestContentException * @throws RequestContentException
* @throws RequestNetworkException * @throws RequestNetworkException
* @throws RequestResultNotJsonException
* @throws RequestResultSizeException * @throws RequestResultSizeException
* @throws RequestServerException * @throws RequestServerException
* @throws SocialAppConfigException * @throws SocialAppConfigException
@ -273,7 +270,7 @@ class CacheDocumentService {
$request->setAddress($url['host']); $request->setAddress($url['host']);
$request->setProtocol($url['scheme']); $request->setProtocol($url['scheme']);
$content = $this->curlService->request($request); $content = $this->curlService->doRequest($request);
return $content; return $content;
} }

Wyświetl plik

@ -32,9 +32,15 @@ namespace OCA\Social\Service;
use daita\MySmallPhpTools\Exceptions\ArrayNotFoundException; use daita\MySmallPhpTools\Exceptions\ArrayNotFoundException;
use daita\MySmallPhpTools\Exceptions\MalformedArrayException; use daita\MySmallPhpTools\Exceptions\MalformedArrayException;
use daita\MySmallPhpTools\Exceptions\RequestContentException;
use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use daita\MySmallPhpTools\Exceptions\RequestServerException;
use daita\MySmallPhpTools\Model\Request; use daita\MySmallPhpTools\Model\Request;
use daita\MySmallPhpTools\Traits\TArrayTools; use daita\MySmallPhpTools\Traits\TArrayTools;
use daita\MySmallPhpTools\Traits\TPathTools; use daita\MySmallPhpTools\Traits\TPathTools;
use daita\MySmallPhpTools\Traits\TRequest;
use Exception; use Exception;
use OCA\Social\AP; use OCA\Social\AP;
use OCA\Social\Exceptions\HostMetaException; use OCA\Social\Exceptions\HostMetaException;
@ -42,11 +48,6 @@ use OCA\Social\Exceptions\InvalidOriginException;
use OCA\Social\Exceptions\InvalidResourceException; use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException;
use OCA\Social\Exceptions\RetrieveAccountFormatException; use OCA\Social\Exceptions\RetrieveAccountFormatException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;
@ -57,6 +58,12 @@ class CurlService {
use TArrayTools; use TArrayTools;
use TPathTools; use TPathTools;
use TRequest {
initRequestPost as initRequestPostOrig;
initRequestGet as initRequestGetOrig;
retrieveJson as retrieveJsonOrig;
doRequest as doRequestOrig;
}
const ASYNC_REQUEST_TOKEN = '/async/request/{token}'; const ASYNC_REQUEST_TOKEN = '/async/request/{token}';
@ -73,13 +80,6 @@ class CurlService {
private $miscService; private $miscService;
/** @var int */
private $maxDownloadSize = 0;
/** @var bool */
private $maxDownloadSizeReached = false;
/** /**
* CurlService constructor. * CurlService constructor.
* *
@ -93,6 +93,9 @@ class CurlService {
$this->configService = $configService; $this->configService = $configService;
$this->fediverseService = $fediverseService; $this->fediverseService = $fediverseService;
$this->miscService = $miscService; $this->miscService = $miscService;
$maxDlSize = $this->configService->getAppValue(ConfigService::SOCIAL_MAX_SIZE) * (1024 * 1024);
$this->setMaxDownloadSize($maxDlSize);
} }
@ -131,15 +134,8 @@ class CurlService {
$request = new Request($path); $request = new Request($path);
$request->addData('resource', 'acct:' . $account); $request->addData('resource', 'acct:' . $account);
$request->setAddress($host); $request->setAddress($host);
$request->setProtocols(['https', 'http']);
try { $result = $this->retrieveJson($request);
$result = $this->request($request);
} catch (RequestNetworkException $e) {
if ($e->getCode() === CURLE_COULDNT_CONNECT) {
$request->setProtocol('http');
$result = $this->request($request);
} else throw $e;
}
$subject = $this->get('subject', $result, ''); $subject = $this->get('subject', $result, '');
list($type, $temp) = explode(':', $subject, 2); list($type, $temp) = explode(':', $subject, 2);
@ -162,7 +158,7 @@ class CurlService {
$request->setAddress($host); $request->setAddress($host);
try { try {
$result = $this->request($request); $result = $this->retrieveJson($request);
} catch (Exception $e) { } catch (Exception $e) {
$this->miscService->log( $this->miscService->log(
'hostMeta Exception - ' . get_class($e) . ' - ' . $e->getMessage(), 0 'hostMeta Exception - ' . get_class($e) . ' - ' . $e->getMessage(), 0
@ -237,14 +233,13 @@ class CurlService {
* @throws UnauthorizedFediverseException * @throws UnauthorizedFediverseException
*/ */
public function retrieveObject($id): array { public function retrieveObject($id): array {
$url = parse_url($id); $url = parse_url($id);
$this->mustContains(['path', 'host', 'scheme'], $url); $this->mustContains(['path', 'host', 'scheme'], $url);
$request = new Request($url['path'], Request::TYPE_GET); $request = new Request($url['path'], Request::TYPE_GET);
$request->setAddress($url['host']); $request->setAddress($url['host']);
$request->setProtocol($url['scheme']); $request->setProtocol($url['scheme']);
$result = $this->request($request); $result = $this->retrieveJson($request);
if (is_array($result)) { if (is_array($result)) {
$result['_host'] = $request->getAddress(); $result['_host'] = $request->getAddress();
} }
@ -256,60 +251,46 @@ class CurlService {
/** /**
* @param Request $request * @param Request $request
* *
* @return mixed * @return array
* @throws SocialAppConfigException
* @throws UnauthorizedFediverseException
* @throws RequestContentException * @throws RequestContentException
* @throws RequestNetworkException * @throws RequestNetworkException
* @throws RequestResultNotJsonException * @throws RequestResultNotJsonException
* @throws RequestResultSizeException * @throws RequestResultSizeException
* @throws RequestServerException * @throws RequestServerException
*/
public function retrieveJson(Request $request): array {
try {
$result = $this->retrieveJsonOrig($request);
} catch (RequestResultSizeException | RequestResultNotJsonException $e) {
$this->miscService->log(
'[!!] request: ' . json_encode($request) . ' - content-type: '
. $request->getContentType() . ' - ' . $e->getMessage(), 1
);
throw $e;
}
return $result;
}
/**
* @param Request $request
*
* @return mixed
* @throws SocialAppConfigException * @throws SocialAppConfigException
* @throws UnauthorizedFediverseException * @throws UnauthorizedFediverseException
* @throws RequestContentException
* @throws RequestNetworkException
* @throws RequestResultSizeException
* @throws RequestServerException
*/ */
public function request(Request $request) { public function doRequest(Request $request) {
$this->fediverseService->authorized($request->getAddress()); $this->fediverseService->authorized($request->getAddress());
$this->maxDownloadSizeReached = false;
$this->assignUserAgent($request); $this->assignUserAgent($request);
$curl = $this->initRequest($request); return $this->doRequestOrig($request);
$this->initRequestGet($request);
$this->initRequestPost($curl, $request);
$this->initRequestPut($curl, $request);
$this->initRequestDelete($curl, $request);
$this->initRequestHeaders($curl, $request);
$result = curl_exec($curl);
if ($this->maxDownloadSizeReached === true) {
throw new RequestResultSizeException();
}
$this->parseRequestResult($curl, $request);
if ($request->isBinary()) {
$this->miscService->log('[>>] request (binary): ' . json_encode($request), 1);
return $result;
}
$this->miscService->log(
'[>>] request: ' . json_encode($request) . ' - content-type: '
. $request->getContentType() . ' - result: ' . $result, 1
);
if (strpos($request->getContentType(), 'application/xrd') === 0) {
$xml = simplexml_load_string($result);
$result = json_encode($xml, JSON_UNESCAPED_SLASHES);
$this->miscService->log('XRD conversion to JSON: ' . $result, 1);
}
$result = json_decode((string)$result, true);
if (is_array($result)) {
return $result;
}
throw new RequestResultNotJsonException();
} }
@ -340,7 +321,7 @@ class CurlService {
$request->setProtocol(parse_url($address, PHP_URL_SCHEME)); $request->setProtocol(parse_url($address, PHP_URL_SCHEME));
try { try {
$this->request($request); $this->retrieveJson($request);
} catch (RequestResultNotJsonException $e) { } catch (RequestResultNotJsonException $e) {
} catch (Exception $e) { } catch (Exception $e) {
$this->miscService->log( $this->miscService->log(
@ -353,73 +334,8 @@ class CurlService {
/** /**
* @param Request $request * @param Request $request
*
* @return resource
*/ */
private function initRequest(Request $request) { protected function initRequestGet(Request $request) {
$curl = $this->generateCurlRequest($request);
curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent());
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $request->getTimeout());
curl_setopt($curl, CURLOPT_TIMEOUT, $request->getTimeout());
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, $request->isBinary());
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$this->maxDownloadSize =
$this->configService->getAppValue(ConfigService::SOCIAL_MAX_SIZE) * (1024 * 1024);
curl_setopt($curl, CURLOPT_BUFFERSIZE, 128);
curl_setopt($curl, CURLOPT_NOPROGRESS, false);
curl_setopt(
/**
* @param $downloadSize
* @param int $downloaded
* @param $uploadSize
* @param int $uploaded
*
* @return int
*/
$curl, CURLOPT_PROGRESSFUNCTION,
function($downloadSize, int $downloaded, $uploadSize, int $uploaded) {
if ($downloaded > $this->maxDownloadSize) {
$this->maxDownloadSizeReached = true;
return 1;
}
return 0;
}
);
return $curl;
}
/**
* @param Request $request
*
* @return resource
*/
private function generateCurlRequest(Request $request) {
$url = $request->getProtocol() . '://' . $request->getAddress() . $request->getParsedUrl();
if ($request->getType() !== Request::TYPE_GET) {
$curl = curl_init($url);
} else {
$curl = curl_init($url . '?' . $request->getUrlData());
}
return $curl;
}
/**
* @param Request $request
*/
private function initRequestGet(Request $request) {
if ($request->getType() !== Request::TYPE_GET) { if ($request->getType() !== Request::TYPE_GET) {
return; return;
} }
@ -430,6 +346,8 @@ class CurlService {
$request->addHeader( $request->addHeader(
'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"' 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
); );
$this->initRequestGetOrig($request);
} }
@ -437,7 +355,7 @@ class CurlService {
* @param resource $curl * @param resource $curl
* @param Request $request * @param Request $request
*/ */
private function initRequestPost($curl, Request $request) { protected function initRequestPost($curl, Request $request) {
if ($request->getType() !== Request::TYPE_POST) { if ($request->getType() !== Request::TYPE_POST) {
return; return;
} }
@ -446,132 +364,7 @@ class CurlService {
'Content-Type: application/ld+json; profile="https://www.w3.org/ns/activitystreams"' 'Content-Type: application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
); );
curl_setopt($curl, CURLOPT_POST, true); $this->initRequestPostOrig($curl, $request);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getDataBody());
}
/**
* @param resource $curl
* @param Request $request
*/
private function initRequestPut($curl, Request $request) {
if ($request->getType() !== Request::TYPE_PUT) {
return;
}
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getDataBody());
}
/**
* @param resource $curl
* @param Request $request
*/
private function initRequestDelete($curl, Request $request) {
if ($request->getType() !== Request::TYPE_DELETE) {
return;
}
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_POSTFIELDS, $request->getDataBody());
}
/**
* @param resource $curl
* @param Request $request
*/
private function initRequestHeaders($curl, Request $request) {
$headers = $request->getHeaders();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
/**
* @param resource $curl
* @param Request $request
*
* @throws RequestContentException
* @throws RequestServerException
* @throws RequestNetworkException
*/
private function parseRequestResult($curl, Request &$request) {
$this->parseRequestResultCurl($curl, $request);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
$request->setContentType((is_null($type) || is_bool($type)) ? '' : $type);
$request->setResultCode($code);
$this->parseRequestResultCode301($code, $request);
$this->parseRequestResultCode4xx($code, $request);
$this->parseRequestResultCode5xx($code, $request);
}
/**
* @param resource $curl
* @param Request $request
*
* @throws RequestNetworkException
*/
private function parseRequestResultCurl($curl, Request $request) {
$errno = curl_errno($curl);
if ($errno > 0) {
throw new RequestNetworkException(
$errno . ' - ' . curl_error($curl) . ' - ' . json_encode(
$request, JSON_UNESCAPED_SLASHES
), $errno
);
}
}
/**
* @param int $code
* @param Request $request
*
* @throws RequestContentException
*/
private function parseRequestResultCode301($code, Request $request) {
if ($code === 301) {
throw new RequestContentException(
'301 - ' . json_encode($request, JSON_UNESCAPED_SLASHES)
);
}
}
/**
* @param int $code
* @param Request $request
*
* @throws RequestContentException
*/
private function parseRequestResultCode4xx(int $code, Request $request) {
if ($code === 404 || $code === 410) {
throw new RequestContentException(
$code . ' - ' . json_encode($request, JSON_UNESCAPED_SLASHES)
);
}
}
/**
* @param int $code
* @param Request $request
*
* @throws RequestServerException
*/
private function parseRequestResultCode5xx(int $code, Request $request) {
if ($code === 500) {
throw new RequestServerException(
$code . ' - ' . json_encode($request, JSON_UNESCAPED_SLASHES)
);
}
} }
} }

Wyświetl plik

@ -32,6 +32,11 @@ namespace OCA\Social\Service;
use daita\MySmallPhpTools\Exceptions\MalformedArrayException; use daita\MySmallPhpTools\Exceptions\MalformedArrayException;
use daita\MySmallPhpTools\Exceptions\RequestContentException;
use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use daita\MySmallPhpTools\Exceptions\RequestServerException;
use Exception; use Exception;
use OCA\Social\AP; use OCA\Social\AP;
use OCA\Social\Db\ActorsRequest; use OCA\Social\Db\ActorsRequest;
@ -42,11 +47,6 @@ use OCA\Social\Exceptions\CacheContentMimeTypeException;
use OCA\Social\Exceptions\CacheDocumentDoesNotExistException; use OCA\Social\Exceptions\CacheDocumentDoesNotExistException;
use OCA\Social\Exceptions\ItemAlreadyExistsException; use OCA\Social\Exceptions\ItemAlreadyExistsException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;
use OCA\Social\Exceptions\UrlCloudException; use OCA\Social\Exceptions\UrlCloudException;
@ -122,7 +122,6 @@ class DocumentService {
* @return Document * @return Document
* @throws CacheDocumentDoesNotExistException * @throws CacheDocumentDoesNotExistException
* @throws MalformedArrayException * @throws MalformedArrayException
* @throws RequestResultNotJsonException
* @throws SocialAppConfigException * @throws SocialAppConfigException
*/ */
public function cacheRemoteDocument(string $id, bool $public = false) { public function cacheRemoteDocument(string $id, bool $public = false) {
@ -217,10 +216,9 @@ class DocumentService {
* @throws CacheContentException * @throws CacheContentException
* @throws CacheDocumentDoesNotExistException * @throws CacheDocumentDoesNotExistException
* @throws MalformedArrayException * @throws MalformedArrayException
* @throws RequestResultNotJsonException
* @throws SocialAppConfigException * @throws SocialAppConfigException
*/ */
public function getFromCache(string $id, string &$mimeType = '', bool $public = false) { public function getFromCache(string $id, string &$mimeType = '', bool $public = false): ISimpleFile {
$document = $this->cacheRemoteDocument($id, $public); $document = $this->cacheRemoteDocument($id, $public);
$mimeType = $document->getMimeType(); $mimeType = $document->getMimeType();

Wyświetl plik

@ -41,11 +41,11 @@ use OCA\Social\Exceptions\InvalidOriginException;
use OCA\Social\Exceptions\InvalidResourceException; use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException; use daita\MySmallPhpTools\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException; use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException; use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException; use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException; use daita\MySmallPhpTools\Exceptions\RequestServerException;
use OCA\Social\Exceptions\RetrieveAccountFormatException; use OCA\Social\Exceptions\RetrieveAccountFormatException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;

Wyświetl plik

@ -38,11 +38,11 @@ use OCA\Social\Exceptions\InvalidOriginException;
use OCA\Social\Exceptions\InvalidResourceException; use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException; use daita\MySmallPhpTools\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException; use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException; use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException; use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException; use daita\MySmallPhpTools\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\StreamNotFoundException; use OCA\Social\Exceptions\StreamNotFoundException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;

Wyświetl plik

@ -46,11 +46,11 @@ use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\LinkedDataSignatureMissingException; use OCA\Social\Exceptions\LinkedDataSignatureMissingException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException; use daita\MySmallPhpTools\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException; use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException; use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException; use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException; use daita\MySmallPhpTools\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SignatureException; use OCA\Social\Exceptions\SignatureException;
use OCA\Social\Exceptions\SignatureIsGoneException; use OCA\Social\Exceptions\SignatureIsGoneException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;

Wyświetl plik

@ -42,11 +42,11 @@ use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\StreamNotFoundException; use OCA\Social\Exceptions\StreamNotFoundException;
use OCA\Social\Exceptions\QueueStatusException; use OCA\Social\Exceptions\QueueStatusException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException; use daita\MySmallPhpTools\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException; use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException; use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException; use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException; use daita\MySmallPhpTools\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;
use OCA\Social\Model\ActivityPub\Object\Note; use OCA\Social\Model\ActivityPub\Object\Note;

Wyświetl plik

@ -30,18 +30,19 @@ declare(strict_types=1);
namespace OCA\Social\Service; namespace OCA\Social\Service;
use daita\MySmallPhpTools\Exceptions\DateTimeException;
use daita\MySmallPhpTools\Exceptions\MalformedArrayException; use daita\MySmallPhpTools\Exceptions\MalformedArrayException;
use daita\MySmallPhpTools\Exceptions\RequestContentException;
use daita\MySmallPhpTools\Exceptions\RequestNetworkException;
use daita\MySmallPhpTools\Exceptions\RequestResultNotJsonException;
use daita\MySmallPhpTools\Exceptions\RequestResultSizeException;
use daita\MySmallPhpTools\Exceptions\RequestServerException;
use Exception; use Exception;
use OCA\Social\Db\StreamRequest; use OCA\Social\Db\StreamRequest;
use OCA\Social\Exceptions\InvalidOriginException; use OCA\Social\Exceptions\InvalidOriginException;
use OCA\Social\Exceptions\InvalidResourceException; use OCA\Social\Exceptions\InvalidResourceException;
use OCA\Social\Exceptions\ItemUnknownException; use OCA\Social\Exceptions\ItemUnknownException;
use OCA\Social\Exceptions\RedundancyLimitException; use OCA\Social\Exceptions\RedundancyLimitException;
use OCA\Social\Exceptions\RequestContentException;
use OCA\Social\Exceptions\RequestNetworkException;
use OCA\Social\Exceptions\RequestResultNotJsonException;
use OCA\Social\Exceptions\RequestResultSizeException;
use OCA\Social\Exceptions\RequestServerException;
use OCA\Social\Exceptions\SocialAppConfigException; use OCA\Social\Exceptions\SocialAppConfigException;
use OCA\Social\Exceptions\StreamNotFoundException; use OCA\Social\Exceptions\StreamNotFoundException;
use OCA\Social\Exceptions\UnauthorizedFediverseException; use OCA\Social\Exceptions\UnauthorizedFediverseException;
@ -81,10 +82,6 @@ class StreamService {
private $miscService; private $miscService;
/** @var Person */
private $viewer = null;
/** /**
* NoteService constructor. * NoteService constructor.
* *
@ -118,7 +115,6 @@ class StreamService {
* @param Person $viewer * @param Person $viewer
*/ */
public function setViewer(Person $viewer) { public function setViewer(Person $viewer) {
$this->viewer = $viewer;
$this->streamRequest->setViewer($viewer); $this->streamRequest->setViewer($viewer);
} }
@ -149,7 +145,7 @@ class StreamService {
* *
* @throws Exception * @throws Exception
*/ */
public function assignStream(Stream &$stream) { public function assignStream(Stream $stream) {
$stream->convertPublished(); $stream->convertPublished();
} }
@ -384,7 +380,6 @@ class StreamService {
* *
* @return Stream * @return Stream
* @throws StreamNotFoundException * @throws StreamNotFoundException
* @throws SocialAppConfigException
*/ */
public function getStreamById(string $id, bool $asViewer = false): Stream { public function getStreamById(string $id, bool $asViewer = false): Stream {
return $this->streamRequest->getStreamById($id, $asViewer); return $this->streamRequest->getStreamById($id, $asViewer);
@ -399,14 +394,15 @@ class StreamService {
* *
* @return Stream[] * @return Stream[]
* @throws StreamNotFoundException * @throws StreamNotFoundException
* @throws DateTimeException
*/ */
public function getRepliesByParentId(string $id, int $since = 0, int $limit = 5, bool $asViewer = false): array { public function getRepliesByParentId(string $id, int $since = 0, int $limit = 5, bool $asViewer = false
): array {
return $this->streamRequest->getRepliesByParentId($id, $since, $limit, $asViewer); return $this->streamRequest->getRepliesByParentId($id, $since, $limit, $asViewer);
} }
/** /**
* @param Person $actor
* @param int $since * @param int $since
* @param int $limit * @param int $limit
* *
@ -419,15 +415,14 @@ class StreamService {
/** /**
* @param Person $actor
* @param int $since * @param int $since
* @param int $limit * @param int $limit
* *
* @return Note[] * @return Note[]
* @throws Exception * @throws Exception
*/ */
public function getStreamNotifications(Person $actor, int $since = 0, int $limit = 5): array { public function getStreamNotifications(int $since = 0, int $limit = 5): array {
return $this->streamRequest->getTimelineNotifications($actor, $since, $limit); return $this->streamRequest->getTimelineNotifications($since, $limit);
} }
@ -445,7 +440,6 @@ class StreamService {
/** /**
* @param Person $actor
* @param int $since * @param int $since
* @param int $limit * @param int $limit
* *
@ -470,7 +464,6 @@ class StreamService {
/** /**
* @param Person $actor
* @param string $hashtag * @param string $hashtag
* @param int $since * @param int $since
* @param int $limit * @param int $limit

3
package-lock.json wygenerowano
Wyświetl plik

@ -10083,7 +10083,8 @@
"jquery": { "jquery": {
"version": "3.5.1", "version": "3.5.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
"integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==",
"optional": true
}, },
"js-base64": { "js-base64": {
"version": "2.5.1", "version": "2.5.1",