kopia lustrzana https://github.com/nextcloud/social
start migration to a better QueryBuilder.
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>pull/730/head
rodzic
ea34bc6e70
commit
2ea24d7785
|
@ -60,7 +60,7 @@ return [
|
|||
['name' => 'OStatus#followRemote', 'url' => '/api/v1/ostatus/followRemote/{local}', 'verb' => 'GET'],
|
||||
['name' => 'OStatus#getLink', 'url' => '/api/v1/ostatus/link/{local}/{account}', 'verb' => 'GET'],
|
||||
|
||||
['name' => 'SocialPub#displayPost', 'url' => '/@{username}/{token}', 'verb' => 'GET'],
|
||||
['name' => 'ActivityPub#displayPost', 'url' => '/@{username}/{token}', 'verb' => 'GET'],
|
||||
|
||||
['name' => 'Local#streamHome', 'url' => '/api/v1/stream/home', 'verb' => 'GET'],
|
||||
['name' => 'Local#streamNotifications', 'url' => '/api/v1/stream/notifications', 'verb' => 'GET'],
|
||||
|
|
|
@ -42,12 +42,14 @@ use OCA\Social\Exceptions\SocialAppConfigException;
|
|||
use OCA\Social\Exceptions\StreamNotFoundException;
|
||||
use OCA\Social\Exceptions\UrlCloudException;
|
||||
use OCA\Social\Service\CacheActorService;
|
||||
use OCA\Social\Service\ConfigService;
|
||||
use OCA\Social\Service\FediverseService;
|
||||
use OCA\Social\Service\FollowService;
|
||||
use OCA\Social\Service\ImportService;
|
||||
use OCA\Social\Service\MiscService;
|
||||
use OCA\Social\Service\SignatureService;
|
||||
use OCA\Social\Service\StreamQueueService;
|
||||
use OCA\Social\Service\StreamService;
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Http\Response;
|
||||
use OCP\IRequest;
|
||||
|
@ -82,6 +84,12 @@ class ActivityPubController extends Controller {
|
|||
/** @var FollowService */
|
||||
private $followService;
|
||||
|
||||
/** @var StreamService */
|
||||
private $streamService;
|
||||
|
||||
/** @var ConfigService */
|
||||
private $configService;
|
||||
|
||||
/** @var MiscService */
|
||||
private $miscService;
|
||||
|
||||
|
@ -97,13 +105,16 @@ class ActivityPubController extends Controller {
|
|||
* @param StreamQueueService $streamQueueService
|
||||
* @param ImportService $importService
|
||||
* @param FollowService $followService
|
||||
* @param StreamService $streamService
|
||||
* @param ConfigService $configService
|
||||
* @param MiscService $miscService
|
||||
*/
|
||||
public function __construct(
|
||||
IRequest $request, SocialPubController $socialPubController,
|
||||
FediverseService $fediverseService, CacheActorService $cacheActorService,
|
||||
SignatureService $signatureService, StreamQueueService $streamQueueService,
|
||||
ImportService $importService, FollowService $followService, MiscService $miscService
|
||||
ImportService $importService, FollowService $followService, StreamService $streamService,
|
||||
ConfigService $configService, MiscService $miscService
|
||||
) {
|
||||
parent::__construct(Application::APP_NAME, $request);
|
||||
|
||||
|
@ -114,6 +125,8 @@ class ActivityPubController extends Controller {
|
|||
$this->streamQueueService = $streamQueueService;
|
||||
$this->importService = $importService;
|
||||
$this->followService = $followService;
|
||||
$this->streamService = $streamService;
|
||||
$this->configService = $configService;
|
||||
$this->miscService = $miscService;
|
||||
}
|
||||
|
||||
|
@ -231,7 +244,7 @@ class ActivityPubController extends Controller {
|
|||
$this->miscService->log('[<<] inbox: ' . $body, 1);
|
||||
|
||||
$requestTime = 0;
|
||||
$origin = $this->signatureService->checkRequest($this->request, $body,$requestTime);
|
||||
$origin = $this->signatureService->checkRequest($this->request, $body, $requestTime);
|
||||
$this->fediverseService->authorized($origin);
|
||||
|
||||
// TODO - check the recipient <-> username
|
||||
|
@ -288,7 +301,6 @@ class ActivityPubController extends Controller {
|
|||
* @throws SocialAppConfigException
|
||||
*/
|
||||
public function followers(string $username): Response {
|
||||
|
||||
if (!$this->checkSourceActivityStreams()) {
|
||||
return $this->socialPubController->followers($username);
|
||||
}
|
||||
|
@ -334,18 +346,24 @@ class ActivityPubController extends Controller {
|
|||
* @PublicPage
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $postId
|
||||
* @param string $token
|
||||
*
|
||||
* @return Response
|
||||
* @throws SocialAppConfigException
|
||||
* @throws StreamNotFoundException
|
||||
*/
|
||||
public function displayPost(string $username, string $postId) {
|
||||
public function displayPost(string $username, string $token): Response {
|
||||
if (!$this->checkSourceActivityStreams()) {
|
||||
return $this->socialPubController->displayPost($username, $postId);
|
||||
return $this->socialPubController->displayPost($username, $token);
|
||||
}
|
||||
|
||||
return $this->success([$username, $postId]);
|
||||
// TODO - check viewer rights !
|
||||
$postId = $this->configService->getSocialUrl() . '@' . $username . '/' . $token;
|
||||
$stream = $this->streamService->getStreamById($postId, false);
|
||||
|
||||
$stream->setCompleteDetails(false);
|
||||
|
||||
return $this->directSuccess($stream);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -36,8 +36,8 @@ use DateInterval;
|
|||
use DateTime;
|
||||
use Doctrine\DBAL\Query\QueryBuilder;
|
||||
use Exception;
|
||||
use OC;
|
||||
use OC\DB\SchemaWrapper;
|
||||
use OC\SystemConfig;
|
||||
use OCA\Social\AP;
|
||||
use OCA\Social\Exceptions\DateTimeException;
|
||||
use OCA\Social\Exceptions\InvalidResourceException;
|
||||
|
@ -92,6 +92,8 @@ class CoreRequestBuilder {
|
|||
self::TABLE_STREAM_ACTIONS
|
||||
];
|
||||
|
||||
protected $logger;
|
||||
|
||||
/** @var IDBConnection */
|
||||
protected $dbConnection;
|
||||
|
||||
|
@ -102,41 +104,44 @@ class CoreRequestBuilder {
|
|||
protected $miscService;
|
||||
|
||||
|
||||
/** @var string */
|
||||
protected $defaultSelectAlias;
|
||||
|
||||
/** @var Person */
|
||||
protected $viewer = null;
|
||||
|
||||
/** @var string */
|
||||
protected $defaultSelectAlias;
|
||||
|
||||
|
||||
/**
|
||||
* CoreRequestBuilder constructor.
|
||||
*
|
||||
* @param IDBConnection $connection
|
||||
* @param ILogger $logger
|
||||
* @param ConfigService $configService
|
||||
* @param MiscService $miscService
|
||||
*/
|
||||
public function __construct(
|
||||
IDBConnection $connection, ConfigService $configService, MiscService $miscService
|
||||
IDBConnection $connection, ILogger $logger, ConfigService $configService, MiscService $miscService
|
||||
) {
|
||||
$this->dbConnection = $connection;
|
||||
$this->logger = $logger;
|
||||
$this->configService = $configService;
|
||||
$this->miscService = $miscService;
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * @return SocialQueryBuilder
|
||||
// */
|
||||
// public function getQueryBuilder(): SocialQueryBuilder {
|
||||
// $qb = new SocialQueryBuilder(
|
||||
// $this->dbConnection,
|
||||
// $this->config,
|
||||
// $this->logger
|
||||
// );
|
||||
//
|
||||
// return $qb;
|
||||
// }
|
||||
/**
|
||||
* @return SocialQueryBuilder
|
||||
*/
|
||||
public function getQueryBuilder(): SocialQueryBuilder {
|
||||
$qb = new SocialQueryBuilder(
|
||||
$this->dbConnection,
|
||||
OC::$server->getSystemConfig(),
|
||||
$this->logger
|
||||
);
|
||||
|
||||
return $qb;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -540,6 +545,8 @@ class CoreRequestBuilder {
|
|||
$qb->orderBy($pf . '.published_time', 'desc');
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
|
||||
/**
|
||||
* @param IQueryBuilder $qb
|
||||
|
|
|
@ -32,6 +32,10 @@ namespace OCA\Social\Db;
|
|||
|
||||
|
||||
use daita\MySmallPhpTools\Db\ExtendedQueryBuilder;
|
||||
use DateInterval;
|
||||
use DateTime;
|
||||
use Exception;
|
||||
use OCA\Social\Model\ActivityPub\Actor\Person;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -41,6 +45,41 @@ use daita\MySmallPhpTools\Db\ExtendedQueryBuilder;
|
|||
*/
|
||||
class SocialQueryBuilder extends ExtendedQueryBuilder {
|
||||
|
||||
|
||||
/** @var Person */
|
||||
private $viewer = null;
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function hasViewer(): bool {
|
||||
return ($this->viewer !== null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Person $viewer
|
||||
*/
|
||||
public function setViewer(Person $viewer): void {
|
||||
$this->viewer = $viewer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Person
|
||||
*/
|
||||
public function getViewer(): Person {
|
||||
return $this->viewer;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $id
|
||||
*/
|
||||
public function generatePrimaryKey(string $id) {
|
||||
$this->setValue('id_prim', $this->createNamedParameter(hash('sha512', $id)));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the Type
|
||||
*
|
||||
|
@ -54,5 +93,251 @@ class SocialQueryBuilder extends ExtendedQueryBuilder {
|
|||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the ActivityId
|
||||
*
|
||||
* @param string $activityId
|
||||
*/
|
||||
protected function limitToActivityId(string $activityId) {
|
||||
$this->limitToDBField('activity_id', $activityId, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the Id (string)
|
||||
*
|
||||
* @param string $id
|
||||
*/
|
||||
protected function limitToInReplyTo(string $id) {
|
||||
$this->limitToDBField('in_reply_to', $id, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the sub-type
|
||||
*
|
||||
* @param string $subType
|
||||
*/
|
||||
protected function limitToSubType(string $subType) {
|
||||
$this->limitToDBField('subtype', $subType);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*/
|
||||
protected function filterType(string $type) {
|
||||
$this->filterDBField('type', $type);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the Preferred Username
|
||||
*
|
||||
* @param string $username
|
||||
*/
|
||||
protected function limitToPreferredUsername(string $username) {
|
||||
$this->limitToDBField('preferred_username', $username, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* search using username
|
||||
*
|
||||
* @param string $username
|
||||
*/
|
||||
protected function searchInPreferredUsername(string $username) {
|
||||
$dbConn = $this->getConnection();
|
||||
$this->searchInDBField('preferred_username', $dbConn->escapeLikeParameter($username) . '%');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the ActorId
|
||||
*/
|
||||
protected function limitToPublic() {
|
||||
$this->limitToDBFieldInt('public', 1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the token
|
||||
*
|
||||
* @param string $token
|
||||
*/
|
||||
protected function limitToToken(string $token) {
|
||||
$this->limitToDBField('token', $token);
|
||||
}
|
||||
|
||||
/**
|
||||
* Limit the results to a given number
|
||||
*
|
||||
* @param int $limit
|
||||
*/
|
||||
protected function limitResults(int $limit) {
|
||||
$this->setMaxResults($limit);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the ActorId
|
||||
*
|
||||
* @param string $hashtag
|
||||
*/
|
||||
protected function limitToHashtag(string $hashtag) {
|
||||
$this->limitToDBField('hashtag', $hashtag, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the ActorId
|
||||
*
|
||||
* @param string $hashtag
|
||||
* @param bool $all
|
||||
*/
|
||||
protected function searchInHashtag(string $hashtag, bool $all = false) {
|
||||
$dbConn = $this->getConnection();
|
||||
$this->searchInDBField('hashtag', (($all) ? '%' : '') . $dbConn->escapeLikeParameter($hashtag) . '%');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the ActorId
|
||||
*
|
||||
* @param string $actorId
|
||||
* @param string $alias
|
||||
*/
|
||||
protected function limitToActorId(string $actorId, string $alias = '') {
|
||||
$this->limitToDBField('actor_id', $actorId, false, $alias);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the FollowId
|
||||
*
|
||||
* @param string $followId
|
||||
*/
|
||||
protected function limitToFollowId(string $followId) {
|
||||
$this->limitToDBField('follow_id', $followId, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the FollowId
|
||||
*
|
||||
* @param bool $accepted
|
||||
* @param string $alias
|
||||
*/
|
||||
protected function limitToAccepted(bool $accepted, string $alias = '') {
|
||||
$this->limitToDBField('accepted', ($accepted) ? '1' : '0', true, $alias);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the ServiceId
|
||||
*
|
||||
* @param string $objectId
|
||||
*/
|
||||
protected function limitToObjectId(string $objectId) {
|
||||
$this->limitToDBField('object_id', $objectId, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the account
|
||||
*
|
||||
* @param string $account
|
||||
*/
|
||||
protected function limitToAccount(string $account) {
|
||||
$this->limitToDBField('account', $account, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the account
|
||||
*
|
||||
* @param string $account
|
||||
*/
|
||||
protected function searchInAccount(string $account) {
|
||||
$dbConn = $this->getConnection();
|
||||
$this->searchInDBField('account', $dbConn->escapeLikeParameter($account) . '%');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the creation
|
||||
*
|
||||
* @param int $delay
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function limitToCaching(int $delay = 0) {
|
||||
$date = new DateTime('now');
|
||||
$date->sub(new DateInterval('PT' . $delay . 'M'));
|
||||
|
||||
$this->limitToDBFieldDateTime('caching', $date, true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the url
|
||||
*
|
||||
* @param string $url
|
||||
*/
|
||||
protected function limitToUrl(string $url) {
|
||||
$this->limitToDBField('url', $url);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the url
|
||||
*
|
||||
* @param string $actorId
|
||||
*/
|
||||
protected function limitToAttributedTo(string $actorId) {
|
||||
$this->limitToDBField('attributed_to', $actorId, false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the status
|
||||
*
|
||||
* @param int $status
|
||||
*/
|
||||
protected function limitToStatus(int $status) {
|
||||
$this->limitToDBFieldInt('status', $status);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the instance
|
||||
*
|
||||
* @param string $address
|
||||
*/
|
||||
protected function limitToAddress(string $address) {
|
||||
$this->limitToDBField('address', $address);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the instance
|
||||
*
|
||||
* @param bool $local
|
||||
*/
|
||||
protected function limitToLocal(bool $local) {
|
||||
$this->limitToDBField('local', ($local) ? '1' : '0');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Limit the request to the parent_id
|
||||
*
|
||||
* @param string $parentId
|
||||
*/
|
||||
protected function limitToParentId(string $parentId) {
|
||||
$this->limitToDBField('parent_id', $parentId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue