Start handling salmon entries directly with Notice::saveActivity
More to come...
This commit is contained in:
parent
1f76c1e4a9
commit
f53ebdeadb
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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))) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user