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:
		| @@ -947,23 +947,4 @@ class OStatusPlugin extends Plugin | ||||
|         } | ||||
|         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 | ||||
|      * @return Ostatus_profile | ||||
|      * @throws FeedSubException | ||||
|      * @throws Exception | ||||
|      */ | ||||
|  | ||||
|     public static function ensureProfileURL($profile_url, $hints=array()) | ||||
| @@ -723,7 +727,7 @@ class Ostatus_profile extends Memcached_DataObject | ||||
|         $response = $client->get($profile_url); | ||||
|  | ||||
|         if (!$response->isOk()) { | ||||
|             return null; | ||||
|             throw new Exception("Could not reach profile page: " . $profile_url); | ||||
|         } | ||||
|  | ||||
|         // Check if we have a non-canonical URL | ||||
| @@ -777,11 +781,20 @@ class Ostatus_profile extends Memcached_DataObject | ||||
|  | ||||
|         if (!empty($feedurl)) { | ||||
|             $hints['feedurl'] = $feedurl; | ||||
|  | ||||
|             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) | ||||
|     { | ||||
|         $profile = Profile::staticGet('profileurl', $profile_url); | ||||
| @@ -813,6 +826,14 @@ class Ostatus_profile extends Memcached_DataObject | ||||
|         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()) | ||||
|     { | ||||
|         $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) | ||||
|     { | ||||
|         // 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."); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 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) | ||||
|     { | ||||
|         // 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 | ||||
|      * 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 string $feeduri if we already know the canonical feed URI! | ||||
|      * @param string $salmonuri if we already know the salmon return channel URI | ||||
|      * @return Ostatus_profile | ||||
|      * @throws Exception | ||||
|      */ | ||||
|  | ||||
|     public static function ensureActorProfile($activity, $hints=array()) | ||||
| @@ -1066,6 +1114,18 @@ class Ostatus_profile extends Memcached_DataObject | ||||
|         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()) | ||||
|     { | ||||
|         $profile = self::getActivityObjectProfile($object); | ||||
| @@ -1121,6 +1181,8 @@ class Ostatus_profile extends Memcached_DataObject | ||||
|     /** | ||||
|      * Create local ostatus_profile and profile/user_group entries for | ||||
|      * 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 array $hints | ||||
| @@ -1137,7 +1199,8 @@ class Ostatus_profile extends Memcached_DataObject | ||||
|             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."); | ||||
|         } | ||||
|  | ||||
| @@ -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 | ||||
|      * @return Ostatus_profile | ||||
|      * @throws Exception on error conditions | ||||
|   | ||||
		Reference in New Issue
	
	Block a user