]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Exception handling regarding Foreign_link
authorMikael Nordfeldth <mmn@hethane.se>
Sat, 18 Jul 2015 09:39:34 +0000 (11:39 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Sat, 18 Jul 2015 09:39:34 +0000 (11:39 +0200)
12 files changed:
classes/Foreign_link.php
plugins/FacebookBridge/actions/facebookfinishlogin.php
plugins/FacebookBridge/lib/facebookclient.php
plugins/TwitterBridge/actions/twitterauthorization.php
plugins/TwitterBridge/actions/twittersettings.php
plugins/TwitterBridge/daemons/synctwitterfriends.php
plugins/TwitterBridge/daemons/twitterstatusfetcher.php
plugins/TwitterBridge/lib/tweetinqueuehandler.php
plugins/TwitterBridge/lib/twitterimport.php
plugins/TwitterBridge/scripts/fakestream.php
plugins/TwitterBridge/scripts/streamtest.php
plugins/TwitterBridge/twitter.php

index 6e050d0c94d6d0d2d4a554ae3cebf563cc194095..b3757448ade7e59f5d04d27fbff555154b8f6cb0 100644 (file)
@@ -136,12 +136,12 @@ class Foreign_link extends Managed_DataObject
 
     function getUser()
     {
-        return User::getKV($this->user_id);
+        return Profile::getByID($this->user_id)->getUser();
     }
 
     function getProfile()
     {
-        return Profile::getKV('id', $this->user_id);
+        return Profile::getByID($this->user_id);
     }
 
     // Make sure we only ever delete one record at a time
index 080c59612cfaa9d29359661a81a5a91e1b711697..7cf493a994101cb6ca5214fab58545c986fdcac6 100644 (file)
@@ -519,34 +519,30 @@ class FacebookfinishloginAction extends Action
 
     function tryLogin()
     {
-        $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_SERVICE);
-
-        if (!empty($flink)) {
+        try {
+            $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_SERVICE);
             $user = $flink->getUser();
 
-            if (!empty($user)) {
-
-                common_log(
-                    LOG_INFO,
-                    sprintf(
-                        'Logged in Facebook user %s as user %d (%s)',
-                        $this->fbuid,
-                        $user->nickname,
-                        $user->id
-                    ),
-                    __FILE__
-                );
+            common_log(
+                LOG_INFO,
+                sprintf(
+                    'Logged in Facebook user %s as user %d (%s)',
+                    $this->fbuid,
+                    $user->nickname,
+                    $user->id
+                ),
+                __FILE__
+            );
 
-                common_set_user($user);
-                common_real_login(true);
+            common_set_user($user);
+            common_real_login(true);
 
-                // clear out the stupid cookie
-                setcookie('fb_access_token', '', time() - 3600); // one hour ago
+            // clear out the stupid cookie
+            setcookie('fb_access_token', '', time() - 3600); // one hour ago
 
-                $this->goHome($user->nickname);
-            }
+            $this->goHome($user->nickname);
 
-        } else {
+        } catch (NoResultException $e) {
             $this->showForm(null, $this->bestNewNickname());
         }
     }
index e55e19d88be8c960eb369ce1ad5bb00eba097b36..5faad5dfb767f009606311147d935408a6a57dce 100644 (file)
@@ -66,13 +66,12 @@ class Facebookclient
         $this->notice = $notice;
 
         $profile_id = $profile ? $profile->id : $notice->profile_id;
-        $this->flink = Foreign_link::getByUserID(
-            $profile_id,
-            FACEBOOK_SERVICE
-        );
-
-        if (!empty($this->flink)) {
+        try {
+            $this->flink = Foreign_link::getByUserID($profile_id, FACEBOOK_SERVICE);
             $this->user = $this->flink->getUser();
+        } catch (NoResultException $e) {
+            // at least $this->flink could've gotten set to something,
+            // but the logic that was here before didn't care, so let's not care either
         }
     }
 
