Merge branch 'swat0' into 0.9.x

This commit is contained in:
Evan Prodromou
2010-09-02 16:58:55 -04:00
6 changed files with 105 additions and 18 deletions

View File

@@ -984,4 +984,18 @@ class OStatusPlugin extends Plugin
$feed = $oprofile->feeduri;
return false;
}
function onStartGetProfileFromURI($uri, &$profile) {
// XXX: do discovery here instead (OStatus_profile::ensureProfileURI($uri))
$oprofile = Ostatus_profile::staticGet('uri', $uri);
if (!empty($oprofile) && !$oprofile->isGroup()) {
$profile = $oprofile->localProfile();
return false;
}
return true;
}
}

View File

@@ -71,6 +71,7 @@ class UsersalmonAction extends SalmonAction
// Notice must either be a) in reply to a notice by this user
// or b) to the attention of this user
// or c) in reply to a notice to the attention of this user
$context = $this->activity->context;
@@ -79,8 +80,9 @@ class UsersalmonAction extends SalmonAction
if (empty($notice)) {
throw new ClientException("In reply to unknown notice");
}
if ($notice->profile_id != $this->user->id) {
throw new ClientException("In reply to a notice not by this user");
if ($notice->profile_id != $this->user->id &&
!in_array($this->user->id, $notice->getReplies())) {
throw new ClientException("In reply to a notice not by this user and not mentioning this user");
}
} else if (!empty($context->attention)) {
if (!in_array($this->user->uri, $context->attention) &&

View File

@@ -700,14 +700,16 @@ class Ostatus_profile extends Memcached_DataObject
}
// Is the recipient a remote group?
$oprofile = Ostatus_profile::staticGet('uri', $recipient);
$oprofile = Ostatus_profile::ensureProfileURI($recipient);
if ($oprofile) {
if ($oprofile->isGroup()) {
// Deliver to local members of this remote group.
// @fixme sender verification?
$groups[] = $oprofile->group_id;
} else {
common_log(LOG_DEBUG, "Skipping reply to remote profile $recipient");
// may be canonicalized or something
$replies[] = $oprofile->uri;
}
continue;
}
@@ -1764,6 +1766,37 @@ class Ostatus_profile extends Memcached_DataObject
return $file;
}
static function ensureProfileURI($uri)
{
$oprofile = null;
// First, try to query it
$oprofile = Ostatus_profile::staticGet('uri', $uri);
// If unfound, do discovery stuff
if (empty($oprofile)) {
if (preg_match("/^(\w+)\:(.*)/", $uri, $match)) {
$protocol = $match[1];
switch ($protocol) {
case 'http':
case 'https':
$oprofile = Ostatus_profile::ensureProfileURL($uri);
break;
case 'acct':
case 'mailto':
$rest = $match[2];
$oprofile = Ostatus_profile::ensureWebfinger($rest);
default:
common_log("Unrecognized URI protocol for profile: $protocol ($uri)");
break;
}
}
}
return $oprofile;
}
}
/**

View File

@@ -67,6 +67,17 @@ class OStatusQueueHandler extends QueueHandler
}
}
if (!empty($this->notice->reply_to)) {
$replyTo = Notice::staticGet('id', $this->notice->reply_to);
if (!empty($replyTo)) {
foreach($replyTo->getReplies() as $profile_id) {
$oprofile = Ostatus_profile::staticGet('profile_id', $profile_id);
if ($oprofile) {
$this->pingReply($oprofile);
}
}
}
}
return true;
}
@@ -161,7 +172,7 @@ class OStatusQueueHandler extends QueueHandler
* Queue up direct feed update pushes to subscribers on our internal hub.
* If there are a large number of subscriber sites, intermediate bulk
* distribution triggers may be queued.
*
*
* @param string $atom update feed, containing only new/changed items
* @param HubSub $sub open query of subscribers
*/