forked from GNUsocial/gnu-social
move signing to take a local actor profile and use local keys
This commit is contained in:
@@ -67,18 +67,8 @@ class MagicEnvelope
|
||||
}
|
||||
|
||||
|
||||
public function signMessage($text, $mimetype, $signer_uri)
|
||||
public function signMessage($text, $mimetype, $keypair)
|
||||
{
|
||||
$signer_uri = $this->normalizeUser($signer_uri);
|
||||
|
||||
if (!$this->checkAuthor($text, $signer_uri)) {
|
||||
throw new Exception("Unable to determine entry author.");
|
||||
}
|
||||
|
||||
$keypair = $this->getKeyPair($signer_uri);
|
||||
if (!$keypair) {
|
||||
throw new Exception("Unable to retrive keypair for ". $signer_uri);
|
||||
}
|
||||
$signature_alg = Magicsig::fromString($keypair);
|
||||
$armored_text = base64_encode($text);
|
||||
|
||||
|
@@ -87,7 +87,7 @@ class OStatusQueueHandler extends QueueHandler
|
||||
// remote user or group.
|
||||
// @fixme as an optimization we can skip this if the
|
||||
// remote profile is subscribed to the author.
|
||||
$oprofile->notifyDeferred($this->notice);
|
||||
$oprofile->notifyDeferred($this->notice, $this->user);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -42,14 +42,14 @@ 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);
|
||||
$xml = $this->createMagicEnv($xml, $actor);
|
||||
}
|
||||
|
||||
$headers = array('Content-Type: application/atom+xml');
|
||||
@@ -70,15 +70,27 @@ class Salmon
|
||||
return true;
|
||||
}
|
||||
|
||||
public function createMagicEnv($text)
|
||||
public function createMagicEnv($text, $actor)
|
||||
{
|
||||
common_log(LOG_DEBUG, "Got actor as : ". print_r($actor, true));
|
||||
$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);
|
||||
}
|
||||
common_log(LOG_DEBUG, "Salmon: Loaded key for ". $user->id);
|
||||
} else {
|
||||
throw new Exception("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;
|
||||
|
@@ -35,8 +35,10 @@ class SalmonQueueHandler extends QueueHandler
|
||||
assert(is_string($data['salmonuri']));
|
||||
assert(is_string($data['entry']));
|
||||
|
||||
$actor = Profile::staticGet($data['actor']);
|
||||
|
||||
$salmon = new Salmon();
|
||||
$salmon->post($data['salmonuri'], $data['entry']);
|
||||
$salmon->post($data['salmonuri'], $data['entry'], $actor);
|
||||
|
||||
// @fixme detect failure and attempt to resend
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user