X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2Flib%2Fsalmon.php;h=b964538cbcb33e31c62689722904095f00c69756;hb=6afa091dca980fcd856b781015ee57afa89c9339;hp=631ebc7d86b350db77bda77f2b1d9473940c4c2d;hpb=338aa4bf1d36e11a354c67796509c6d1fec2aac2;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php index 631ebc7d86..b964538cbc 100644 --- a/plugins/OStatus/lib/salmon.php +++ b/plugins/OStatus/lib/salmon.php @@ -38,76 +38,34 @@ class Salmon /** * Sign and post the given Atom entry as a Salmon message. * - * @fixme pass through the actor for signing? + * Side effects: may generate a keypair on-demand for the given user, + * which can be very slow on some systems (like those without php5-gmp). * * @param string $endpoint_uri - * @param string $xml + * @param string $xml string representation of payload + * @param Profile $user profile whose keys we sign with (must be a local user) * @return boolean success */ - public function post($endpoint_uri, $xml, $actor) + public static function post($endpoint_uri, $xml, Profile $actor, Profile $target=null) { if (empty($endpoint_uri)) { + common_debug('No endpoint URI for Salmon post to '.$actor->getUri()); return false; } try { - $xml = $this->createMagicEnv($xml, $actor); + $magic_env = MagicEnvelope::signAsUser($xml, $actor->getUser()); } catch (Exception $e) { common_log(LOG_ERR, "Salmon unable to sign: " . $e->getMessage()); return false; } - $headers = array('Content-Type: application/magic-envelope+xml'); - - try { - $client = new HTTPClient(); - $client->setBody($xml); - $response = $client->post($endpoint_uri, $headers); - } catch (HTTP_Request2_Exception $e) { - common_log(LOG_ERR, "Salmon post to $endpoint_uri failed: " . $e->getMessage()); + // $target is so far only used in Diaspora, so it can be null + if (Event::handle('SalmonSlap', array($endpoint_uri, $magic_env, $target))) { return false; - } - if ($response->getStatus() != 200) { - common_log(LOG_ERR, "Salmon at $endpoint_uri returned status " . - $response->getStatus() . ': ' . $response->getBody()); - return false; - } - return true; - } - - public function createMagicEnv($text, $actor) - { - $magic_env = new MagicEnvelope(); - - $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); - } - } else { - // @todo i18n FIXME: added i18n and use sprintf when using parameters. - throw new Exception("Salmon invalid actor for signing."); + //throw new ServerException('Could not distribute salmon slap as no plugin completed the event.'); } - try { - $env = $magic_env->signMessage($text, 'application/atom+xml', $magickey->toString()); - } catch (Exception $e) { - return $text; - } - return $magic_env->toXML($env); - } - - - public function verifyMagicEnv($text) - { - $magic_env = new MagicEnvelope(); - - $env = $magic_env->parse($text); - - return $magic_env->verify($env); + return true; } }