X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2FOStatus%2Flib%2Fsalmon.php;h=963da650840ecf869fe1bc868779f3ad67d1508a;hb=b5cfcba4712809cb17eabba299ce5ff04f4d7d70;hp=9d4359f74f5e5c875b7faabd6d7a823bdeb7f013;hpb=d9d1a77bb02227e6e79392959643404391df2ea0;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php index 9d4359f74f..963da65084 100644 --- a/plugins/OStatus/lib/salmon.php +++ b/plugins/OStatus/lib/salmon.php @@ -28,6 +28,13 @@ */ 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. * @@ -37,17 +44,20 @@ 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); + try { + $xml = $this->createMagicEnv($xml, $actor); + } 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(); @@ -65,28 +75,37 @@ class Salmon return true; } - public function createMagicEnv($text) + public function createMagicEnv($text, $actor) { $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); + } + } else { + // TRANS: Exception. + throw new Exception(_m('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; } - return $magic_env->unfold($env); + return $magic_env->toXML($env); } - - public function verifyMagicEnv($dom) + public function verifyMagicEnv($text) { $magic_env = new MagicEnvelope(); - - $env = $magic_env->fromDom($dom); + + $env = $magic_env->parse($text); return $magic_env->verify($env); }