diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php index 5d2a92d99b..cd24dff3ac 100644 --- a/plugins/OStatus/actions/usersalmon.php +++ b/plugins/OStatus/actions/usersalmon.php @@ -71,30 +71,6 @@ class UsersalmonAction extends SalmonAction throw new ClientException(_m('Cannot handle that kind of post.')); } - // Notice must either be a) in reply to a notice by this user - // or b) in reply to a notice to the attention of this user - // or c) to the attention of this user - - $context = $this->activity->context; - $notice = false; - - if (!empty($context->replyToID)) { - $notice = Notice::getKV('uri', $context->replyToID); - } - - if ($notice instanceof Notice && - ($notice->profile_id == $this->target->id || - array_key_exists($this->target->id, $notice->getReplies()))) - { - // In reply to a notice either from or mentioning this user. - } elseif (!empty($context->attention) && - array_key_exists($this->target->getUri(), $context->attention)) { - // To the attention of this user. - } else { - // TRANS: Client exception. - throw new ClientException(_m('Not to anyone in reply to anything.')); - } - try { $this->saveNotice(); } catch (AlreadyFulfilledException $e) { diff --git a/plugins/OStatus/lib/salmonaction.php b/plugins/OStatus/lib/salmonaction.php index 41e4262498..f7e9dde067 100644 --- a/plugins/OStatus/lib/salmonaction.php +++ b/plugins/OStatus/lib/salmonaction.php @@ -98,6 +98,41 @@ class SalmonAction extends Action assert($this->target instanceof Profile); common_log(LOG_DEBUG, "Got a " . $this->activity->verb); + + // Notice must either be a) in reply to a notice by this user + // or b) in reply to a notice to the attention of this user + // or c) to the attention of this user + // or d) reference the user as an activity:object + + $notice = null; + + if (!empty($this->activity->context->replyToID)) { + try { + $notice = Notice::getKV('uri', $this->activity->context->replyToID); + } catch (NoResultException $e) { + $notice = false; + } + } + + if ($notice instanceof Notice && + ($this->target->sameAs($notice->getProfile()) + || array_key_exists($this->target->getID(), $notice->getAttentionProfileIDs()) + )) { + // In reply to a notice either from or mentioning this user. + common_debug('User is the owner or was in the attention list of thr:in-reply-to activity.'); + } elseif (!empty($this->activity->context->attention) && + array_key_exists($this->target->getUri(), $this->activity->context->attention)) { + // To the attention of this user. + common_debug('User was in attention list of salmon slap.'); + } elseif (!empty($this->activity->objects) && $this->activity->objects[0]->id === $this->target->getUri()) { + // The user is the object of this slap (unfollow for example) + common_debug('User URI was the id of the salmon slap object.'); + } else { + common_debug('User was NOT found in salmon slap context.'); + // TRANS: Client exception. + throw new ClientException(_m('The owner of this salmon endpoint was not in the context of the carried slap.')); + } + try { $options = [ 'source' => 'ostatus' ]; common_debug('Save salmon slap directly with Notice::saveActivity for actor=='.$this->actor->getID());