]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/FBConnect/FBConnectAuth.php
Fixed notice-options
[quix0rs-gnu-social.git] / plugins / FBConnect / FBConnectAuth.php
index 906e591ea7910f2da45d696329ad93e43d098898..647d5def89a91591130a09d1d19d189625258acc 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Laconica, the distributed open-source microblogging tool
+ * StatusNet, the distributed open-source microblogging tool
  *
  * Plugin to enable Facebook Connect
  *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @category  Plugin
- * @package   Laconica
- * @author    Zach Copley <zach@controlyourself.ca>
- * @copyright 2009 Control Yourself, Inc.
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2009 StatusNet, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://laconi.ca/
+ * @link      http://status.net/
  */
 
 require_once INSTALLDIR . '/plugins/FBConnect/FBConnectPlugin.php';
 
 class FBConnectauthAction extends Action
 {
-
     var $fbuid      = null;
     var $fb_fields  = null;
 
     function prepare($args) {
         parent::prepare($args);
 
-        try {
+        $this->fbuid = getFacebook()->get_loggedin_user();
 
-            $this->fbuid = getFacebook()->get_loggedin_user();
+        if ($this->fbuid > 0) {
+            $this->fb_fields = $this->getFacebookFields($this->fbuid,
+                                                        array('first_name', 'last_name', 'name'));
+        } else {
+            list($proxy, $ip) = common_client_ip();
 
-            if ($this->fbuid > 0) {
-                $this->fb_fields = $this->getFacebookFields($this->fbuid,
-                    array('first_name', 'last_name', 'name'));
-            } else {
-                common_debug("No Facebook User found.");
-            }
+            common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
+                       "Failed auth attempt, proxy = $proxy, ip = $ip.");
 
-        } catch (Exception $e) {
-            common_log(LOG_WARNING, 'Problem getting Facebook uid: ' .
-                $e->getMessage());
+            $this->clientError(_('You must be logged into Facebook to ' .
+                                 'use Facebook Connect.'));
         }
 
         return true;
@@ -62,7 +60,29 @@ class FBConnectauthAction extends Action
         parent::handle($args);
 
         if (common_is_real_login()) {
-            $this->clientError(_('Already logged in.'));
+
+            // User is already logged in.  Does she already have a linked Facebook acct?
+            $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE);
+
+            if (!empty($flink)) {
+
+                // User already has a linked Facebook account and shouldn't be here
+                common_debug('Facebook Connect Plugin - ' .
+                             'There is already a local user (' . $flink->user_id .
+                             ') linked with this Facebook (' . $this->fbuid . ').');
+
+                // We don't want these cookies
+                getFacebook()->clear_cookie_state();
+
+                $this->clientError(_('There is already a local user linked with this Facebook.'));
+
+            } else {
+
+                // User came from the Facebook connect settings tab, and
+                // probably just wants to link/relink their Facebook account
+                $this->connectUser();
+            }
+
         } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 
             $token = $this->trimmed('token');
@@ -78,9 +98,10 @@ class FBConnectauthAction extends Action
                 }
                 $this->createNewUser();
             } else if ($this->arg('connect')) {
-                $this->connectUser();
+                $this->connectNewUser();
             } else {
-                common_debug(print_r($this->args, true), __FILE__);
+                common_debug('Facebook Connect Plugin - ' .
+                             print_r($this->args, true));
                 $this->showForm(_('Something weird happened.'),
                                 $this->trimmed('newname'));
             }
@@ -125,34 +146,60 @@ class FBConnectauthAction extends Action
         }
 
         $this->elementStart('form', array('method' => 'post',
-                                          'id' => 'account_connect',
+                                          'id' => 'form_settings_facebook_connect',
+                                          'class' => 'form_settings',
                                           'action' => common_local_url('FBConnectAuth')));
-        $this->hidden('token', common_session_token());
-        $this->element('h2', null,
-                       _('Create new account'));
-        $this->element('p', null,
-                       _('Create a new user with this nickname.'));
-        $this->input('newname', _('New nickname'),
-                     ($this->username) ? $this->username : '',
-                     _('1-64 lowercase letters or numbers, no punctuation or spaces'));
-        $this->elementStart('p');
+        $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options'));
+        $this->element('legend', null, _('Connection options'));
+        $this->elementStart('ul', 'form_data');
+        $this->elementStart('li');
         $this->element('input', array('type' => 'checkbox',
                                       'id' => 'license',
+                                      'class' => 'checkbox',
                                       'name' => 'license',
                                       'value' => 'true'));
+        $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
         $this->text(_('My text and files are available under '));
         $this->element('a', array('href' => common_config('license', 'url')),
                        common_config('license', 'title'));
         $this->text(_(' except this private data: password, email address, IM address, phone number.'));