index 3eb302bda449fe5a43de7c97636463273325b286..c9b892b6408d74ec5b388cf0333704c92699dfae 100644 (file)
@@ -553,20 +553,19 @@ class TwitterauthorizationAction extends FormAction
             $flink = Foreign_link::getByForeignID($this->twuid, TWITTER_SERVICE);
             $user = $flink->getUser();
 
-            if ($user instanceof User) {
-                common_debug('TwitterBridge Plugin - ' .
-                             "Logged in Twitter user $flink->foreign_id as user $user->id ($user->nickname)");
+            common_debug('TwitterBridge Plugin - ' .
+                         "Logged in Twitter user $flink->foreign_id as user $user->id ($user->nickname)");
 
-                common_set_user($user);
-                common_real_login(true);
-                $this->goHome($user->nickname);
-            }
+            common_set_user($user);
+            common_real_login(true);
+            $this->goHome($user->nickname);
         } catch (NoResultException $e) {
             // Either no Foreign_link was found or not the user connected to it.
             // Let's just continue to allow creating or logging in as a new user.
         }
         common_debug("TwitterBridge Plugin - No flink found for twuid: {$this->twuid} - new user");
 
+        // FIXME: what do we want to do here? I forgot
         return;
         throw new ServerException(_m('No foreign link found for Twitter user'));
     }
index 6665ae619ef3660e75f6516c52892e35ffbf88aa..ccdb44fcb9869fa524acdbf5ce8cd741bd196a08 100644 (file)
@@ -184,7 +184,7 @@ class TwittersettingsAction extends ProfileSettingsAction
 
             $this->elementEnd('ul');
 
