OStatus profile setup cleanup
* drop OStatusPlugin::localProfileFromUrl(), we can just look up on user.uri * clean up a few edge cases that returned null through Ostatus_profile::ensure* code paths, now throws clear exception when we can't find a feed from the given profile url * add some doc comments on the ensure* methods
This commit is contained in:
parent
0f1f7ab79b
commit
5d3bce49b8
@ -947,23 +947,4 @@ class OStatusPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility function to check if the given URL is a canonical user profile
|
|
||||||
* page, and if so return the ID number.
|
|
||||||
*
|
|
||||||
* @param string $url
|
|
||||||
* @return mixed int or false
|
|
||||||
*/
|
|
||||||
public static function localProfileFromUrl($url)
|
|
||||||
{
|
|
||||||
$template = common_local_url('userbyid', array('id' => '31337'));
|
|
||||||
$template = preg_quote($template, '/');
|
|
||||||
$template = str_replace('31337', '(\d+)', $template);
|
|
||||||
if (preg_match("/$template/", $url, $matches)) {
|
|
||||||
return intval($matches[1]);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -700,9 +700,13 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Look up and if necessary create an Ostatus_profile for the remote entity
|
||||||
|
* with the given profile page URL. This should never return null -- you
|
||||||
|
* will either get an object or an exception will be thrown.
|
||||||
|
*
|
||||||
* @param string $profile_url
|
* @param string $profile_url
|
||||||
* @return Ostatus_profile
|
* @return Ostatus_profile
|
||||||
* @throws FeedSubException
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static function ensureProfileURL($profile_url, $hints=array())
|
public static function ensureProfileURL($profile_url, $hints=array())
|
||||||
@ -723,7 +727,7 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
$response = $client->get($profile_url);
|
$response = $client->get($profile_url);
|
||||||
|
|
||||||
if (!$response->isOk()) {
|
if (!$response->isOk()) {
|
||||||
return null;
|
throw new Exception("Could not reach profile page: " . $profile_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if we have a non-canonical URL
|
// Check if we have a non-canonical URL
|
||||||
@ -777,11 +781,20 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
|
|
||||||
if (!empty($feedurl)) {
|
if (!empty($feedurl)) {
|
||||||
$hints['feedurl'] = $feedurl;
|
$hints['feedurl'] = $feedurl;
|
||||||
|
|
||||||
return self::ensureFeedURL($feedurl, $hints);
|
return self::ensureFeedURL($feedurl, $hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw new Exception("Could not find a feed URL for profile page " . $finalUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look up the Ostatus_profile, if present, for a remote entity with the
|
||||||
|
* given profile page URL. Will return null for both unknown and invalid
|
||||||
|
* remote profiles.
|
||||||
|
*
|
||||||
|
* @return mixed Ostatus_profile or null
|
||||||
|
* @throws Exception for local profiles
|
||||||
|
*/
|
||||||
static function getFromProfileURL($profile_url)
|
static function getFromProfileURL($profile_url)
|
||||||
{
|
{
|
||||||
$profile = Profile::staticGet('profileurl', $profile_url);
|
$profile = Profile::staticGet('profileurl', $profile_url);
|
||||||
@ -813,6 +826,14 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look up and if necessary create an Ostatus_profile for remote entity
|
||||||
|
* with the given update feed. This should never return null -- you will
|
||||||
|
* either get an object or an exception will be thrown.
|
||||||
|
*
|
||||||
|
* @return Ostatus_profile
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
public static function ensureFeedURL($feed_url, $hints=array())
|
public static function ensureFeedURL($feed_url, $hints=array())
|
||||||
{
|
{
|
||||||
$discover = new FeedDiscovery();
|
$discover = new FeedDiscovery();
|
||||||
@ -841,6 +862,18 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look up and, if necessary, create an Ostatus_profile for the remote
|
||||||
|
* profile with the given Atom feed - actually loaded from the feed.
|
||||||
|
* This should never return null -- you will either get an object or
|
||||||
|
* an exception will be thrown.
|
||||||
|
*
|
||||||
|
* @param DOMElement $feedEl root element of a loaded Atom feed
|
||||||
|
* @param array $hints additional discovery information passed from higher levels
|
||||||
|
* @fixme should this be marked public?
|
||||||
|
* @return Ostatus_profile
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
public static function ensureAtomFeed($feedEl, $hints)
|
public static function ensureAtomFeed($feedEl, $hints)
|
||||||
{
|
{
|
||||||
// Try to get a profile from the feed activity:subject
|
// Try to get a profile from the feed activity:subject
|
||||||
@ -891,6 +924,18 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
throw new FeedSubException("Can't find enough profile information to make a feed.");
|
throw new FeedSubException("Can't find enough profile information to make a feed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look up and, if necessary, create an Ostatus_profile for the remote
|
||||||
|
* profile with the given RSS feed - actually loaded from the feed.
|
||||||
|
* This should never return null -- you will either get an object or
|
||||||
|
* an exception will be thrown.
|
||||||
|
*
|
||||||
|
* @param DOMElement $feedEl root element of a loaded RSS feed
|
||||||
|
* @param array $hints additional discovery information passed from higher levels
|
||||||
|
* @fixme should this be marked public?
|
||||||
|
* @return Ostatus_profile
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
public static function ensureRssChannel($feedEl, $hints)
|
public static function ensureRssChannel($feedEl, $hints)
|
||||||
{
|
{
|
||||||
// Special-case for Posterous. They have some nice metadata in their
|
// Special-case for Posterous. They have some nice metadata in their
|
||||||
@ -1054,11 +1099,14 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
/**
|
/**
|
||||||
* Fetch, or build if necessary, an Ostatus_profile for the actor
|
* Fetch, or build if necessary, an Ostatus_profile for the actor
|
||||||
* in a given Activity Streams activity.
|
* in a given Activity Streams activity.
|
||||||
|
* This should never return null -- you will either get an object or
|
||||||
|
* an exception will be thrown.
|
||||||
*
|
*
|
||||||
* @param Activity $activity
|
* @param Activity $activity
|
||||||
* @param string $feeduri if we already know the canonical feed URI!
|
* @param string $feeduri if we already know the canonical feed URI!
|
||||||
* @param string $salmonuri if we already know the salmon return channel URI
|
* @param string $salmonuri if we already know the salmon return channel URI
|
||||||
* @return Ostatus_profile
|
* @return Ostatus_profile
|
||||||
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static function ensureActorProfile($activity, $hints=array())
|
public static function ensureActorProfile($activity, $hints=array())
|
||||||
@ -1066,6 +1114,18 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
return self::ensureActivityObjectProfile($activity->actor, $hints);
|
return self::ensureActivityObjectProfile($activity->actor, $hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch, or build if necessary, an Ostatus_profile for the profile
|
||||||
|
* in a given Activity Streams object (can be subject, actor, or object).
|
||||||
|
* This should never return null -- you will either get an object or
|
||||||
|
* an exception will be thrown.
|
||||||
|
*
|
||||||
|
* @param ActivityObject $object
|
||||||
|
* @param array $hints additional discovery information passed from higher levels
|
||||||
|
* @return Ostatus_profile
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
|
||||||
public static function ensureActivityObjectProfile($object, $hints=array())
|
public static function ensureActivityObjectProfile($object, $hints=array())
|
||||||
{
|
{
|
||||||
$profile = self::getActivityObjectProfile($object);
|
$profile = self::getActivityObjectProfile($object);
|
||||||
@ -1121,6 +1181,8 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
/**
|
/**
|
||||||
* Create local ostatus_profile and profile/user_group entries for
|
* Create local ostatus_profile and profile/user_group entries for
|
||||||
* the provided remote user or group.
|
* the provided remote user or group.
|
||||||
|
* This should never return null -- you will either get an object or
|
||||||
|
* an exception will be thrown.
|
||||||
*
|
*
|
||||||
* @param ActivityObject $object
|
* @param ActivityObject $object
|
||||||
* @param array $hints
|
* @param array $hints
|
||||||
@ -1137,7 +1199,8 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
throw new Exception("No profile URI");
|
throw new Exception("No profile URI");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OStatusPlugin::localProfileFromUrl($homeuri)) {
|
$user = User::staticGet('uri', $homeuri);
|
||||||
|
if ($user) {
|
||||||
throw new Exception("Local user can't be referenced as remote.");
|
throw new Exception("Local user can't be referenced as remote.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1437,6 +1500,11 @@ class Ostatus_profile extends Memcached_DataObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Look up, and if necessary create, an Ostatus_profile for the remote
|
||||||
|
* entity with the given webfinger address.
|
||||||
|
* This should never return null -- you will either get an object or
|
||||||
|
* an exception will be thrown.
|
||||||
|
*
|
||||||
* @param string $addr webfinger address
|
* @param string $addr webfinger address
|
||||||
* @return Ostatus_profile
|
* @return Ostatus_profile
|
||||||
* @throws Exception on error conditions
|
* @throws Exception on error conditions
|
||||||
|
Loading…
Reference in New Issue
Block a user