]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Added configuration option to only allow OpenID logins.
authorJeffery To <jeffery.to@gmail.com>
Sun, 9 Aug 2009 11:12:59 +0000 (19:12 +0800)
committerJeffery To <jeffery.to@gmail.com>
Mon, 10 Aug 2009 05:57:39 +0000 (13:57 +0800)
If $config['site']['openidonly'] is set to true:
* the Login/Register pages will be removed from the navigation;
* directly accesses to the Login/Register pages will redirect to the
  OpenID login page;
* most links to the Login/Register pages will link to the OpenID login
  page instead.

The user will still need to set a password to access the API and RSS
feeds.

24 files changed:
README
actions/all.php
actions/confirmaddress.php
actions/favorited.php
actions/groupsearch.php
actions/invite.php
actions/login.php
actions/noticesearch.php
actions/public.php
actions/publictagcloud.php
actions/register.php
actions/remotesubscribe.php
actions/replies.php
actions/showfavorites.php
actions/showgroup.php
actions/showstream.php
actions/subscribers.php
actions/userauthorization.php
config.php.sample
index.php
lib/action.php
lib/common.php
lib/facebookaction.php
lib/logingroupnav.php

diff --git a/README b/README
index 12c465869c5ab7b8b6fcc24194f7757518a59515..e37934aaabed15fb7d8da41627cc6b6fccb8200d 100644 (file)
--- a/README
+++ b/README
@@ -940,6 +940,8 @@ closed: If set to 'true', will disallow registration on your site.
        the service, *then* set this variable to 'true'.
 inviteonly: If set to 'true', will only allow registration if the user
            was invited by an existing user.
+openidonly: If set to 'true', will only allow registrations and logins
+           through OpenID.
 private: If set to 'true', anonymous users will be redirected to the
          'login' page. Also, API methods that normally require no
          authentication will require it. Note that this does not turn
index f06ead2a8c4776f70bd89b5f8d20a9683ede9450..5db09a0e619a12885c0a074c6d9a38d009b255b6 100644 (file)
@@ -88,7 +88,9 @@ class AllAction extends ProfileAction
             }
         }
         else {
-            $message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to his or her attention.'), $this->user->nickname);
+            $message .= sprintf(_('Why not [register an account](%%%%action.%s%%%%) and then nudge %s or post a notice to his or her attention.'),
+                                (!common_config('site','openidonly')) ? 'register' : 'openidlogin',
+                                $this->user->nickname);
         }
 
         $this->elementStart('div', 'guide');
index 725c1f1e3bb37a3f7da8e03d6f0beef07ba9a295..3c41a5c70d3d89dfbbed7ed8e0d6666d7f647cc0 100644 (file)
@@ -67,7 +67,11 @@ class ConfirmaddressAction extends Action
         parent::handle($args);
         if (!common_logged_in()) {
             common_set_returnto($this->selfUrl());
-            common_redirect(common_local_url('login'));
+            if (!common_config('site', 'openidonly')) {
+                common_redirect(common_local_url('login'));
+            } else {
+                common_redirect(common_local_url('openidlogin'));
+            }
             return;
         }
         $code = $this->trimmed('code');
index 156c7a70094a68513f22ec298d568146a0b0324e..a3d1a5e206ed6ec4abc0ab35db97f772329ff320 100644 (file)
@@ -153,7 +153,8 @@ class FavoritedAction extends Action
             $message .= _('Be the first to add a notice to your favorites by clicking the fave button next to any notice you like.');
         }
         else {
-            $message .= _('Why not [register an account](%%action.register%%) and be the first to add a notice to your favorites!');
+            $message .= sprintf(_('Why not [register an account](%%%%action.%s%%%%) and be the first to add a notice to your favorites!'),
+                                (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
         }
 
         $this->elementStart('div', 'guide');
index c50466ce62a4f65f77ec730b58b2784756f66613..7437166e6ae2a70698dbe015301ea9317ba6f070 100644 (file)
@@ -82,7 +82,8 @@ class GroupsearchAction extends SearchAction
                 $message = _('If you can\'t find the group you\'re looking for, you can [create it](%%action.newgroup%%) yourself.');
             }
             else {
-                $message = _('Why not [register an account](%%action.register%%) and [create the group](%%action.newgroup%%) yourself!');
+                $message = sprintf(_('Why not [register an account](%%%%action.%s%%%%) and [create the group](%%%%action.newgroup%%%%) yourself!'),
+                                   (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
             }
             $this->elementStart('div', 'guide');
             $this->raw(common_markup_to_html($message));
index 26c951ed2233d89da409a5c4e7f90d27ad213614..bdc0d34cb3cf65522ed19f129845cedcde57f2f6 100644 (file)
@@ -235,7 +235,7 @@ class InviteAction extends CurrentUserDesignAction
                         common_root_url(),
                         $personal,
                         common_local_url('showstream', array('nickname' => $user->nickname)),
-                        common_local_url('register', array('code' => $invite->code)));
+                        common_local_url((!common_config('site', 'openidonly')) ? 'register' : 'openidlogin', array('code' => $invite->code)));
 
         mail_send($recipients, $headers, $body);
     }
