Start handling salmon entries directly with Notice::saveActivity

More to come...
This commit is contained in:
Mikael Nordfeldth 2016-01-16 17:25:29 +01:00
parent 1f76c1e4a9
commit f53ebdeadb
3 changed files with 31 additions and 13 deletions

View File

@ -380,6 +380,11 @@ abstract class ActivityHandlerPlugin extends Plugin
if (!$this->isMyActivity($activity)) {
return true;
}
if (!isset($this->oldSaveNew)) {
// Handle saveActivity in OStatus class for incoming salmon, remove this event
// handler when all plugins have gotten rid of "oldSaveNew".
return true;
}
$this->log(LOG_INFO, get_called_class()." checking {$activity->id} as a valid Salmon slap.");
@ -428,11 +433,7 @@ abstract class ActivityHandlerPlugin extends Plugin
'is_local' => Notice::REMOTE,
'source' => 'ostatus');
if (!isset($this->oldSaveNew)) {
$notice = Notice::saveActivity($activity, $actor, $options);
} else {
$notice = $this->saveNoticeFromActivity($activity, $actor, $options);
}
return false;
}

View File

@ -250,7 +250,7 @@ class MagicEnvelope
{
$dom = new DOMDocument();
if (!$dom->loadXML(Magicsig::base64_url_decode($this->data))) {
throw new ServerException('Malformed XML in Salmon payload');
throw new ClientException('Malformed XML in Salmon payload');
}
switch ($this->data_type) {
@ -274,7 +274,7 @@ class MagicEnvelope
$dom->documentElement->appendChild($prov);
break;
default:
throw new ServerException('Unknown Salmon payload data type');
throw new ClientException('Unknown Salmon payload data type');
}
return $dom;
}

View File

@ -55,13 +55,13 @@ class SalmonAction extends Action
break;
default:
// TRANS: Client error. Do not translate the quoted "application/[type]" strings.
$this->clientError(_m('Salmon requires "application/magic-envelope+xml". For Diaspora we also accept "application/x-www-form-urlencoded" with an "xml" parameter.', 415));
throw new ClientException(_m('Salmon requires "application/magic-envelope+xml". For Diaspora we also accept "application/x-www-form-urlencoded" with an "xml" parameter.', 415));
}
try {
if (empty($envxml)) {
throw new ClientException('No magic envelope supplied in POST.');
}
try {
$magic_env = new MagicEnvelope($envxml); // parse incoming XML as a MagicEnvelope
$entry = $magic_env->getPayload(); // Not cryptographically verified yet!
@ -70,13 +70,14 @@ class SalmonAction extends Action
common_log(LOG_ERR, "broken actor: " . var_export($this->activity->actor->id, true));
common_log(LOG_ERR, "activity with no actor: " . var_export($this->activity, true));
// TRANS: Exception.
throw new Exception(_m('Received a salmon slap from unidentified actor.'));
throw new ClientException(_m('Activity in salmon slap has no actor id.'));
}
// ensureProfiles sets $this->actor and $this->oprofile
$this->ensureProfiles();
} catch (Exception $e) {
common_debug('Salmon envelope parsing failed with: '.$e->getMessage());
$this->clientError($e->getMessage());
// convert exception to ClientException
throw new ClientException($e->getMessage());
}
// Cryptographic verification test, throws exception on failure
@ -93,7 +94,23 @@ class SalmonAction extends Action
{
parent::handle();
assert($this->activity instanceof Activity);
assert($this->target instanceof Profile);
common_log(LOG_DEBUG, "Got a " . $this->activity->verb);
try {
$options = [ 'source' => 'ostatus' ];
common_debug('Save salmon slap directly with Notice::saveActivity for actor=='.$this->actor->getID());
$stored = Notice::saveActivity($this->activity, $this->actor, $options);
common_debug('Save salmon slap finished, notice id=='.$stored->getID());
return true;
} catch (AlreadyFulfilledException $e) {
// The action's results are already fulfilled. Maybe it was a
// duplicate? Maybe someone's database is out of sync?
// Let's just accept it and move on.
common_log(LOG_INFO, 'Salmon slap carried an event which had already been fulfilled.');
}
try {
if (Event::handle('StartHandleSalmonTarget', array($this->activity, $this->target)) &&
Event::handle('StartHandleSalmon', array($this->activity))) {