]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Getting a profile from URI would throw exceptions on remote URL lookup failures
authorMikael Nordfeldth <mmn@hethane.se>
Wed, 30 Oct 2013 13:43:40 +0000 (14:43 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Wed, 30 Oct 2013 13:43:40 +0000 (14:43 +0100)
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/classes/Ostatus_profile.php

index 29dde3119e4a5eb165714ce2ef4d82cf6d551d89..777ee66bd957603ab6dac667c3c0fa914d4f8e1f 100644 (file)
@@ -1078,7 +1078,7 @@ class OStatusPlugin extends Plugin
     function onStartGetProfileUri($profile, &$uri)
     {
         $oprofile = Ostatus_profile::getKV('profile_id', $profile->id);
-        if (!empty($oprofile)) {
+        if ($oprofile instanceof Ostatus_profile) {
             $uri = $oprofile->uri;
             return false;
         }
@@ -1302,16 +1302,13 @@ class OStatusPlugin extends Plugin
 
         // Now, check remotely
 
-        $oprofile = Ostatus_profile::ensureProfileURI($uri);
-
-        if (!empty($oprofile)) {
+        try {
+            $oprofile = Ostatus_profile::ensureProfileURI($uri);
             $profile = $oprofile->localProfile();
-            return false;
+            return !($profile instanceof Profile);  // localProfile won't throw exception but can return null
+        } catch (Exception $e) {
+            return true; // It's not an OStatus profile as far as we know, continue event handling
         }
-
-        // Still not a hit, so give up.
-
-        return true;
     }
 
     function onEndWebFingerProfileLinks(XML_XRD $xrd, Profile $target)
index 95b3b652d16131b80c2f1ea3d3ff479810d1c942..fcef6eb701a3f0f0770faaee59b7546b64e18c05 100644 (file)
@@ -976,7 +976,7 @@ class Ostatus_profile extends Managed_DataObject
     {
         $oprofile = self::getFromProfileURL($profile_url);
 
-        if (!empty($oprofile)) {
+        if ($oprofile instanceof Ostatus_profile) {
             return $oprofile;
         }
 
@@ -1004,7 +1004,7 @@ class Ostatus_profile extends Managed_DataObject
 
             $oprofile = self::getFromProfileURL($finalUrl);
 
-            if (!empty($oprofile)) {
+            if ($oprofile instanceof Ostatus_profile) {
                 return $oprofile;
             }
         }
@@ -1063,24 +1063,19 @@ class Ostatus_profile extends Managed_DataObject
     static function getFromProfileURL($profile_url)
     {
         $profile = Profile::getKV('profileurl', $profile_url);
-
-        if (empty($profile)) {
+        if (!$profile instanceof Profile) {
             return null;
         }
 
         // Is it a known Ostatus profile?
-
         $oprofile = Ostatus_profile::getKV('profile_id', $profile->id);
-
-        if (!empty($oprofile)) {
+        if ($oprofile instanceof Ostatus_profile) {
             return $oprofile;
         }
 
         // Is it a local user?
-
         $user = User::getKV('id', $profile->id);
-
-        if (!empty($user)) {
+        if ($user instanceof User) {
             // @todo i18n FIXME: use sprintf and add i18n (?)
             throw new OStatusShadowException($profile, "'$profile_url' is the profile for local user '{$user->nickname}'.");
         }
@@ -1899,7 +1894,7 @@ class Ostatus_profile extends Managed_DataObject
                 throw new Exception(_m('Not a valid webfinger address.'));
             }
             $oprofile = Ostatus_profile::getKV('uri', $uri);
-            if (!empty($oprofile)) {
+            if ($oprofile instanceof Ostatus_profile) {
                 return $oprofile;
             }
         }
@@ -1907,7 +1902,7 @@ class Ostatus_profile extends Managed_DataObject
         // Try looking it up
         $oprofile = Ostatus_profile::getKV('uri', 'acct:'.$addr);
 
-        if (!empty($oprofile)) {
+        if ($oprofile instanceof Ostatus_profile) {
             self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
             return $oprofile;
         }
@@ -1998,7 +1993,7 @@ class Ostatus_profile extends Managed_DataObject
 
             $profile_id = $profile->insert();
 
-            if (!$profile_id) {
+            if ($profile_id === false) {
                 common_log_db_error($profile, 'INSERT', __FILE__);
                 // TRANS: Exception. %s is a webfinger address.
                 throw new Exception(sprintf(_m('Could not save profile for "%s".'),$addr));
@@ -2017,7 +2012,7 @@ class Ostatus_profile extends Managed_DataObject
 
             $result = $oprofile->insert();
 
-            if (!$result) {
+            if ($result === false) {
                 common_log_db_error($oprofile, 'INSERT', __FILE__);
                 // TRANS: Exception. %s is a webfinger address.
                 throw new Exception(sprintf(_m('Could not save OStatus profile for "%s".'),$addr));
@@ -2085,33 +2080,34 @@ class Ostatus_profile extends Managed_DataObject
 
         $oprofile = Ostatus_profile::getKV('uri', $uri);
 
-        // If unfound, do discovery stuff
+        if ($oprofile instanceof Ostatus_profile) {
+            return $oprofile;
+        }
 
-        if (!$oprofile instanceof Ostatus_profile) {
-            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);
-                    break;
-                default:
-                    // TRANS: Server exception.
-                    // TRANS: %1$s is a protocol, %2$s is a URI.
-                    throw new ServerException(sprintf(_m('Unrecognized URI protocol for profile: %1$s (%2$s).'),
-                                                      $protocol,
-                                                      $uri));
-                    break;
-                }
-            } else {
-                // TRANS: Server exception. %s is a URI.
-                throw new ServerException(sprintf(_m('No URI protocol for profile: %s.'),$uri));
+        // If unfound, do discovery stuff
+        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);
+                break;
+            default:
+                // TRANS: Server exception.
+                // TRANS: %1$s is a protocol, %2$s is a URI.
+                throw new ServerException(sprintf(_m('Unrecognized URI protocol for profile: %1$s (%2$s).'),
+                                                  $protocol,
+                                                  $uri));
+                break;
             }
+        } else {
+            // TRANS: Server exception. %s is a URI.
+            throw new ServerException(sprintf(_m('No URI protocol for profile: %s.'),$uri));
         }
 
         return $oprofile;