]> git.mxchange.org Git - friendica.git/commitdiff
Move sending follow message to remote server to Protocol class
authorHypolite Petovan <hypolite@mrpetovan.com>
Sun, 7 Nov 2021 05:57:18 +0000 (01:57 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sun, 21 Nov 2021 23:59:36 +0000 (18:59 -0500)
src/Core/Protocol.php
src/Model/Contact.php
src/Module/Api/Mastodon/Accounts/Follow.php

index 796add5558184cc423a402bbcb6cfcdc4cf2d66d..bba7149a0462b848e4e3a6a101a2ec1f0256479a 100644 (file)
@@ -21,7 +21,9 @@
 
 namespace Friendica\Core;
 
+use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Model\User;
 use Friendica\Network\HTTPException;
 use Friendica\Protocol\Activity;
 use Friendica\Protocol\ActivityPub;
@@ -208,6 +210,59 @@ class Protocol
                return $display_name . ' (' . self::getAddrFromProfileUrl($profile_url) . ')';
        }
 
+       /**
+        * Send a follow message to a remote server.
+        *
+        * @param int     $uid      User Id
+        * @param array   $contact  Contact being followed
+        * @param ?string $protocol Expected protocol
+        * @return bool Only returns false in the unlikely case an ActivityPub contact ID doesn't exist (???)
+        * @throws HTTPException\InternalServerErrorException
+        * @throws \ImagickException
+        */
+       public static function follow(int $uid, array $contact, ?string $protocol = null): bool
+       {
+               $owner = User::getOwnerDataById($uid);
+               if (!DBA::isResult($owner)) {
+                       return true;
+               }
+
+               $protocol = $protocol ?? $contact['protocol'];
+
+               if (in_array($protocol, [Protocol::OSTATUS, Protocol::DFRN])) {
+                       // create a follow slap
+                       $item = [
+                               'verb'    => Activity::FOLLOW,
+                               'gravity' => GRAVITY_ACTIVITY,
+                               'follow'  => $contact['url'],
+                               'body'    => '',
+                               'title'   => '',
+                               'guid'    => '',
+                               'uri-id'  => 0,
+                       ];
+
+                       $slap = OStatus::salmon($item, $owner);
+
+                       if (!empty($contact['notify'])) {
+                               Salmon::slapper($owner, $contact['notify'], $slap);
+                       }
+               } elseif ($protocol == Protocol::DIASPORA) {
+                       $contact = Diaspora::sendShare($owner, $contact);
+                       Logger::notice('share returns: ' . $contact);
+               } elseif ($protocol == Protocol::ACTIVITYPUB) {
+                       $activity_id = ActivityPub\Transmitter::activityIDFromContact($contact['id']);
+                       if (empty($activity_id)) {
+                               // This really should never happen
+                               return false;
+                       }
+
+                       $success = ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $owner['uid'], $activity_id);
+                       Logger::notice('Follow returns: ' . $success);
+               }
+
+               return true;
+       }
+
        /**
         * Sends an unfriend message. Does not remove the contact
         *
index 50ae42418fc70c8bac1bf772ede7b3016d0a6c42..4898ec56783e57368fab52a946457eeacb5f9d1b 100644 (file)
@@ -2508,61 +2508,11 @@ class Contact
                        Worker::add(PRIORITY_HIGH, 'UpdateContact', $contact_id);
                }
 
-               $owner = User::getOwnerDataById($uid);
-
-               if (DBA::isResult($owner)) {
-                       if (in_array($protocol, [Protocol::OSTATUS, Protocol::DFRN])) {
-                               // create a follow slap
-                               $item = [];
-                               $item['verb'] = Activity::FOLLOW;
-                               $item['gravity'] = GRAVITY_ACTIVITY;
-                               $item['follow'] = $contact["url"];
-                               $item['body'] = '';
-                               $item['title'] = '';
-                               $item['guid'] = '';
-                               $item['uri-id'] = 0;
-
-                               $slap = OStatus::salmon($item, $owner);
-
-                               if (!empty($contact['notify'])) {
-                                       Salmon::slapper($owner, $contact['notify'], $slap);
-                               }
-                       } elseif ($protocol == Protocol::DIASPORA) {
-                               $ret = Diaspora::sendShare($owner, $contact);
-                               Logger::notice('share returns: ' . $ret);
-                       } elseif ($protocol == Protocol::ACTIVITYPUB) {
-                               $activity_id = ActivityPub\Transmitter::activityIDFromContact($contact_id);
-                               if (empty($activity_id)) {
-                                       // This really should never happen
-                                       return false;
-                               }
-
-                               $ret = ActivityPub\Transmitter::sendActivity('Follow', $contact['url'], $uid, $activity_id);
-                               Logger::notice('Follow returns: ' . $ret);
-                       }
-               }
+               $result['success'] = Protocol::follow($uid, $contact, $protocol);
 
-               $result['success'] = true;
                return $result;
        }
 
-       /**
-        * Follow a contact
-        *
-        * @param int $cid Public contact id
-        * @param int $uid  User ID
-        *
-        * @return bool "true" if following had been successful
-        */
-       public static function follow(int $cid, int $uid)
-       {
-               $contact = self::getById($cid, ['url']);
-
-               $result = self::createFromProbeForUser($uid, $contact['url']);
-
-               return $result['cid'];
-       }
-
        /**
         * Unfollow a contact
         *
index 86b932421dbde85d4656f665ccdfb522dfc8a5c7..2076d3307526cdc9476281eaadcc54e632a4ef9f 100644 (file)
@@ -40,8 +40,14 @@ class Follow extends BaseApi
                        DI::mstdnError()->UnprocessableEntity();
                }
 
-               $cid = Contact::follow($this->parameters['id'], $uid);
+               $contact = Contact::getById($this->parameters['id'], ['url']);
 
-               System::jsonExit(DI::mstdnRelationship()->createFromContactId($cid, $uid)->toArray());
+               $result = Contact::createFromProbeForUser($uid, $contact['url']);
+
+               if (!$result['success']) {
+                       DI::mstdnError()->UnprocessableEntity($result['message']);
+               }
+
+               System::jsonExit(DI::mstdnRelationship()->createFromContactId($result['cid'], $uid)->toArray());
        }
 }