fix(fediverse): set model instances as non shared to prevent overlapping

This commit is contained in:
Yassine Doghri 2022-02-05 11:40:30 +00:00
parent d9d139eefa
commit 91128fad7a
14 changed files with 79 additions and 79 deletions

View File

@ -198,7 +198,7 @@ class Podcast extends Entity
if ($this->actor === null) {
// @phpstan-ignore-next-line
$this->actor = model(ActorModel::class)
$this->actor = model(ActorModel::class, false)
->getActorById($this->actor_id);
}

View File

@ -75,7 +75,7 @@ if (! function_exists('interact_as_actor')) {
$session = session();
if ($session->has('interact_as_actor_id')) {
return model(ActorModel::class)->getActorById($session->get('interact_as_actor_id'));
return model(ActorModel::class, false)->getActorById($session->get('interact_as_actor_id'));
}
return false;

View File

@ -21,7 +21,7 @@ class FediverseController extends BaseController
{
helper(['form']);
$blockedActors = model('ActorModel')
$blockedActors = model('ActorModel', false)
->getBlockedActors();
return view('fediverse/blocked_actors', [
@ -33,7 +33,7 @@ class FediverseController extends BaseController
{
helper(['form']);
$blockedDomains = model('BlockedDomainModel')
$blockedDomains = model('BlockedDomainModel', false)
->getBlockedDomains();
return view('fediverse/blocked_domains', [

View File

@ -44,7 +44,7 @@ class ActorController extends Controller
}
if (
($actor = model('ActorModel')->getActorByUsername($params[0])) === null
($actor = model('ActorModel', false)->getActorByUsername($params[0])) === null
) {
throw PageNotFoundException::forPageNotFound();
}
@ -82,7 +82,7 @@ class ActorController extends Controller
$payloadActor = get_or_create_actor_from_uri($payload->actor);
// store activity to database
$activityId = model('ActivityModel')
$activityId = model('ActivityModel', false)
->newActivity(
$payload->type,
$payloadActor->id,
@ -101,7 +101,7 @@ class ActorController extends Controller
->setJSON([]);
}
$replyToPost = model('PostModel')
$replyToPost = model('PostModel', false)
->getPostByUri($payload->object->inReplyTo);
$reply = null;
@ -120,10 +120,10 @@ class ActorController extends Controller
}
if ($reply !== null) {
$postId = model('PostModel')
$postId = model('PostModel', false)
->addReply($reply, true, false);
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'post_id' => $postId,
]);
@ -136,11 +136,11 @@ class ActorController extends Controller
return $this->response->setStatusCode(501)
->setJSON([]);
case 'Delete':
$postToDelete = model('PostModel')
$postToDelete = model('PostModel', false)
->getPostByUri($payload->object->id);
if ($postToDelete !== null) {
model('PostModel')
model('PostModel', false)
->removePost($postToDelete, false);
}
@ -148,7 +148,7 @@ class ActorController extends Controller
->setJSON([]);
case 'Follow':
// add to followers table
model('FollowModel')
model('FollowModel', false)
->addFollower($payloadActor, $this->actor, false);
// Automatically accept follow by returning accept activity
@ -160,15 +160,15 @@ class ActorController extends Controller
case 'Like':
// get favourited post
$post = model('PostModel')
$post = model('PostModel', false)
->getPostByUri($payload->object);
if ($post !== null) {
// Like side-effect
model('FavouriteModel')
model('FavouriteModel', false)
->addFavourite($payloadActor, $post, false);
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'post_id' => $post->id,
]);
@ -177,16 +177,16 @@ class ActorController extends Controller
return $this->response->setStatusCode(200)
->setJSON([]);
case 'Announce':
$post = model('PostModel')
$post = model('PostModel', false)
->getPostByUri($payload->object);
if ($post !== null) {
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'post_id' => $post->id,
]);
model('PostModel')
model('PostModel', false)
->reblog($payloadActor, $post, false);
}
@ -198,22 +198,22 @@ class ActorController extends Controller
switch ($payload->object->type) {
case 'Follow':
// revert side-effect by removing follow from database
model('FollowModel')
model('FollowModel', false)
->removeFollower($payloadActor, $this->actor, false);
// TODO: undo has been accepted! (202 - Accepted)
return $this->response->setStatusCode(202)
->setJSON([]);
case 'Like':
$post = model('PostModel')
$post = model('PostModel', false)
->getPostByUri($payload->object->object);
if ($post !== null) {
// revert side-effect by removing favourite from database
model('FavouriteModel')
model('FavouriteModel', false)
->removeFavourite($payloadActor, $post, false);
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'post_id' => $post->id,
]);
@ -222,12 +222,12 @@ class ActorController extends Controller
return $this->response->setStatusCode(200)
->setJSON([]);
case 'Announce':
$post = model('PostModel')
$post = model('PostModel', false)
->getPostByUri($payload->object->object);
$reblogPost = null;
if ($post !== null) {
$reblogPost = model('PostModel')
$reblogPost = model('PostModel', false)
->where([
'actor_id' => $payloadActor->id,
'reblog_of_id' => service('uuid')
@ -238,10 +238,10 @@ class ActorController extends Controller
}
if ($reblogPost !== null) {
model('PostModel')
model('PostModel', false)
->undoReblog($reblogPost, false);
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'post_id' => $post->id,
]);
@ -268,7 +268,7 @@ class ActorController extends Controller
public function outbox(): ResponseInterface
{
// get published activities by publication date
$actorActivity = model('ActivityModel')
$actorActivity = model('ActivityModel', false)
->where('actor_id', $this->actor->id)
->where('`created_at` <= NOW()', null, false)
->orderBy('created_at', 'DESC');
@ -303,7 +303,7 @@ class ActorController extends Controller
->tablesPrefix;
// get followers for a specific actor
$followers = model('ActorModel')
$followers = model('ActorModel', false)
->join($tablesPrefix . 'follows', $tablesPrefix . 'follows.actor_id = id', 'inner')
->where($tablesPrefix . 'follows.target_actor_id', $this->actor->id)
->orderBy($tablesPrefix . 'follows.created_at', 'DESC');
@ -383,7 +383,7 @@ class ActorController extends Controller
public function activity(string $activityId): ResponseInterface
{
if (
! ($activity = model('ActivityModel')->getActivityById($activityId))
! ($activity = model('ActivityModel', false)->getActivityById($activityId))
) {
throw PageNotFoundException::forPageNotFound();
}

View File

@ -45,7 +45,7 @@ class BlockController extends Controller
->with('error', lang('Fediverse.messages.actorNotFound'));
}
model('ActorModel')
model('ActorModel', false)
->blockActor($actor->id);
}
@ -68,7 +68,7 @@ class BlockController extends Controller
->with('errors', $this->validator->getErrors());
}
model('ActorModel')
model('ActorModel', false)
->unblockActor((int) $this->request->getPost('actor_id'));
return redirect()->back()
@ -89,7 +89,7 @@ class BlockController extends Controller
}
$domain = $this->request->getPost('domain');
model('BlockedDomainModel')
model('BlockedDomainModel', false)
->blockDomain($domain);
return redirect()->back()
@ -112,7 +112,7 @@ class BlockController extends Controller
}
$domain = $this->request->getPost('domain');
model('BlockedDomainModel')
model('BlockedDomainModel', false)
->unblockDomain($domain);
return redirect()->back()

