X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2Flib%2Fsalmon.php;h=7f685665fa9a8268c3acf48c34ea37da0fa1eb43;hb=734287cfd37b9833a2d0fdf93c25934c2cae9e53;hp=631ebc7d86b350db77bda77f2b1d9473940c4c2d;hpb=1bfbe9badfbe3e79f82e7216d1401f05a2750677;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php index 631ebc7d86..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,53 +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 { - // @todo i18n FIXME: added i18n and use sprintf when using parameters. - throw new Exception("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; } }