index 50de83f6fb2574dc2627c2c3b87da9785110ba3a..c20854f15b36f6e719e582fc278f5c934d73f0ce 100644 (file)
@@ -65,6 +65,8 @@ class LoginAction extends Action
      *
      * Switches on request method; either shows the form or handles its input.
      *
+     * Checks if only OpenID is allowed and redirects to openidlogin if so.
+     *
      * @param array $args $_REQUEST data
      *
      * @return void
@@ -73,7 +75,9 @@ class LoginAction extends Action
     function handle($args)
     {
         parent::handle($args);
-        if (common_is_real_login()) {
+        if (common_config('site', 'openidonly')) {
+            common_redirect(common_local_url('openidlogin'));
+        } else if (common_is_real_login()) {
             $this->clientError(_('Already logged in.'));
         } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
             $this->checkLogin();
index 49b473d9e9cd542c03be950ff5fc93a60afb111b..90b3309cf6df4047f6ae07d612551d014a66ddb3 100644 (file)
@@ -121,7 +121,9 @@ class NoticesearchAction extends SearchAction
                 $message = sprintf(_('Be the first to [post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!'), urlencode($q));
             }
             else {
-                $message = sprintf(_('Why not [register an account](%%%%action.register%%%%) and be the first to  [post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!'), urlencode($q));
+                $message = sprintf(_('Why not [register an account](%%%%action.%s%%%%) and be the first to [post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!'),
+                                   (!common_config('site','openidonly')) ? 'register' : 'openidlogin',
+                                   urlencode($q));
             }
 
             $this->elementStart('div', 'guide');
index d0317ac70660c7dcf5a3f1a02fc59c65b2d7fe97..dd128925b5eb2087159ce226970e692402413df3 100644 (file)
@@ -183,7 +183,8 @@ class PublicAction extends Action
         }
         else {
             if (! (common_config('site','closed') || common_config('site','inviteonly'))) {
-                $message .= _('Why not [register an account](%%action.register%%) and be the first to post!');
+                $message .= sprintf(_('Why not [register an account](%%%%action.%s%%%%) and be the first to post!'),
+                                    (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
             }
        }
 
@@ -238,9 +239,11 @@ class PublicAction extends Action
     function showAnonymousMessage()
     {
         if (! (common_config('site','closed') || common_config('site','inviteonly'))) {
-           $m = _('This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
-                  'based on the Free Software [Laconica](http://laconi.ca/) tool. ' .
-                  '[Join now](%%action.register%%) to share notices about yourself with friends, family, and colleagues! ([Read more](%%doc.help%%))');
+            $m = sprintf(_('This is %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
+                           'based on the Free Software [Laconica](http://laconi.ca/) tool. ' .
+                           '[Join now](%%%%action.%s%%%%) to share notices about yourself with friends, family, and colleagues! ' .
+                           '([Read more](%%%%doc.help%%%%))'),
+                         (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
         } else {
             $m = _('This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
                    'based on the Free Software [Laconica](http://laconi.ca/) tool.');
index e9f33d58b6d95df7925a07355e20ec31217f1c38..a2772869d4c1a83ccfaedceb6b320ebd9114cda9 100644 (file)
@@ -72,7 +72,8 @@ class PublictagcloudAction extends Action
             $message .= _('Be the first to post one!');
         }
         else {
-            $message .= _('Why not [register an account](%%action.register%%) and be the first to post one!');
+            $message .= sprintf(_('Why not [register an account](%%%%action.%s%%%%) and be the first to post one!'),
+                                (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
         }
 
         $this->elementStart('div', 'guide');
index dcbbbdb6a6de9afb238715b7ff1cac3d78f40b7d..046a76b80ed0ce989e076b9d4eac1f9b6ed56072 100644 (file)
@@ -116,6 +116,8 @@ class RegisterAction extends Action
      *
      * Checks if registration is closed and shows an error if so.
      *
+     * Checks if only OpenID is allowed and redirects to openidlogin if so.
+     *
      * @param array $args $_REQUEST data
      *
      * @return void
@@ -127,6 +129,8 @@ class RegisterAction extends Action
 
         if (common_config('site', 'closed')) {
             $this->clientError(_('Registration not allowed.'));
+        } else if (common_config('site', 'openidonly')) {
+            common_redirect(common_local_url('openidlogin'));
         } else if (common_logged_in()) {
             $this->clientError(_('Already logged in.'));
         } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
index e658f8d3748ed290159222c5ed13867187e3be3e..7323103fc5c0d5bb289ede1815c5979e1dde8c7f 100644 (file)
@@ -71,11 +71,13 @@ class RemotesubscribeAction extends Action
         if ($this->err) {
             $this->element('div', 'error', $this->err);
         } else {
-            $inst = _('To subscribe, you can [login](%%action.login%%),' .
-                      ' or [register](%%action.register%%) a new ' .
-                      ' account. If you already have an account ' .
-                      ' on a [compatible microblogging site](%%doc.openmublog%%), ' .
-                      ' enter your profile URL below.');
+            $inst = sprintf(_('To subscribe, you can [login](%%%%action.%s%%%%),' .
+                              ' or [register](%%%%action.%s%%%%) a new ' .
+                              ' account. If you already have an account ' .
+                              ' on a [compatible microblogging site](%%doc.openmublog%%), ' .
+                              ' enter your profile URL below.'),
+                            (!common_config('site','openidonly')) ? 'login' : 'openidlogin',
+                            (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
             $output = common_markup_to_html($inst);
             $this->elementStart('div', 'instructions');
             $this->raw($output);
index d7ed440e9237d0a32fd814eb1dd99269ad6393f9..f14383d33b8fed5d5d9e240d4ad4080bbc548113 100644 (file)
@@ -187,7 +187,9 @@ class RepliesAction extends OwnerDesignAction
             }
         }
         else {
-            $message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to his or her attention.'), $this->user->nickname);
+            $message .= sprintf(_('Why not [register an account](%%%%action.%s%%%%) and then nudge %s or post a notice to his or her attention.'),
+                                (!common_config('site','openidonly')) ? 'register' : 'openidlogin',
+                                $this->user->nickname);
         }
 
         $this->elementStart('div', 'guide');
index 8b4926f012fb9ecfeb7626dda7dd8e13562c9baf..9f549baf246f6c64672e9356d32f2443521e6983 100644 (file)
@@ -173,7 +173,9 @@ class ShowfavoritesAction extends OwnerDesignAction
             }
         }
         else {
-            $message = sprintf(_('%s hasn\'t added any notices to his favorites yet. Why not [register an account](%%%%action.register%%%%) and then post something interesting they would add to their favorites :)'), $this->user->nickname);
+            $message = sprintf(_('%s hasn\'t added any notices to his favorites yet. Why not [register an account](%%%%action.%s%%%%) and then post something interesting they would add to their favorites :)'),
+                               $this->user->nickname,
+                               (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
         }
 
         $this->elementStart('div', 'guide');
index 32ec674a9b7f258614896da713dfc2af6f662e24..4d8ba5fa8da498497710fa1fc0866b573b62d1ed 100644 (file)
@@ -440,8 +440,9 @@ class ShowgroupAction extends GroupDesignAction
             $m = sprintf(_('**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
                 'based on the Free Software [Laconica](http://laconi.ca/) tool. Its members share ' .
                 'short messages about their life and interests. '.
-                '[Join now](%%%%action.register%%%%) to become part of this group and many more! ([Read more](%%%%doc.help%%%%))'),
-                     $this->group->nickname);
+                '[Join now](%%%%action.%s%%%%) to become part of this group and many more! ([Read more](%%%%doc.help%%%%))'),
+                     $this->group->nickname,
+                     (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
         } else {
             $m = sprintf(_('**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
                 'based on the Free Software [Laconica](http://laconi.ca/) tool. Its members share ' .
index cd5d4bb7013bfb84f87d8eca580ddc0ba8c74bb6..3f603d64f677ef0f95b56c92c124413274101a32 100644 (file)
@@ -358,7 +358,9 @@ class ShowstreamAction extends ProfileAction
             }
         }
         else {
-            $message .= sprintf(_('Why not [register an account](%%%%action.register%%%%) and then nudge %s or post a notice to his or her attention.'), $this->user->nickname);
+            $message .= sprintf(_('Why not [register an account](%%%%action.%s%%%%) and then nudge %s or post a notice to his or her attention.'),
+                                (!common_config('site','openidonly')) ? 'register' : 'openidlogin',
+                                $this->user->nickname);
         }
 
         $this->elementStart('div', 'guide');
@@ -387,8 +389,10 @@ class ShowstreamAction extends ProfileAction
         if (!(common_config('site','closed') || common_config('site','inviteonly'))) {
             $m = sprintf(_('**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
                  'based on the Free Software [Laconica](http://laconi.ca/) tool. ' .
-                 '[Join now](%%%%action.register%%%%) to follow **%s**\'s notices and many more! ([Read more](%%%%doc.help%%%%))'),
-                 $this->user->nickname, $this->user->nickname);
+                 '[Join now](%%%%action.%s%%%%) to follow **%s**\'s notices and many more! ([Read more](%%%%doc.help%%%%))'),
+                 $this->user->nickname,
+                 (!common_config('site','openidonly')) ? 'register' : 'openidlogin',
+                 $this->user->nickname);
         } else {
             $m = sprintf(_('**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-blogging) service ' .
                  'based on the Free Software [Laconica](http://laconi.ca/) tool. '),
index 66ac00fb19aa26d64da5441d07fafec8bc08f36a..40473801240a93bf13d6a627e316f507e5fe6447 100644 (file)
@@ -111,7 +111,9 @@ class SubscribersAction extends GalleryAction
             }
         }
         else {
-            $message = sprintf(_('%s has no subscribers. Why not [register an account](%%%%action.register%%%%) and be the first?'), $this->user->nickname);
+            $message = sprintf(_('%s has no subscribers. Why not [register an account](%%%%action.%s%%%%) and be the first?'),
+                               $this->user->nickname,
+                               (!common_config('site','openidonly')) ? 'register' : 'openidlogin');
         }
 
         $this->elementStart('div', 'guide');
index 00903ae01a07bce0363fd125d02d7eda753e33a4..7e397e8888b216ed5512cb8f57b0dcb050e2bcf4 100644 (file)
@@ -47,7 +47,11 @@ class UserauthorizationAction extends Action
                 # Go log in, and then come back
                 common_set_returnto($_SERVER['REQUEST_URI']);
 
-                common_redirect(common_local_url('login'));
+                if (!common_config('site', 'openidonly')) {
+                    common_redirect(common_local_url('login'));
+                } else {
+                    common_redirect(common_local_url('openidlogin'));
+                }
                 return;
             }
 
index 21b6865e150e503444183bccbde45c621b37d1c6..42d42cf86fd222bac72e39d56310d6891d08372e 100644 (file)
@@ -38,6 +38,8 @@ $config['site']['path'] = 'laconica';
 // $config['site']['closed'] = true;
 // Only allow registration for people invited by another user
 // $config['site']['inviteonly'] = true;
+// Only allow registrations and logins through OpenID
+// $config['site']['openidonly'] = true;
 // Make the site invisible to  non-logged-in users
 // $config['site']['private'] = true;
 
index 2e74d38fb0ac29d46e01ab115727e93100680f0e..980b9881b0d79674651d0b570c2a94f9ce7a2b41 100644 (file)
--- a/index.php
+++ b/index.php
@@ -182,12 +182,20 @@ function main()
     // If the site is private, and they're not on one of the "public"
     // parts of the site, redirect to login
 
-    if (!$user && common_config('site', 'private') &&
-        !in_array($action, array('login', 'openidlogin', 'finishopenidlogin',
-                                 'recoverpassword', 'api', 'doc', 'register')) &&
-        !preg_match('/rss$/', $action)) {
-        common_redirect(common_local_url('login'));
-        return;
+    if (!$user && common_config('site', 'private')) {
+        $public_actions = array('openidlogin', 'finishopenidlogin',
+                                'recoverpassword', 'api', 'doc');
+        $login_action = 'openidlogin';
+        if (!common_config('site', 'openidonly')) {
+            $public_actions[] = 'login';
+            $public_actions[] = 'register';
+            $login_action = 'login';
+        }
+        if (!in_array($action, $public_actions) &&
+            !preg_match('/rss$/', $action)) {
+            common_redirect(common_local_url($login_action));
+            return;
+        }
     }
 
     $action_class = ucfirst($action).'Action';
index 326edf3a00122a8fa7cad6bb3b3f49e8b4217775..6da9adab572df2c1c9d18bdbfad6c49eb641d3ca 100644 (file)
@@ -436,12 +436,17 @@ class Action extends HTMLOutputter // lawsuit
                                 _('Logout'), _('Logout from the site'), false, 'nav_logout');
             }
             else {
-                if (!common_config('site', 'closed')) {
-                    $this->menuItem(common_local_url('register'),
-                                    _('Register'), _('Create an account'), false, 'nav_register');
+                if (!common_config('site', 'openidonly')) {
+                    if (!common_config('site', 'closed')) {
+                        $this->menuItem(common_local_url('register'),
+                                        _('Register'), _('Create an account'), false, 'nav_register');
+                    }
+                    $this->menuItem(common_local_url('login'),
+                                    _('Login'), _('Login to the site'), false, 'nav_login');
+                } else {
+                    $this->menuItem(common_local_url('openidlogin'),
+                                    _('OpenID'), _('Login with OpenID'), false, 'nav_openid');
                 }
-                $this->menuItem(common_local_url('login'),
-                                _('Login'), _('Login to the site'), false, 'nav_login');
             }
             $this->menuItem(common_local_url('doc', array('title' => 'help')),
                             _('Help'), _('Help me!'), false, 'nav_help');
index be30519f47409bb7e7eefa6ae92e60379e9b7910..bf078378d33c0af1cef61667882ea3d81844f0ac 100644 (file)
@@ -109,6 +109,7 @@ $config =
               'broughtbyurl' => null,
               'closed' => false,
               'inviteonly' => false,
+              'openidonly' => false,
               'private' => false,
               'ssl' => 'never',
               'sslserver' => null,
index ab11b613ed781709b3ef249696ee81b1a41beb0e..289e702c6958d332fd6cd7b10900e692a9e543be 100644 (file)
@@ -256,8 +256,13 @@ class FacebookAction extends Action
         $this->elementStart('dd');
         $this->elementStart('p');
         $this->text(sprintf($loginmsg_part1, common_config('site', 'name')));
-        $this->element('a',
-            array('href' => common_local_url('register')), _('Register'));
+        if (!common_config('site', 'openidonly')) {
+            $this->element('a',
+                array('href' => common_local_url('register')), _('Register'));
+        } else {
+            $this->element('a',
+                array('href' => common_local_url('openidlogin')), _('Register'));
+        }
         $this->text($loginmsg_part2);
     $this->elementEnd('p');
         $this->elementEnd('dd');
index f23985f3ab3a1293bcb02a8ab98364b355628a81..919fd3db9c002e339b34582fb20b5b14d34f1801 100644 (file)
@@ -72,11 +72,13 @@ class LoginGroupNav extends Widget
         // action => array('prompt', 'title')
         $menu = array();
 
-        $menu['login'] = array(_('Login'),
-                         _('Login with a username and password'));
-        if (!(common_config('site','closed') || common_config('site','inviteonly'))) {
-            $menu['register'] = array(_('Register'),
-                                _('Sign up for a new account'));
+        if (!common_config('site','openidonly')) {
+            $menu['login'] = array(_('Login'),
+                             _('Login with a username and password'));
+            if (!(common_config('site','closed') || common_config('site','inviteonly'))) {
+                $menu['register'] = array(_('Register'),
+                                    _('Sign up for a new account'));
+            }
         }
         $menu['openidlogin'] = array(_('OpenID'),
                                _('Login or register with OpenID'));