From 7d5d3b3c29b61b7041e61b68b920cfbd1bceee64 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 18 Feb 2024 20:17:06 +0100 Subject: [PATCH] Issue 13293: Endpoint /api/v1/accounts/lookup implemented (#13917) --- src/Module/Api/Mastodon/Accounts/Lookup.php | 56 +++++++++++++++++++++ static/routes.config.php | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/Module/Api/Mastodon/Accounts/Lookup.php diff --git a/src/Module/Api/Mastodon/Accounts/Lookup.php b/src/Module/Api/Mastodon/Accounts/Lookup.php new file mode 100644 index 0000000000..d7a080fb8e --- /dev/null +++ b/src/Module/Api/Mastodon/Accounts/Lookup.php @@ -0,0 +1,56 @@ +. + * + */ + +namespace Friendica\Module\Api\Mastodon\Accounts; + +use Friendica\Core\Protocol; +use Friendica\DI; +use Friendica\Model\Contact; +use Friendica\Module\BaseApi; + +/** + * @see https://docs.joinmastodon.org/methods/accounts/#lookup + */ +class Lookup extends BaseApi +{ + /** + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + protected function rawContent(array $request = []) + { + $this->checkAllowedScope(self::SCOPE_READ); + $uid = self::getCurrentUserID(); + + $request = $this->getRequest([ + 'acct' => '', // The username or Webfinger address to lookup. + ], $request); + + if (empty($request['acct'])) { + $this->logAndJsonError(404, $this->errorFactory->RecordNotFound()); + } + $contact = Contact::getByURL($request['acct'], null, ['id', 'network', 'failed', 'blocked']); + if (empty($contact) || ($contact['network'] == Protocol::PHANTOM) || $contact['failed'] || $contact['blocked']) { + $this->logAndJsonError(404, $this->errorFactory->RecordNotFound()); + } + + $this->jsonExit(DI::mstdnAccount()->createFromContactId($contact['id'], $uid)); + } +} diff --git a/static/routes.config.php b/static/routes.config.php index c52c04d954..affbf5a42a 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -211,7 +211,7 @@ return [ '/accounts/{id:\d+}/note' => [Module\Api\Mastodon\Accounts\Note::class, [ R::POST]], '/accounts/{id:\d+}/remove_from_followers' => [Module\Api\Mastodon\Unimplemented::class, [ R::POST]], // not supported '/accounts/familiar_followers' => [Module\Api\Mastodon\Unimplemented::class, [R::GET ]], // not supported - '/accounts/lookup' => [Module\Api\Mastodon\Unimplemented::class, [R::GET ]], // not supported + '/accounts/lookup' => [Module\Api\Mastodon\Accounts\Lookup::class, [R::GET ]], '/accounts/relationships' => [Module\Api\Mastodon\Accounts\Relationships::class, [R::GET ]], '/accounts/search' => [Module\Api\Mastodon\Accounts\Search::class, [R::GET ]], '/accounts/update_credentials' => [Module\Api\Mastodon\Accounts\UpdateCredentials::class, [R::PATCH ]],