From 31c9b2c1d88bc6231dfadc6d7a5114c84c71a571 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Tue, 23 Feb 2016 23:56:43 +0100 Subject: [PATCH] Check the notice context for users in UsersalmonAction --- plugins/OStatus/actions/usersalmon.php | 48 +++++++++++++++++++------- plugins/OStatus/lib/salmonaction.php | 34 ------------------ 2 files changed, 35 insertions(+), 47 deletions(-) diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php index cd24dff3ac..1c4c64efcc 100644 --- a/plugins/OStatus/actions/usersalmon.php +++ b/plugins/OStatus/actions/usersalmon.php @@ -29,22 +29,44 @@ class UsersalmonAction extends SalmonAction { parent::prepare($args); - $id = $this->trimmed('id'); - - if (!$id) { - // TRANS: Client error displayed trying to perform an action without providing an ID. - $this->clientError(_m('No ID.')); - } - - $this->user = User::getKV('id', $id); - - if (!$this->user instanceof User) { - // TRANS: Client error displayed when referring to a non-existing user. - $this->clientError(_m('No such user.')); - } + $this->user = User::getByID($this->trimmed('id')); $this->target = $this->user->getProfile(); + // 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.')); + } + return true; } diff --git a/plugins/OStatus/lib/salmonaction.php b/plugins/OStatus/lib/salmonaction.php index f7e9dde067..d1293728d2 100644 --- a/plugins/OStatus/lib/salmonaction.php +++ b/plugins/OStatus/lib/salmonaction.php @@ -99,40 +99,6 @@ class SalmonAction extends Action 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());