-        $this->elementEnd('p');
+        $this->elementEnd('label');
+        $this->elementEnd('li');
+        $this->elementEnd('ul');
+
+        $this->elementStart('fieldset');
+        $this->hidden('token', common_session_token());
+        $this->element('legend', null,
+                       _('Create new account'));
+        $this->element('p', null,
+                       _('Create a new user with this nickname.'));
+        $this->elementStart('ul', 'form_data');
+        $this->elementStart('li');
+        $this->input('newname', _('New nickname'),
+                     ($this->username) ? $this->username : '',
+                     _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+        $this->elementEnd('li');
+        $this->elementEnd('ul');
         $this->submit('create', _('Create'));
-        $this->element('h2', null,
+        $this->elementEnd('fieldset');
+
+        $this->elementStart('fieldset');
+        $this->element('legend', null,
                        _('Connect existing account'));
         $this->element('p', null,
                        _('If you already have an account, login with your username and password to connect it to your Facebook.'));
+        $this->elementStart('ul', 'form_data');
+        $this->elementStart('li');
         $this->input('nickname', _('Existing nickname'));
+        $this->elementEnd('li');
+        $this->elementStart('li');
         $this->password('password', _('Password'));
+        $this->elementEnd('li');
+        $this->elementEnd('ul');
         $this->submit('connect', _('Connect'));
+        $this->elementEnd('fieldset');
+
+        $this->elementEnd('fieldset');
         $this->elementEnd('form');
     }
 
@@ -164,7 +211,6 @@ class FBConnectauthAction extends Action
 
     function createNewUser()
     {
-
         if (common_config('site', 'closed')) {
             $this->clientError(_('Registration not allowed.'));
             return;
@@ -191,7 +237,7 @@ class FBConnectauthAction extends Action
 
         if (!Validate::string($nickname, array('min_length' => 1,
                                                'max_length' => 64,
-                                               'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) {
+                                               'format' => NICKNAME_FMT))) {
             $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
             return;
         }
@@ -227,13 +273,14 @@ class FBConnectauthAction extends Action
         common_set_user($user);
         common_real_login(true);
 
-        common_debug("Registered new user $user->id from Facebook user $this->fbuid");
+        common_debug('Facebook Connect Plugin - ' .
+                     "Registered new user $user->id from Facebook user $this->fbuid");
 
         common_redirect(common_local_url('showstream', array('nickname' => $user->nickname)),
                         303);
     }
 
-    function connectUser()
+    function connectNewUser()
     {
         $nickname = $this->trimmed('nickname');
         $password = $this->trimmed('password');
@@ -245,8 +292,9 @@ class FBConnectauthAction extends Action
 
         $user = User::staticGet('nickname', $nickname);
 
-        if ($user) {
-            common_debug("Legit user to connect to Facebook: $nickname");
+        if (!empty($user)) {
+            common_debug('Facebook Connect Plugin - ' .
+                         "Legit user to connect to Facebook: $nickname");
         }
 
         $result = $this->flinkUser($user->id, $this->fbuid);
@@ -256,7 +304,8 @@ class FBConnectauthAction extends Action
             return;
         }
 
-        common_debug("Connected Facebook user $this->fbuid to local user $user->id");
+        common_debug('Facebook Connnect Plugin - ' .
+                     "Connected Facebook user $this->fbuid to local user $user->id");
 
         common_set_user($user);
         common_real_login(true);
@@ -264,18 +313,38 @@ class FBConnectauthAction extends Action
         $this->goHome($user->nickname);
     }
 
+    function connectUser()
+    {
+        $user = common_current_user();
+
+        $result = $this->flinkUser($user->id, $this->fbuid);
+
+        if (empty($result)) {
+            $this->serverError(_('Error connecting user to Facebook.'));
+            return;
+        }
+
+        common_debug('Facebook Connect Plugin - ' .
+                     "Connected Facebook user $this->fbuid to local user $user->id");
+
+        // Return to Facebook connection settings tab
+        common_redirect(common_local_url('FBConnectSettings'), 303);
+    }
+
     function tryLogin()
     {
-        common_debug("Trying Facebook Login...");
+        common_debug('Facebook Connect Plugin - ' .
+                     "Trying login for Facebook user $this->fbuid.");
 
         $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE);
 
-        if ($flink) {
+        if (!empty($flink)) {
             $user = $flink->getUser();
 
-            if ($user) {
+            if (!empty($user)) {
 
-                common_debug("Logged in Facebook user $flink->foreign_id as user $user->id ($user->nickname)");
+                common_debug('Facebook Connect Plugin - ' .
+                             "Logged in Facebook user $flink->foreign_id as user $user->id ($user->nickname)");
 
                 common_set_user($user);
                 common_real_login(true);
@@ -284,7 +353,8 @@ class FBConnectauthAction extends Action
 
         } else {
 
-            common_debug("No flink found for fbuid: $this->fbuid");
+            common_debug('Facebook Connect Plugin - ' .
+                         "No flink found for fbuid: $this->fbuid - new user");
 
             $this->showForm(null, $this->bestNewNickname());
         }
@@ -354,7 +424,7 @@ class FBConnectauthAction extends Action
     {
         if (!Validate::string($str, array('min_length' => 1,
                                           'max_length' => 64,
-                                          'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) {
+                                          'format' => NICKNAME_FMT))) {
             return false;
         }
         if (!User::allowed_nickname($str)) {
@@ -380,7 +450,8 @@ class FBConnectauthAction extends Action
             return reset($infos);
 
         } catch (Exception $e) {
-            common_log(LOG_WARNING, "Facebook client failure when requesting " .
+            common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
+                       "Facebook client failure when requesting " .
                 join(",", $fields) . " on uid " . $fb_uid .
                     " : ". $e->getMessage());
             return null;