$this->logger->info('API Error', ['no' => $errorno, 'error' => $error, 'method' => $this->args->getMethod(), 'command' => $this->args->getQueryString(), 'user-agent' => $this->server['HTTP_USER_AGENT'] ?? '']);
}
- public function RecordNotFound()
+ public function RecordNotFound(): \Friendica\Object\Api\Mastodon\Error
{
$error = $this->l10n->t('Record not found');
$error_description = '';
- $errorObj = new \Friendica\Object\Api\Mastodon\Error($error, $error_description);
-
- $this->logError(404, $error);
- $this->jsonError(404, $errorObj->toArray());
+ return new \Friendica\Object\Api\Mastodon\Error($error, $error_description);
}
public function UnprocessableEntity(string $error = '')
{
$item = ActivityPub\Transmitter::getItemArrayFromMail($id, true);
if (empty($item)) {
- $this->mstdnErrorFactory->RecordNotFound();
+ throw new HTTPException\NotFoundException('Mail record not found with id: ' . $id);
}
$account = $this->mstdnAccountFactory->createFromContactId($item['author-id']);
$item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Item::performActivity($item['id'], 'dislike', $uid);
$id = $this->parameters['id'];
if (!Post::exists(['uri-id' => $id, 'uid' => [0, $uid]])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$activities = Post::selectPosts(['author-id'], ['thr-parent-id' => $id, 'gravity' => Item::GRAVITY_ACTIVITY, 'verb' => Activity::DISLIKE, 'deleted' => false]);
$item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Item::performActivity($item['id'], 'undislike', $uid);
if (!empty($this->parameters['id'])) {
$id = $this->parameters['id'];
if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
} else {
$contact = Contact::selectFirst(['id'], ['nick' => $this->parameters['name'], 'uid' => 0]);
if (!empty($contact['id'])) {
$id = $contact['id'];
} elseif (!($id = Contact::getIdForURL($this->parameters['name'], 0, false))) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
}
$id = $this->parameters['id'];
if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$request = $this->getRequest([
$id = $this->parameters['id'];
if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$request = $this->getRequest([
$id = $this->parameters['id'];
if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$lists = [];
$cdata = Contact::getPublicAndUserContactID($this->parameters['id'], $uid);
if (empty($cdata['user'])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Contact::update(['info' => $request['comment']], ['id' => $cdata['user']]);
$id = $this->parameters['id'];
if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$request = $this->getRequest([
$cdata = Contact::getPublicAndUserContactID($this->parameters['id'], $uid);
if (empty($cdata['user'])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$contact = Contact::getById($cdata['user']);
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Module\BaseApi;
+use Friendica\Network\HTTPException\NotFoundException;
/**
* @see https://docs.joinmastodon.org/methods/timelines/conversations/
$conversations = [];
- while ($conv = DBA::fetch($convs)) {
- self::setBoundaries($conv['id']);
- $conversations[] = DI::mstdnConversation()->createFromConvId($conv['id']);
+ try {
+ while ($conv = DBA::fetch($convs)) {
+ self::setBoundaries($conv['id']);
+ $conversations[] = DI::mstdnConversation()->createFromConvId($conv['id']);
+ }
+ } catch (NotFoundException $e) {
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
DBA::close($convs);
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Module\BaseApi;
+use Friendica\Network\HTTPException\NotFoundException;
/**
* @see https://docs.joinmastodon.org/methods/timelines/conversations/
DBA::update('mail', ['seen' => true], ['convid' => $this->parameters['id'], 'uid' => $uid]);
- $this->jsonExit(DI::mstdnConversation()->createFromConvId($this->parameters['id'])->toArray());
+ try {
+ $this->jsonExit(DI::mstdnConversation()->createFromConvId($this->parameters['id'])->toArray());
+ } catch (NotFoundException $e) {
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
+ }
}
}
}
if (!Circle::exists($this->parameters['id'], $uid)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if (!Circle::remove($this->parameters['id'])) {
$id = $this->parameters['id'];
if (!Circle::exists($id, $uid)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$lists = DI::mstdnList()->createFromCircleId($id);
}
$id = $this->parameters['id'];
if (!DBA::exists('group', ['id' => $id, 'uid' => $uid])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$request = $this->getRequest([
if (empty($photo['resource-id'])) {
$media = Post\Media::getById($this->parameters['id']);
if (empty($media['uri-id'])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if (!Post::exists(['uri-id' => $media['uri-id'], 'uid' => $uid, 'origin' => true])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Post\Media::updateById(['description' => $request['description']], $this->parameters['id']);
$this->jsonExit(DI::mstdnAttachment()->createFromId($this->parameters['id']));
$id = $this->parameters['id'];
if (!Photo::exists(['id' => $id, 'uid' => $uid])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$this->jsonExit(DI::mstdnAttachment()->createFromPhoto($id));
$id = $this->parameters['id'];
if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$request = $this->getRequest([
$notification = DI::notification()->selectOneForUser($uid, ['id' => $id]);
$this->jsonExit(DI::mstdnNotification()->createFromNotification($notification, self::appSupportsQuotes()));
} catch (\Exception $e) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
}
$subscription = Subscription::select($application['id'], $uid, ['id']);
if (empty($subscription)) {
$this->logger->info('Subscription not found', ['application-id' => $application['id'], 'uid' => $uid]);
- $this->errorFactory->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$fields = [
if (!Subscription::exists($application['id'], $uid)) {
$this->logger->info('Subscription not found', ['application-id' => $application['id'], 'uid' => $uid]);
- $this->errorFactory->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$this->logger->info('Fetch subscription', ['application-id' => $application['id'], 'uid' => $uid]);
}
if (!DBA::exists('delayed-post', ['id' => $this->parameters['id'], 'uid' => $uid])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Post\Delayed::deleteById($this->parameters['id']);
$item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $this->parameters['id'], 'uid' => $uid]);
if (empty($item['id'])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if (!Item::markForDeletionById($item['id'])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$this->jsonExit([]);
$item = Post::selectOriginal(['uid', 'id', 'uri-id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]], ['order' => ['uid' => true]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if ($item['gravity'] != Item::GRAVITY_PARENT) {
if (!empty($stored)) {
$item = Post::selectFirst(['id', 'gravity'], ['id' => $stored]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
} else {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
}
}
DBA::close($posts);
} else {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
}
$item = Post::selectOriginalForUser($uid, ['id', 'uri-id'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Item::performActivity($item['id'], 'like', $uid);
}
if (!$post = Post::selectOriginal(['uri-id'], ['uri-id' => $this->parameters['id'], 'uid' => [0, $uid]])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$activities = Post::selectPosts(['author-id'], ['thr-parent-id' => $post['uri-id'], 'gravity' => Item::GRAVITY_ACTIVITY, 'verb' => Activity::LIKE, 'deleted' => false]);
$item = Post::selectOriginalForUser($uid, ['uri-id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if ($item['gravity'] != Item::GRAVITY_PARENT) {
$item = Post::selectOriginalForUser($uid, ['uri-id', 'gravity', 'author-id'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Post\Collection::add($item['uri-id'], Post\Collection::FEATURED, $item['author-id'], $uid);
$item = Post::selectOriginalForUser($uid, ['id', 'uri-id', 'network'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if ($item['network'] == Protocol::DIASPORA) {
}
if (!$post = Post::selectOriginal(['uri-id'], ['uri-id' => $this->parameters['id'], 'uid' => [0, $uid]])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
$activities = Post::selectPosts(['author-id'], ['thr-parent-id' => $post['uri-id'], 'gravity' => Item::GRAVITY_ACTIVITY, 'verb' => Activity::ANNOUNCE]);
$item = Post::selectOriginal(['uid', 'id', 'uri-id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]], ['order' => ['uid' => true]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if ($item['gravity'] != Item::GRAVITY_PARENT) {
if (!empty($stored)) {
$item = Post::selectFirst(['id', 'gravity'], ['id' => $stored]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
} else {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
}
$item = Post::selectOriginalForUser($uid, ['id', 'uri-id'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Item::performActivity($item['id'], 'unlike', $uid);
$item = Post::selectOriginalForUser($uid, ['uri-id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if ($item['gravity'] != Item::GRAVITY_PARENT) {
$item = Post::selectOriginalForUser($uid, ['uri-id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
Post\Collection::remove($item['uri-id'], Post\Collection::FEATURED, $uid);
$item = Post::selectOriginalForUser($uid, ['id', 'uri-id', 'network'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]);
if (!DBA::isResult($item)) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if ($item['network'] == Protocol::DIASPORA) {
$item = Post::selectFirstForUser($uid, ['id'], ['quote-uri-id' => $this->parameters['id'], 'body' => '', 'origin' => true, 'uid' => $uid]);
if (empty($item['id'])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if (!Item::markForDeletionById($item['id'])) {
- DI::mstdnError()->RecordNotFound();
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
} elseif (!in_array($item['network'], [Protocol::DFRN, Protocol::ACTIVITYPUB, Protocol::TWITTER])) {
DI::mstdnError()->UnprocessableEntity(DI::l10n()->t("Posts from %s can't be unshared", ContactSelector::networkToName($item['network'])));
use Friendica\DI;
use Friendica\Module\BaseApi;
use Friendica\Network\HTTPException;
+use Friendica\Network\HTTPException\NotFoundException;
/**
* @see https://docs.joinmastodon.org/methods/timelines/
$statuses = [];
- while ($mail = DBA::fetch($mails)) {
- self::setBoundaries($mail['uri-id']);
- $statuses[] = DI::mstdnStatus()->createFromMailId($mail['id']);
+ try {
+ while ($mail = DBA::fetch($mails)) {
+ self::setBoundaries($mail['uri-id']);
+ $statuses[] = DI::mstdnStatus()->createFromMailId($mail['id']);
+ }
+ } catch (NotFoundException $e) {
+ $this->logErrorAndJsonExit(404, $this->errorFactory->RecordNotFound());
}
if (!empty($request['min_id'])) {