View File

@ -17,13 +17,13 @@ class NodeInfo2Controller extends Controller
{
public function index(): ResponseInterface
{
$totalUsers = model('ActorModel')
$totalUsers = model('ActorModel', false)
->getTotalLocalActors();
$totalPosts = model('PostModel')
$totalPosts = model('PostModel', false)
->getTotalLocalPosts();
$activeMonth = model('ActorModel')
$activeMonth = model('ActorModel', false)
->getActiveLocalActors(1);
$activeHalfyear = model('ActorModel')
$activeHalfyear = model('ActorModel', false)
->getActiveLocalActors(6);
$nodeInfo2 = [

View File

@ -42,7 +42,7 @@ class PostController extends Controller
public function _remap(string $method, string ...$params): mixed
{
if (($post = model('PostModel')->getPostById($params[0])) === null) {
if (($post = model('PostModel', false)->getPostById($params[0])) === null) {
throw PageNotFoundException::forPageNotFound();
}
@ -74,7 +74,7 @@ class PostController extends Controller
/**
* get post replies
*/
$postReplies = model('PostModel')
$postReplies = model('PostModel', false)
->where('in_reply_to_id', service('uuid') ->fromString($this->post->id) ->getBytes())
->where('`published_at` <= NOW()', null, false)
->orderBy('published_at', 'ASC');
@ -127,7 +127,7 @@ class PostController extends Controller
'published_at' => Time::now(),
]);
$postModel = model('PostModel');
$postModel = model('PostModel', false);
if (! $postModel->addPost($newPost)) {
return redirect()
->back()
@ -153,10 +153,10 @@ class PostController extends Controller
->with('errors', $this->validator->getErrors());
}
$actor = model('ActorModel')
$actor = model('ActorModel', false)
->getActorById($this->request->getPost('actor_id'));
model('FavouriteModel')
model('FavouriteModel', false)
->toggleFavourite($actor, $this->post->id);
return redirect()->back();
@ -175,10 +175,10 @@ class PostController extends Controller
->with('errors', $this->validator->getErrors());
}
$actor = model('ActorModel')
$actor = model('ActorModel', false)
->getActorById($this->request->getPost('actor_id'));
model('PostModel')
model('PostModel', false)
->toggleReblog($actor, $this->post);
return redirect()->back();
@ -205,7 +205,7 @@ class PostController extends Controller
'published_at' => Time::now(),
]);
if (! model('PostModel')->addReply($newReplyPost)) {
if (! model('PostModel', false)->addReply($newReplyPost)) {
return redirect()
->back()
->withInput()
@ -265,14 +265,14 @@ class PostController extends Controller
public function attemptBlockActor(): RedirectResponse
{
model('ActorModel')->blockActor($this->post->actor->id);
model('ActorModel', false)->blockActor($this->post->actor->id);
return redirect()->back();
}
public function attemptBlockDomain(): RedirectResponse
{
model('BlockedDomainModel')->blockDomain($this->post->actor->domain);
model('BlockedDomainModel', false)->blockDomain($this->post->actor->domain);
return redirect()->back();
}

View File

@ -22,7 +22,7 @@ class SchedulerController extends Controller
public function activity(): void
{
// retrieve scheduled activities from database
$scheduledActivities = model('ActivityModel')
$scheduledActivities = model('ActivityModel', false)
->getScheduledActivities();
// Send activity to all followers
@ -45,7 +45,7 @@ class SchedulerController extends Controller
}
// set activity post to delivered
model('ActivityModel')
model('ActivityModel', false)
->update($scheduledActivity->id, [
'status' => 'delivered',
]);

View File

@ -50,12 +50,12 @@ class FediverseFilter implements FilterInterface
$domain = (new URI($actorUri))->getHost();
// check first if domain is blocked
if (model('BlockedDomainModel')->isDomainBlocked($domain)) {
if (model('BlockedDomainModel', false)->isDomainBlocked($domain)) {
throw PageNotFoundException::forPageNotFound();
}
// check if actor is blocked
if (model('ActorModel')->isActorBlocked($actorUri)) {
if (model('ActorModel', false)->isActorBlocked($actorUri)) {
throw PageNotFoundException::forPageNotFound();
}
}

View File

@ -70,7 +70,7 @@ if (! function_exists('accept_follow')) {
$db = db_connect();
$db->transStart();
$activityModel = model('ActivityModel');
$activityModel = model('ActivityModel', false);
$activityId = $activityModel->newActivity(
'Accept',
$actor->id,
@ -183,7 +183,7 @@ if (! function_exists('create_preview_card_from_url')) {
]);
if (
! ($newPreviewCardId = model('PreviewCardModel')->insert($newPreviewCard, true))
! ($newPreviewCardId = model('PreviewCardModel', false)->insert($newPreviewCard, true))
) {
return null;
}
@ -205,7 +205,7 @@ if (! function_exists('get_or_create_preview_card_from_url')) {
{
// check if preview card has already been generated
if (
$previewCard = model('PreviewCardModel')
$previewCard = model('PreviewCardModel', false)
->getPreviewCardFromUrl((string) $url)
) {
return $previewCard;
@ -224,7 +224,7 @@ if (! function_exists('get_or_create_actor_from_uri')) {
function get_or_create_actor_from_uri(string $actorUri): ?Actor
{
// check if actor exists in database already and return it
if ($actor = model('ActorModel')->getActorByUri($actorUri)) {
if ($actor = model('ActorModel', false)->getActorByUri($actorUri)) {
return $actor;
}
@ -242,7 +242,7 @@ if (! function_exists('get_or_create_actor')) {
{
// check if actor exists in database already and return it
if (
$actor = model('ActorModel')
$actor = model('ActorModel', false)
->getActorByUsername($username, $domain)
) {
return $actor;
@ -287,7 +287,7 @@ if (! function_exists('create_actor_from_uri')) {
$newActor->outbox_url = property_exists($actorPayload, 'outbox') ? $actorPayload->outbox : null;
$newActor->followers_url = property_exists($actorPayload, 'followers') ? $actorPayload->followers : null;
if (! ($newActorId = model('ActorModel')->insert($newActor, true))) {
if (! ($newActorId = model('ActorModel', false)->insert($newActor, true))) {
return null;
}
@ -431,7 +431,7 @@ if (! function_exists('linkify')) {
}
} else {
if (
$actor = model('ActorModel')
$actor = model('ActorModel', false)
->getActorByUsername($match['username'])
) {
return '<' .

View File

@ -100,7 +100,7 @@ class BlockedDomainModel extends BaseModel
$this->db->transStart();
// set all actors from the domain as blocked
model('ActorModel')
model('ActorModel', false)
->where('domain', $name)
->set('is_blocked', '1')
->update();
@ -131,7 +131,7 @@ class BlockedDomainModel extends BaseModel
$this->db->transStart();
// unblock all actors from the domain
model('ActorModel')
model('ActorModel', false)
->where('domain', $name)
->set('is_blocked', '0')
->update();

View File

@ -55,7 +55,7 @@ class FavouriteModel extends BaseUuidModel
'post_id' => $post->id,
]);
model('PostModel')
model('PostModel', false)
->where('id', service('uuid') ->fromString($post->id) ->getBytes())
->increment('favourites_count');
@ -64,7 +64,7 @@ class FavouriteModel extends BaseUuidModel
$likeActivity->set('actor', $actor->uri)
->set('object', $post->uri);
$activityId = model('ActivityModel')
$activityId = model('ActivityModel', false)
->newActivity(
'Like',
$actor->id,
@ -77,7 +77,7 @@ class FavouriteModel extends BaseUuidModel
$likeActivity->set('id', url_to('activity', $actor->username, $activityId));
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'payload' => $likeActivity->toJSON(),
]);
@ -85,7 +85,7 @@ class FavouriteModel extends BaseUuidModel
Events::trigger('on_post_favourite', $actor, $post);
model('PostModel')
model('PostModel', false)
->clearCache($post);
$this->db->transComplete();
@ -95,7 +95,7 @@ class FavouriteModel extends BaseUuidModel
{
$this->db->transStart();
model('PostModel')
model('PostModel', false)
->where('id', service('uuid') ->fromString($post->id) ->getBytes())
->decrement('favourites_count');
@ -110,7 +110,7 @@ class FavouriteModel extends BaseUuidModel
if ($registerActivity) {
$undoActivity = new UndoActivity();
// get like activity
$activity = model('ActivityModel')
$activity = model('ActivityModel', false)
->where([
'type' => 'Like',
'actor_id' => $actor->id,
@ -130,7 +130,7 @@ class FavouriteModel extends BaseUuidModel
->set('actor', $actor->uri)
->set('object', $likeActivity);
$activityId = model('ActivityModel')
$activityId = model('ActivityModel', false)
->newActivity(
'Undo',
$actor->id,
@ -143,7 +143,7 @@ class FavouriteModel extends BaseUuidModel
$undoActivity->set('id', url_to('activity', $actor->username, $activityId));
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'payload' => $undoActivity->toJSON(),
]);
@ -151,7 +151,7 @@ class FavouriteModel extends BaseUuidModel
Events::trigger('on_post_undo_favourite', $actor, $post);
model('PostModel')
model('PostModel', false)
->clearCache($post);
$this->db->transComplete();

View File

@ -61,7 +61,7 @@ class FollowModel extends BaseModel
]);
// increment followers_count for target actor
model('ActorModel')
model('ActorModel', false)
->where('id', $targetActor->id)
->increment('followers_count');
@ -72,7 +72,7 @@ class FollowModel extends BaseModel
->set('actor', $actor->uri)
->set('object', $targetActor->uri);
$activityId = model('ActivityModel')
$activityId = model('ActivityModel', false)
->newActivity(
'Follow',
$actor->id,
@ -85,7 +85,7 @@ class FollowModel extends BaseModel
$followActivity->set('id', url_to('activity', $actor->username, $activityId));
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'payload' => $followActivity->toJSON(),
]);
@ -93,7 +93,7 @@ class FollowModel extends BaseModel
Events::trigger('on_follow', $actor, $targetActor);
model('ActorModel')
model('ActorModel', false)
->clearCache($targetActor);
$this->db->transComplete();
@ -118,14 +118,14 @@ class FollowModel extends BaseModel
])->delete();
// decrement followers_count for target actor
model('ActorModel')
model('ActorModel', false)
->where('id', $targetActor->id)
->decrement('followers_count');
if ($registerActivity) {
$undoActivity = new UndoActivity();
// get follow activity from database
$followActivity = model('ActivityModel')
$followActivity = model('ActivityModel', false)
->where([
'type' => 'Follow',
'actor_id' => $actor->id,
@ -137,7 +137,7 @@ class FollowModel extends BaseModel
->set('actor', $actor->uri)
->set('object', $followActivity->payload);
$activityId = model('ActivityModel')
$activityId = model('ActivityModel', false)
->newActivity(
'Undo',
$actor->id,
@ -150,7 +150,7 @@ class FollowModel extends BaseModel
$undoActivity->set('id', url_to('activity', $actor->username, $activityId));
model('ActivityModel')
model('ActivityModel', false)
->update($activityId, [
'payload' => $undoActivity->toJSON(),
]);
@ -158,7 +158,7 @@ class FollowModel extends BaseModel
Events::trigger('on_undo_follow', $actor, $targetActor);
model('ActorModel')
model('ActorModel', false)
->clearCache($targetActor);
$this->db->transComplete();

View File

@ -62,7 +62,7 @@ class WebFinger
}
if (
! ($actor = model('ActorModel')->getActorByUsername($username, $domain))
! ($actor = model('ActorModel', false)->getActorByUsername($username, $domain))
) {
throw new Exception('Could not find actor');
}