X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2Flib%2Fsalmon.php;h=7f685665fa9a8268c3acf48c34ea37da0fa1eb43;hb=734287cfd37b9833a2d0fdf93c25934c2cae9e53;hp=9d4359f74f5e5c875b7faabd6d7a823bdeb7f013;hpb=e62e49ed3be08e30ab5ea6a5a46e1f90d4715182;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php index 9d4359f74f..7f685665fa 100644 --- a/plugins/OStatus/lib/salmon.php +++ b/plugins/OStatus/lib/salmon.php @@ -28,66 +28,56 @@ */ class Salmon { + const REL_SALMON = 'salmon'; + const REL_MENTIONED = 'mentioned'; + + // XXX: these are deprecated + const NS_REPLIES = "http://salmon-protocol.org/ns/salmon-replies"; + const NS_MENTIONS = "http://salmon-protocol.org/ns/salmon-mention"; + /** * 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) + 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; } - if (!common_config('ostatus', 'skip_signatures')) { - $xml = $this->createMagicEnv($xml); + try { + $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; } - $headers = array('Content-Type: application/atom+xml'); + $headers = array('Content-Type: application/magic-envelope+xml'); 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) - { - $magic_env = new MagicEnvelope(); - - // TODO: Should probably be getting the signer uri as an argument? - $signer_uri = $magic_env->getAuthor($text); - try { - $env = $magic_env->signMessage($text, 'application/atom+xml', $signer_uri); - } catch (Exception $e) { - common_log(LOG_ERR, "Salmon signing failed: ". $e->getMessage()); - return $text; - } - return $magic_env->unfold($env); - } - - - public function verifyMagicEnv($dom) - { - $magic_env = new MagicEnvelope(); - - $env = $magic_env->fromDom($dom); - - return $magic_env->verify($env); + // Success! + return true; } }