]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
move signing to take a local actor profile and use local keys
authorJames Walker <walkah@walkah.net>
Fri, 26 Feb 2010 19:21:21 +0000 (14:21 -0500)
committerJames Walker <walkah@walkah.net>
Fri, 26 Feb 2010 19:22:49 +0000 (14:22 -0500)
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/classes/Magicsig.php
plugins/OStatus/classes/Ostatus_profile.php
plugins/OStatus/lib/magicenvelope.php
plugins/OStatus/lib/ostatusqueuehandler.php
plugins/OStatus/lib/salmon.php
plugins/OStatus/lib/salmonqueuehandler.php

index 89fa45f91004be0b80f76118826645859d4ab457..720dedd0a0e67733349288b032605b7ca2e5185a 100644 (file)
@@ -415,7 +415,7 @@ class OStatusPlugin extends Plugin
         $act->actor   = ActivityObject::fromProfile($subscriber);
         $act->object  = ActivityObject::fromProfile($other);
 
-        $oprofile->notifyActivity($act);
+        $oprofile->notifyActivity($act, $subscriber);
 
         return true;
     }
@@ -463,7 +463,7 @@ class OStatusPlugin extends Plugin
         $act->actor   = ActivityObject::fromProfile($profile);
         $act->object  = ActivityObject::fromProfile($other);
 
-        $oprofile->notifyActivity($act);
+        $oprofile->notifyActivity($act, $profile);
 
         return true;
     }
@@ -505,7 +505,7 @@ class OStatusPlugin extends Plugin
                                     $member->getBestName(),
                                     $oprofile->getBestName());
 
-            if ($oprofile->notifyActivity($act)) {
+            if ($oprofile->notifyActivity($act, $member)) {
                 return true;
             } else {
                 $oprofile->garbageCollect();
@@ -555,7 +555,7 @@ class OStatusPlugin extends Plugin
                                     $member->getBestName(),
                                     $oprofile->getBestName());
 
-            $oprofile->notifyActivity($act);
+            $oprofile->notifyActivity($act, $member);
         }
     }
 
@@ -598,7 +598,7 @@ class OStatusPlugin extends Plugin
         $act->actor   = ActivityObject::fromProfile($profile);
         $act->object  = ActivityObject::fromNotice($notice);
 
-        $oprofile->notifyActivity($act);
+        $oprofile->notifyActivity($act, $profile);
 
         return true;
     }
@@ -642,7 +642,7 @@ class OStatusPlugin extends Plugin
         $act->actor   = ActivityObject::fromProfile($profile);
         $act->object  = ActivityObject::fromNotice($notice);
 
-        $oprofile->notifyActivity($act);
+        $oprofile->notifyActivity($act, $profile);
 
         return true;
     }
@@ -731,7 +731,7 @@ class OStatusPlugin extends Plugin
         $act->object  = $act->actor;
 
         while ($oprofile->fetch()) {
-            $oprofile->notifyDeferred($act);
+            $oprofile->notifyDeferred($act, $profile);
         }
 
         return true;
index 02882d19b13e1750e43e1b31c7fe7c3a55263d62..751527c8198fab76e78af752f08538b9dcbd566f 100644 (file)
@@ -49,7 +49,8 @@ class Magicsig extends Memcached_DataObject
     
     public /*static*/ function staticGet($k, $v=null)
     {
-        return parent::staticGet(__CLASS__, $k, $v);
+        $obj =  parent::staticGet(__CLASS__, $k, $v);
+        return Magicsig::fromString($obj->keypair);
     }
 
 
index c6f7378c4c208d8a4c599ecfbf01fab116322c08..35539bff770fb0fa8537bb00e23a8af86b6bbfc7 100644 (file)
@@ -357,7 +357,7 @@ class Ostatus_profile extends Memcached_DataObject
             common_log(LOG_INFO, "Posting to Salmon endpoint $this->salmonuri: $xml");
 
             $salmon = new Salmon(); // ?
-            return $salmon->post($this->salmonuri, $xml);
+            return $salmon->post($this->salmonuri, $xml, $actor);
         }
         return false;
     }
@@ -369,11 +369,11 @@ class Ostatus_profile extends Memcached_DataObject
      * @param mixed $entry XML string, Notice, or Activity
      * @return boolean success
      */