-            if ($this->flink) {
+            if ($this->flink instanceof Foreign_link) {
                 // TRANS: Button text for saving Twitter integration settings.
                 $this->submit('save', _m('BUTTON','Save'));
             } else {
index a3862eedfde45e9fcd67da1aa4101cb71b8fd87a..9fa3b282b47ef8ba73e218707f20f6296ea9a38e 100755 (executable)
@@ -104,6 +104,7 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
         return $flinks;
     }
 
+    // FIXME: make it so we can force a Foreign_link here without colliding with parent
     function childTask($flink) {
         // Each child ps needs its own DB connection
 
@@ -124,7 +125,7 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
         unset($_DB_DATAOBJECT['CONNECTIONS']);
     }
 
-    function fetchTwitterFriends($flink)
+    function fetchTwitterFriends(Foreign_link $flink)
     {
         $friends = array();
 
@@ -192,8 +193,14 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
         return $friends;
     }
 
-    function subscribeTwitterFriends($flink)
+    function subscribeTwitterFriends(Foreign_link $flink)
     {
+        try {
+            $profile = $flink->getProfile();
+        } catch (NoResultException $e) {
+            common_log(LOG_WARNING, 'Foreign_link has no matching local profile for local ID: '.$flink->user_id);
+        }
+
         $friends = $this->fetchTwitterFriends($flink);
 
         if (empty($friends)) {
@@ -203,8 +210,6 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
             return false;
         }
 
-        $profile = $flink->getProfile();
-
         foreach ($friends as $friend) {
 
             $friend_name = $friend->screen_name;
@@ -219,31 +224,24 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
                 continue;
             }
 
-            // Check to see if there's a related local user
-
-            $friend_flink = Foreign_link::getByForeignID($friend_id,
-                                                         TWITTER_SERVICE);
-
-            if (!empty($friend_flink)) {
+            // Check to see if there's a related local user and try to subscribe
+            try {
+                $friend_flink = Foreign_link::getByForeignID($friend_id, TWITTER_SERVICE);
 
                 // Get associated user and subscribe her
-
-                $friend_profile = Profile::getKV('id', $friend_flink->user_id);
-
-                if ($friend_profile instanceof Profile) {
-                    try {
-                        $other = Profile::getKV('id', $invites->user_id);
-                        Subscription::start($profile, $friend_profile);
-                        common_log(LOG_INFO,
-                                   $this->name() . ' - Subscribed ' .
-                                   "{$friend_profile->nickname} to {$profile->nickname}.");
-                    } catch (Exception $e) {
-                        common_debug($this->name() .
-                                     ' - Tried and failed subscribing ' .
-                                     "{$friend_profile->nickname} to {$profile->nickname} - " .
-                                     $e->getMessage());
-                    }
-                }
+                $friend_profile = $friend_flink->getProfile();
+
+                Subscription::start($profile, $friend_profile);
+                common_log(LOG_INFO,
+                           $this->name() . ' - Subscribed ' .
+                           "{$friend_profile->nickname} to {$profile->nickname}.");
+            } catch (NoResultException $e) {
+                // either no foreign link for this friend's foreign ID or no profile found on local ID.
+            } catch (Exception $e) {
+                common_debug($this->name() .
+                             ' - Tried and failed subscribing ' .
+                             "{$friend_profile->nickname} to {$profile->nickname} - " .
+                             $e->getMessage());
             }
         }
 
index d444b8aa5dd70cd3f5c66ae090ad3d0ff33edaa3..83e8a0df5e57350503478530a1759c898a0e24c1 100755 (executable)
@@ -128,6 +128,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
         return $flinks;
     }
 
+    // FIXME: make it so we can force a Foreign_link here without colliding with parent
     function childTask($flink) {
         // Each child ps needs its own DB connection
 
@@ -149,14 +150,8 @@ class TwitterStatusFetcher extends ParallelizingDaemon
         unset($_DB_DATAOBJECT['CONNECTIONS']);
     }
 
-    function getTimeline($flink, $timelineUri = 'home_timeline')
+    function getTimeline(Foreign_link $flink, $timelineUri = 'home_timeline')
     {
-        if (empty($flink)) {
-            common_log(LOG_ERR, $this->name() .
-                       " - Can't retrieve Foreign_link for foreign ID $fid");
-            return;
-        }
-
         common_log(LOG_DEBUG, $this->name() . ' - Trying to get ' . $timelineUri .
                    ' timeline for Twitter user ' . $flink->foreign_id);
 
index cc0c05f9a669abbe2bfd4496c526021f2341dda4..69ce5a61e97302518ee4011b8b15749adb34c414 100644 (file)
@@ -51,8 +51,8 @@ class TweetInQueueHandler extends QueueHandler
         $importer = new TwitterImport();
         $notice = $importer->importStatus($status);
         if ($notice instanceof Notice) {
-            $flink = Foreign_link::getByForeignID($receiver, TWITTER_SERVICE);
-            if ($flink instanceof Foreign_link) {
+            try {
+                $flink = Foreign_link::getByForeignID($receiver, TWITTER_SERVICE);
                 common_log(LOG_DEBUG, "TweetInQueueHandler - Got flink so add notice ".
                            $notice->id." to attentions for user ".$flink->user_id);
                 try {
@@ -63,7 +63,7 @@ class TweetInQueueHandler extends QueueHandler
                     common_log(LOG_ERR, "Failed adding notice {$notice->id} to attentions for user {$flink->user_id}: " .
                                         $e->getMessage());
                 }
-            } else {
+            } catch (NoResultException $e) {
                common_log(LOG_DEBUG, "TweetInQueueHandler - No flink found for foreign user ".$receiver);
             }
         }
index 45b7547ce2fe7e5b79b6fef2bba0f2686eab0cd9..d929fecf83291deff3b5b218cce37a1e1c7485a1 100644 (file)
@@ -542,17 +542,17 @@ class TwitterImport
         }
 
         foreach ($status->entities->user_mentions as $mention) {
-            $flink = Foreign_link::getByForeignID($mention->id, TWITTER_SERVICE);
-            if (!empty($flink)) {
-                $user = User::getKV('id', $flink->user_id);
-                if (!empty($user)) {
-                    $reply = new Reply();
-                    $reply->notice_id  = $notice->id;
-                    $reply->profile_id = $user->id;
-                    $reply->modified   = $notice->created;
-                    common_log(LOG_INFO, __METHOD__ . ": saving reply: notice {$notice->id} to profile {$user->id}");
-                    $id = $reply->insert();
-                }
+            try {
+                $flink = Foreign_link::getByForeignID($mention->id, TWITTER_SERVICE);
+                $user = $flink->getUser();
+                $reply = new Reply();
+                $reply->notice_id  = $notice->id;
+                $reply->profile_id = $user->id;
+                $reply->modified   = $notice->created;
+                common_log(LOG_INFO, __METHOD__ . ": saving reply: notice {$notice->id} to profile {$user->id}");
+                $id = $reply->insert();
+            } catch (NoResultException $e) {
+                common_log(LOG_WARNING, 'No local user found for Foreign_link with local User id: '.$flink->user_id);
             }
         }
     }
index e827a07117ca7b44623c0db3875c323cfc3341f3..5d965e7394f383df85867c267891b21a8ca6c3d2 100644 (file)
@@ -62,12 +62,7 @@ if (have_option('n')) {
  */
 function twitterAuthForUser(User $user)
 {
-    $flink = Foreign_link::getByUserID($user->id,
-                                       TWITTER_SERVICE);
-    if (!$flink) {
-        throw new ServerException("No Twitter config for this user.");
-    }
-
+    $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
     $token = TwitterOAuthClient::unpackToken($flink->credentials);
     if (!$token) {
         throw new ServerException("No Twitter OAuth credentials for this user.");
index 4e8340bb3f7c9a27473a22d3ccf4a67458446653..a642920cee908e09b0363c03a0c9cc52c4958dd2 100644 (file)
@@ -63,12 +63,7 @@ if (have_option('n')) {
  */
 function twitterAuthForUser(User $user)
 {
-    $flink = Foreign_link::getByUserID($user->id,
-                                       TWITTER_SERVICE);
-    if (!$flink) {
-        throw new ServerException("No Twitter config for this user.");
-    }
-
+    $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
     $token = TwitterOAuthClient::unpackToken($flink->credentials);
     if (!$token) {
         throw new ServerException("No Twitter OAuth credentials for this user.");
index bdcd61db45aa5fbecf7c2863b618a008b31318b4..0f1e686ac8865b35548cf5f0de62f6904372d8ea 100644 (file)
@@ -181,11 +181,15 @@ function twitter_id($status, $field='id')
  */
 function broadcast_twitter($notice)
 {
-    $flink = Foreign_link::getByUserID($notice->profile_id,
-                                       TWITTER_SERVICE);
+    try {
+        $flink = Foreign_link::getByUserID($notice->profile_id, TWITTER_SERVICE);
+    } catch (NoResultException $e) {
+        // Alright so don't broadcast it then! (since there's no foreign link)
+        return true;
+    }
 
     // Don't bother with basic auth, since it's no longer allowed
-    if (!empty($flink) && TwitterOAuthClient::isPackedToken($flink->credentials)) {
+    if (TwitterOAuthClient::isPackedToken($flink->credentials)) {
         if (is_twitter_bound($notice, $flink)) {
             if (!empty($notice->repeat_of) && is_twitter_notice($notice->repeat_of)) {
                 $retweet = retweet_notice($flink, Notice::getKV('id', $notice->repeat_of));
@@ -273,8 +277,13 @@ function twitter_update_params($notice)
     return $params;
 }
 
-function broadcast_oauth($notice, $flink) {
-    $user = $flink->getUser();
+function broadcast_oauth($notice, Foreign_link $flink) {
+    try {
+        $user = $flink->getUser();
+    } catch (ServerException $e) {
+        common_log(LOG_WARNING, 'Discarding broadcast_oauth for notice '.$notice->id.' because of exception: '.$e->getMessage());
+        return true;
+    }
     $statustxt = format_status($notice);
     $params = twitter_update_params($notice);