]> git.mxchange.org Git - friendica.git/commitdiff
Add POST follow request Mastodon API endpoint
authorHypolite Petovan <hypolite@mrpetovan.com>
Wed, 11 Dec 2019 08:50:09 +0000 (03:50 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Wed, 11 Dec 2019 13:25:44 +0000 (08:25 -0500)
doc/API-Mastodon.md
src/Module/Api/Mastodon/FollowRequests.php
static/routes.config.php

index a711e367fb8db0480bed4fdeeb0a3ad78f24206f..546aca2431117ddf40b96296e8d447f714ec2a4c 100644 (file)
@@ -16,11 +16,18 @@ These endpoints use the [Mastodon API entities](https://docs.joinmastodon.org/ap
 ## Implemented endpoints
 
 - [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/peers - undocumented, but implemented by Mastodon and Pleroma
 
-## 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)
 
+## Non-implemented endpoints
index 16417b46900ab878c817909042c951a8210822c8..55bf70a9549b7153cc247c8b723d4d02b38385ff 100644 (file)
@@ -7,6 +7,7 @@ use Friendica\App\BaseURL;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\Model\Contact;
+use Friendica\Model\Introduction;
 use Friendica\Module\Base\Api;
 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
         * @throws HTTPException\InternalServerErrorException
index 824354690d5972675d846f328fd67cf77f705dbb..d23b092169448363f105692e04f0838557d10f79 100644 (file)
@@ -30,6 +30,7 @@ return [
        '/api' => [
                '/v1' => [
                        '/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/peers'                    => [Module\Api\Mastodon\Instance\Peers::class, [R::GET]],
                ],