-    public function notifyActivity($entry)
+    public function notifyActivity($entry, $actor)
     {
         if ($this->salmonuri) {
             $salmon = new Salmon();
-            return $salmon->post($this->salmonuri, $this->notifyPrepXml($entry));
+            return $salmon->post($this->salmonuri, $this->notifyPrepXml($entry), $actor);
         }
 
         return false;
@@ -386,11 +386,12 @@ class Ostatus_profile extends Memcached_DataObject
      * @param mixed $entry XML string, Notice, or Activity
      * @return boolean success
      */
-    public function notifyDeferred($entry)
+    public function notifyDeferred($entry, $actor)
     {
         if ($this->salmonuri) {
             $data = array('salmonuri' => $this->salmonuri,
-                          'entry' => $this->notifyPrepXml($entry));
+                          'entry' => $this->notifyPrepXml($entry),
+                          'actor' => $actor->id);
 
             $qm = QueueManager::get();
             return $qm->enqueue($data, 'salmon');
index 457c0fba221a269695c3b97f81ad7c3159e28182..f33119b8f7314f8f336bda0219c2e77649c9c741 100644 (file)
@@ -67,18 +67,8 @@ class MagicEnvelope
     }
 
 
-    public function signMessage($text, $mimetype, $signer_uri)
+    public function signMessage($text, $mimetype, $keypair)
     {
-        $signer_uri = $this->normalizeUser($signer_uri);
-
-        if (!$this->checkAuthor($text, $signer_uri)) {
-            throw new Exception("Unable to determine entry author.");
-        }
-
-        $keypair = $this->getKeyPair($signer_uri);
-        if (!$keypair) {
-            throw new Exception("Unable to retrive keypair for ". $signer_uri);
-        }
         $signature_alg = Magicsig::fromString($keypair);
         $armored_text = base64_encode($text);
 
index 0da85600fb99c39d07fa3f9d2abf0663f7e9fea3..6ca31c485c3346919410f09fb768feeab3cc792f 100644 (file)
@@ -87,7 +87,7 @@ class OStatusQueueHandler extends QueueHandler
             // remote user or group.
             // @fixme as an optimization we can skip this if the
             // remote profile is subscribed to the author.
-            $oprofile->notifyDeferred($this->notice);
+            $oprofile->notifyDeferred($this->notice, $this->user);
         }
     }
 
index c59de2a14eb0013f1466426969d5b7fd17cd20c3..6e245954416205f62280c6b1d20d8c9872422a44 100644 (file)
@@ -42,14 +42,14 @@ class Salmon
      * @param string $xml
      * @return boolean success
      */
-    public function post($endpoint_uri, $xml)
+    public function post($endpoint_uri, $xml, $actor)
     {
         if (empty($endpoint_uri)) {
             return false;
         }
 
         if (!common_config('ostatus', 'skip_signatures')) {
-            $xml = $this->createMagicEnv($xml);
+            $xml = $this->createMagicEnv($xml, $actor);
         }
 
         $headers = array('Content-Type: application/atom+xml');
@@ -70,15 +70,27 @@ class Salmon
         return true;
     }
 
-    public function createMagicEnv($text)
+    public function createMagicEnv($text, $actor)
     {
+        common_log(LOG_DEBUG, "Got actor as : ". print_r($actor, true));
         $magic_env = new MagicEnvelope();
 
-        // TODO: Should probably be getting the signer uri as an argument?
-        $signer_uri = $magic_env->getAuthor($text);
+        $user = User::staticGet('id', $actor->id);
+        if ($user->id) {
+            // Use local key
+            $magickey = Magicsig::staticGet('user_id', $user->id);
+            if (!$magickey) {
+                // No keypair yet, let's generate one.
+                $magickey = new Magicsig();
+                $magickey->generate($user->id);
+            } 
+            common_log(LOG_DEBUG, "Salmon: Loaded key for ". $user->id);
+        } else {
+            throw new Exception("Salmon invalid actor for signing");
+        }
 
         try {
-            $env = $magic_env->signMessage($text, 'application/atom+xml', $signer_uri);
+            $env = $magic_env->signMessage($text, 'application/atom+xml', $magickey->toString());
         } catch (Exception $e) {
             common_log(LOG_ERR, "Salmon signing failed: ". $e->getMessage());
             return $text;
index aa97018dc9ac0c4fb048b3af3d144c40f5ef51eb..7eeb5f8e9c1f54988e19d5dcc5c566b2fddc7264 100644 (file)
@@ -35,8 +35,10 @@ class SalmonQueueHandler extends QueueHandler
         assert(is_string($data['salmonuri']));
         assert(is_string($data['entry']));
 
+        $actor = Profile::staticGet($data['actor']);
+        
         $salmon = new Salmon();
-        $salmon->post($data['salmonuri'], $data['entry']);
+        $salmon->post($data['salmonuri'], $data['entry'], $actor);
 
         // @fixme detect failure and attempt to resend
         return true;