]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
OStatus: handle update-profile Salmon pings
authorBrion Vibber <brion@pobox.com>
Wed, 24 Feb 2010 23:28:01 +0000 (23:28 +0000)
committerBrion Vibber <brion@pobox.com>
Wed, 24 Feb 2010 23:28:01 +0000 (23:28 +0000)
plugins/OStatus/classes/Ostatus_profile.php
plugins/OStatus/lib/salmonaction.php

index c755a094e6f3bd5ceb5cfff6a4a5c7edbabcf7bb..33b0ceb9efb99b6877bae1f99e05e867abf7e7e4 100644 (file)
@@ -971,7 +971,7 @@ class Ostatus_profile extends Memcached_DataObject
      * @param Activity $activity
      * @return mixed matching Ostatus_profile or false if none known
      */
-    protected static function getActorProfile($activity)
+    public static function getActorProfile($activity)
     {
         return self::getActivityObjectProfile($activity->actor);
     }
@@ -1109,7 +1109,7 @@ class Ostatus_profile extends Memcached_DataObject
      * @param ActivityObject $object
      * @param array $hints
      */
-    protected function updateFromActivityObject($object, $hints=array())
+    public function updateFromActivityObject($object, $hints=array())
     {
         if ($this->isGroup()) {
             $group = $this->localGroup();
index 9aac2ed52f802078cd683a2f51263598a0e20d0e..a03169101bf3248c117390b4ac51de36ec1b323e 100644 (file)
@@ -38,11 +38,11 @@ class SalmonAction extends Action
         parent::prepare($args);
 
         if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-            $this->clientError(_('This method requires a POST.'));
+            $this->clientError(_m('This method requires a POST.'));
         }
 
         if (empty($_SERVER['CONTENT_TYPE']) || $_SERVER['CONTENT_TYPE'] != 'application/atom+xml') {
-            $this->clientError(_('Salmon requires application/atom+xml'));
+            $this->clientError(_m('Salmon requires application/atom+xml'));
         }
 
         $xml = file_get_contents('php://input');
@@ -76,8 +76,7 @@ class SalmonAction extends Action
     {
         StatusNet::setApi(true); // Send smaller error pages
 
-        // TODO : Insert new $xml -> notice code
-
+        common_log(LOG_DEBUG, "Got a " . $this->act->verb);
         if (Event::handle('StartHandleSalmon', array($this->activity))) {
             switch ($this->act->verb)
             {
@@ -106,8 +105,11 @@ class SalmonAction extends Action
             case ActivityVerb::LEAVE:
                 $this->handleLeave();
                 break;
+            case ActivityVerb::UPDATE_PROFILE:
+                $this->handleUpdateProfile();
+                break;
             default:
-                throw new ClientException(_("Unimplemented."));
+                throw new ClientException(_m("Unrecognized activity type."));
             }
             Event::handle('EndHandleSalmon', array($this->activity));
         }
@@ -115,56 +117,57 @@ class SalmonAction extends Action
 
     function handlePost()
     {
-        throw new ClientException(_("Unimplemented!"));
+        throw new ClientException(_m("This target doesn't understand posts."));
     }
 
     function handleFollow()
     {
-        throw new ClientException(_("Unimplemented!"));
+        throw new ClientException(_m("This target doesn't understand follows."));
     }
 
     function handleUnfollow()
     {
-        throw new ClientException(_("Unimplemented!"));
+        throw new ClientException(_m("This target doesn't understand unfollows."));
     }
 
     function handleFavorite()
     {
-        throw new ClientException(_("Unimplemented!"));
+        throw new ClientException(_m("This target doesn't understand favorites."));
     }
 
-    /**
-     * Remote user doesn't like one of our posts after all!
-     * Confirm the post is ours, and delete a local favorite event.
-     */
-
     function handleUnfavorite()
     {
-        throw new ClientException(_("Unimplemented!"));
+        throw new ClientException(_m("This target doesn't understand unfavorites."));
     }
 
-    /**
-     * Hmmmm
-     */
     function handleShare()
     {
-        throw new ClientException(_("Unimplemented!"));
+        throw new ClientException(_m("This target doesn't understand share events."));
     }
 
-    /**
-     * Hmmmm
-     */
     function handleJoin()
     {
-        throw new ClientException(_("Unimplemented!"));
+        throw new ClientException(_m("This target doesn't understand joins."));
+    }
+
+    function handleLeave()
+    {
+        throw new ClientException(_m("This target doesn't understand leave events."));
     }
 
     /**
-     * Hmmmm
+     * Remote user sent us an update to their profile.
+     * If we already know them, accept the updates.
      */
-    function handleLeave()
+    function handleUpdateProfile()
     {
-        throw new ClientException(_("Unimplemented!"));
+        $oprofile = Ostatus_profile::getActorProfile($this->act);
+        if ($oprofile) {
+            common_log(LOG_INFO, "Got a profile-update ping from $oprofile->uri");
+            $oprofile->updateFromActivityObject($this->act->actor);
+        } else {
+            common_log(LOG_INFO, "Ignoring profile-update ping from unknown " . $this->act->actor->id);
+        }
     }
 
     /**