Add POST follow request Mastodon API endpoint

This commit is contained in:
Hypolite Petovan 2019-12-11 03:50:09 -05:00
parent 1625330e70
commit 2d47952921
3 changed files with 44 additions and 4 deletions

View file

@ -16,11 +16,18 @@ These endpoints use the [Mastodon API entities](https://docs.joinmastodon.org/ap
## Implemented endpoints ## Implemented endpoints
- [GET /api/v1/follow_requests](https://docs.joinmastodon.org/api/rest/follow-requests/#get-api-v1-follow-requests) - [GET /api/v1/follow_requests](https://docs.joinmastodon.org/api/rest/follow-requests/#get-api-v1-follow-requests)
- [POST /api/v1/follow_requests/:id/authorize](https://docs.joinmastodon.org/api/rest/follow-requests/#post-api-v1-follow-requests-id-authorize)
- Returns a [Relationship](https://docs.joinmastodon.org/api/entities/#relationship) object.
- [POST /api/v1/follow_requests/:id/reject](https://docs.joinmastodon.org/api/rest/follow-requests/#post-api-v1-follow-requests-id-reject)
- Returns a [Relationship](https://docs.joinmastodon.org/api/entities/#relationship) object.
- POST /api/v1/follow_requests/:id/ignore
- Friendica-specific, hides the follow request from the list and prevents the remote contact from retrying.
- Returns a [Relationship](https://docs.joinmastodon.org/api/entities/#relationship) object.
- [GET /api/v1/instance](https://docs.joinmastodon.org/api/rest/instances) - [GET /api/v1/instance](https://docs.joinmastodon.org/api/rest/instances)
- GET /api/v1/instance/peers - undocumented, but implemented by Mastodon and Pleroma - GET /api/v1/instance/peers - undocumented, but implemented by Mastodon and Pleroma
## Non-implemented endpoints ## Non-implemented endpoints
- [POST /api/v1/follow_requests/:id/authorize](https://docs.joinmastodon.org/api/rest/follow-requests/#post-api-v1-follow-requests-id-authorize)
- [POST /api/v1/follow_requests/:id/reject](https://docs.joinmastodon.org/api/rest/follow-requests/#post-api-v1-follow-requests-id-reject)

View file

@ -7,6 +7,7 @@ use Friendica\App\BaseURL;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Introduction;
use Friendica\Module\Base\Api; use Friendica\Module\Base\Api;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
@ -24,6 +25,37 @@ class FollowRequests extends Api
} }
} }
public static function post(array $parameters = [])
{
parent::post($parameters);
/** @var Introduction $Intro */
$Intro = self::getClass(Introduction::class);
$Intro->fetch(['id' => $parameters['id'], 'uid' => self::$current_user_id]);
$contactId = $Intro->{'contact-id'};
$relationship = new Mastodon\Relationship();
$relationship->id = $contactId;
switch ($parameters['action']) {
case 'authorize':
$Intro->confirm();
$relationship = Mastodon\Relationship::createFromContact(Contact::getById($contactId));
break;
case 'ignore':
$Intro->ignore();
break;
case 'reject':
$Intro->discard();
break;
default:
throw new HTTPException\BadRequestException('Unexpected action parameter, expecting "authorize", "ignore" or "reject"');
}
System::jsonExit($relationship);
}
/** /**
* @param array $parameters * @param array $parameters
* @throws HTTPException\InternalServerErrorException * @throws HTTPException\InternalServerErrorException

View file

@ -30,6 +30,7 @@ return [
'/api' => [ '/api' => [
'/v1' => [ '/v1' => [
'/follow_requests' => [Module\Api\Mastodon\FollowRequests::class, [R::GET ]], '/follow_requests' => [Module\Api\Mastodon\FollowRequests::class, [R::GET ]],
'/follow_requests/{id:\d+}/{action}' => [Module\Api\Mastodon\FollowRequests::class, [ R::POST]],
'/instance' => [Module\Api\Mastodon\Instance::class, [R::GET]], '/instance' => [Module\Api\Mastodon\Instance::class, [R::GET]],
'/instance/peers' => [Module\Api\Mastodon\Instance\Peers::class, [R::GET]], '/instance/peers' => [Module\Api\Mastodon\Instance\Peers::class, [R::GET]],
], ],