X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2Flib%2Fsalmon.php;h=7f685665fa9a8268c3acf48c34ea37da0fa1eb43;hb=734287cfd37b9833a2d0fdf93c25934c2cae9e53;hp=963da650840ecf869fe1bc868779f3ad67d1508a;hpb=78ed0348b0eaaebf7a51d55adc7e746cc5b43bbf;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php index 963da65084..7f685665fa 100644 --- a/plugins/OStatus/lib/salmon.php +++ b/plugins/OStatus/lib/salmon.php @@ -38,20 +38,24 @@ 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. * * @param string $endpoint_uri - * @param string $xml + * @param string $xml string representation of payload + * @param User $user local user profile whose keys we sign with * @return boolean success */ - public function post($endpoint_uri, $xml, $actor) + public static function post($endpoint_uri, $xml, User $user) { if (empty($endpoint_uri)) { + common_debug('No endpoint URI for Salmon post to '.$user->getUri()); return false; } try { - $xml = $this->createMagicEnv($xml, $actor); + $magic_env = MagicEnvelope::signAsUser($xml, $user); + $envxml = $magic_env->toXML(); } catch (Exception $e) { common_log(LOG_ERR, "Salmon unable to sign: " . $e->getMessage()); return false; @@ -61,52 +65,19 @@ class Salmon try { $client = new HTTPClient(); - $client->setBody($xml); + $client->setBody($envxml); $response = $client->post($endpoint_uri, $headers); } catch (HTTP_Request2_Exception $e) { common_log(LOG_ERR, "Salmon post to $endpoint_uri failed: " . $e->getMessage()); return false; } if ($response->getStatus() != 200) { - common_log(LOG_ERR, "Salmon at $endpoint_uri returned status " . - $response->getStatus() . ': ' . $response->getBody()); + common_log(LOG_ERR, sprintf('Salmon (from profile %d) endpoint %s returned status %s: %s', + $user->id, $endpoint_uri, $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 { - // TRANS: Exception. - throw new Exception(_m('Salmon invalid actor for signing.')); - } - - 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); + // Success! + return true; } }