]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OpenID/finishopenidlogin.php
Update openid docs
[quix0rs-gnu-social.git] / plugins / OpenID / finishopenidlogin.php
index 415fd8e66568ba698ff6379dd8db0152005c58cb..0d3f0fcb765ab2efc5581bc9690a7d1ced6b2a45 100644 (file)
@@ -17,7 +17,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+if (!defined('STATUSNET')) {
+    exit(1);
+}
 
 require_once INSTALLDIR.'/plugins/OpenID/openid.php';
 
@@ -31,16 +33,19 @@ class FinishopenidloginAction extends Action
     {
         parent::handle($args);
         if (common_is_real_login()) {
+            // TRANS: Client error message trying to log on with OpenID while already logged on.
             $this->clientError(_m('Already logged in.'));
         } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
             $token = $this->trimmed('token');
             if (!$token || $token != common_session_token()) {
+                // TRANS: Message given when there is a problem with the user's session token.
                 $this->showForm(_m('There was a problem with your session token. Try again, please.'));
                 return;
             }
             if ($this->arg('create')) {
                 if (!$this->boolean('license')) {
-                    $this->showForm(_m('You can\'t register if you don\'t agree to the license.'),
+                    // TRANS: Message given if user does not agree with the site's license.
+                    $this->showForm(_m('You cannot register if you do not agree to the license.'),
                                     $this->trimmed('newname'));
                     return;
                 }
@@ -48,7 +53,8 @@ class FinishopenidloginAction extends Action
             } else if ($this->arg('connect')) {
                 $this->connectUser();
             } else {
-                $this->showForm(_m('Something weird happened.'),
+                // TRANS: Messag given on an unknown error.
+                $this->showForm(_m('An unknown error has occured.'),
                                 $this->trimmed('newname'));
             }
         } else {
@@ -62,13 +68,16 @@ class FinishopenidloginAction extends Action
             $this->element('div', array('class' => 'error'), $this->error);
         } else {
             $this->element('div', 'instructions',
-                           sprintf(_m('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
+                           // TRANS: Instructions given after a first successful logon using OpenID.
+                           // TRANS: %s is the site name.
+                           sprintf(_m('This is the first time you have logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
         }
     }
 
     function title()
     {
-        return _m('OpenID Account Setup');
+        // TRANS: Title
+        return _m('TITLE','OpenID Account Setup');
     }
 
     function showForm($error=null, $username=null)
@@ -91,22 +100,48 @@ class FinishopenidloginAction extends Action
             return;
         }
 
+        // We don't recognize this OpenID, so we're going to give the user
+        // two options, each in its own mini-form.
+        //
+        // First, they can create a new account using their OpenID auth
+        // info. The profile will be pre-populated with whatever name,
+        // email, and location we can get from the OpenID provider, so
+        // all we ask for is the license confirmation.
         $this->elementStart('form', array('method' => 'post',
-                                          'id' => 'account_connect',
+                                          'id' => 'account_create',
                                           'class' => 'form_settings',
                                           'action' => common_local_url('finishopenidlogin')));
         $this->hidden('token', common_session_token());
         $this->elementStart('fieldset', array('id' => 'form_openid_createaccount'));
         $this->element('legend', null,
+                       // TRANS: Fieldset legend.
                        _m('Create new account'));
         $this->element('p', null,
+                       // TRANS: Form guide.
                        _m('Create a new user with this nickname.'));
         $this->elementStart('ul', 'form_data');
+
+        // Hook point for captcha etc
+        Event::handle('StartRegistrationFormData', array($this));
+
         $this->elementStart('li');
+        // TRANS: Field label.
         $this->input('newname', _m('New nickname'),
                      ($this->username) ? $this->username : '',
-                     _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
+                     // TRANS: Field title.
+                     _m('1-64 lowercase letters or numbers, no punctuation or spaces.'));
         $this->elementEnd('li');
+        $this->elementStart('li');
+        // TRANS: Field label.
+        $this->input('email', _m('Email'), $this->getEmail(),
+                     // TRANS: Field title.
+                     _m('Used only for updates, announcements, '.
+                       'and password recovery.'));
+        $this->elementEnd('li');
+
+        // Hook point for captcha etc
+        Event::handle('EndRegistrationFormData', array($this));
+
         $this->elementStart('li');
         $this->element('input', array('type' => 'checkbox',
                                       'id' => 'license',
@@ -115,7 +150,9 @@ class FinishopenidloginAction extends Action
                                       'value' => 'true'));
         $this->elementStart('label', array('for' => 'license',
                                           'class' => 'checkbox'));
-        $message = _('My text and files are available under %s ' .
+        // TRANS: OpenID plugin link text.
+        // TRANS: %s is a link to a license with the license name as link text.
+        $message = _m('My text and files are available under %s ' .
                      'except this private data: password, ' .
                      'email address, IM address, and phone number.');
         $link = '<a href="' .
@@ -127,27 +164,74 @@ class FinishopenidloginAction extends Action
         $this->elementEnd('label');
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('create', _m('Create'));
+        // TRANS: Button label in form in which to create a new user on the site for an OpenID.
+        $this->submit('create', _m('BUTTON', 'Create'));
         $this->elementEnd('fieldset');
+        $this->elementEnd('form');
 
+        // The second option is to attach this OpenID to an existing account
+        // on the local system, which they need to provide a password for.
+        $this->elementStart('form', array('method' => 'post',
+                                          'id' => 'account_connect',
+                                          'class' => 'form_settings',
+                                          'action' => common_local_url('finishopenidlogin')));
+        $this->hidden('token', common_session_token());
         $this->elementStart('fieldset', array('id' => 'form_openid_createaccount'));
         $this->element('legend', null,
+                       // TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
                        _m('Connect existing account'));
         $this->element('p', null,
+                       // TRANS: User instructions for form in which to connect an OpenID to an existing user on the site.
                        _m('If you already have an account, login with your username and password to connect it to your OpenID.'));
         $this->elementStart('ul', 'form_data');
         $this->elementStart('li');
+        // TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
         $this->input('nickname', _m('Existing nickname'));
         $this->elementEnd('li');
         $this->elementStart('li');
+        // TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
         $this->password('password', _m('Password'));
         $this->elementEnd('li');
         $this->elementEnd('ul');
-        $this->submit('connect', _m('Connect'));
+        // TRANS: Button text in form in which to connect an OpenID to an existing user on the site.
+        $this->submit('connect', _m('BUTTON', 'Connect'));
         $this->elementEnd('fieldset');
         $this->elementEnd('form');
     }
 
+    /**
+     * Get specified e-mail from the form, or the OpenID sreg info, or the
+     * invite code.
+     *
+     * @return string
+     */
+    function getEmail()
+    {
+        $email = $this->trimmed('email');
+        if (!empty($email)) {
+            return $email;
+        }
+
+        // Pull from openid thingy
+        list($display, $canonical, $sreg) = $this->getSavedValues();
+        if (!empty($sreg['email'])) {
+            return $sreg['email'];
+        }
+
+        // Terrible hack for invites...
+        if (common_config('site', 'inviteonly')) {
+            $code = $_SESSION['invitecode'];
+            if ($code) {
+                $invite = Invitation::staticGet($code);
+
+                if ($invite && $invite->address_type == 'email') {
+                    return $invite->address;
+                }
+            }
+        }
+        return '';
+    }
+
     function tryLogin()
     {
         $consumer = oid_consumer();
@@ -155,11 +239,12 @@ class FinishopenidloginAction extends Action
         $response = $consumer->complete(common_local_url('finishopenidlogin'));
 
         if ($response->status == Auth_OpenID_CANCEL) {
+            // TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
             $this->message(_m('OpenID authentication cancelled.'));
             return;
         } else if ($response->status == Auth_OpenID_FAILURE) {
-            // Authentication failed; display the error message.
-            $this->message(sprintf(_m('OpenID authentication failed: %s'), $response->message));
+            // TRANS: OpenID authentication failed; display the error message. %s is the error message.
+            $this->message(sprintf(_m('OpenID authentication failed: %s.'), $response->message));
         } else if ($response->status == Auth_OpenID_SUCCESS) {
             // This means the authentication succeeded; extract the
             // identity URL and Simple Registration data (if it was
@@ -179,7 +264,8 @@ class FinishopenidloginAction extends Action
 
             // Launchpad teams extension
             if (!oid_check_teams($response)) {
-                $this->message(_m('OpenID authentication aborted: you are not allowed to login to this site.'));
+                // TRANS: Message displayed when OpenID authentication is aborted.
+                $this->message(_m('OpenID authentication aborted: You are not allowed to login to this site.'));
                 return;
             }
 
@@ -187,9 +273,9 @@ class FinishopenidloginAction extends Action
 
             if ($user) {
                 oid_set_last($display);
-                # XXX: commented out at @edd's request until better
-                # control over how data flows from OpenID provider.
-                # oid_update_user($user, $sreg);
+                // XXX: commented out at @edd's request until better
+                // control over how data flows from OpenID provider.
+                // oid_update_user($user, $sreg);
                 common_set_user($user);
                 common_real_login(true);
                 if (isset($_SESSION['openid_rememberme']) && $_SESSION['openid_rememberme']) {
@@ -227,9 +313,14 @@ class FinishopenidloginAction extends Action
 
     function createNewUser()
     {
-        # FIXME: save invite code before redirect, and check here
+        // FIXME: save invite code before redirect, and check here
+
+        if (!Event::handle('StartRegistrationTry', array($this))) {
+            return;
+        }
 
         if (common_config('site', 'closed')) {
+            // TRANS: OpenID plugin message. No new user registration is allowed on the site.
             $this->clientError(_m('Registration not allowed.'));
             return;
         }
@@ -239,6 +330,7 @@ class FinishopenidloginAction extends Action
         if (common_config('site', 'inviteonly')) {
             $code = $_SESSION['invitecode'];
             if (empty($code)) {
+                // TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
                 $this->clientError(_m('Registration not allowed.'));
                 return;
             }
@@ -246,26 +338,27 @@ class FinishopenidloginAction extends Action
             $invite = Invitation::staticGet($code);
 
             if (empty($invite)) {
+                // TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and the one provided was not valid.
                 $this->clientError(_m('Not a valid invitation code.'));
                 return;
             }
         }
 
-        $nickname = $this->trimmed('newname');
-
-        if (!Validate::string($nickname, array('min_length' => 1,
-                                               'max_length' => 64,
-                                               'format' => NICKNAME_FMT))) {
-            $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
+        try {
+            $nickname = Nickname::normalize($this->trimmed('newname'));
+        } catch (NicknameException $e) {
+            $this->showForm($e->getMessage());
             return;
         }
 
         if (!User::allowed_nickname($nickname)) {
+            // TRANS: OpenID plugin message. The entered new user name is blacklisted.
             $this->showForm(_m('Nickname not allowed.'));
             return;
         }
 
         if (User::staticGet('nickname', $nickname)) {
+            // TRANS: OpenID plugin message. The entered new user name is already used.
             $this->showForm(_m('Nickname already in use. Try another one.'));
             return;
         }
@@ -273,15 +366,17 @@ class FinishopenidloginAction extends Action
         list($display, $canonical, $sreg) = $this->getSavedValues();
 
         if (!$display || !$canonical) {
+            // TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
             $this->serverError(_m('Stored OpenID not found.'));
             return;
         }
 
-        # Possible race condition... let's be paranoid
+        // Possible race condition... let's be paranoid
 
         $other = oid_get_user($canonical);
 
         if ($other) {
+            // TRANS: OpenID plugin server error.
             $this->serverError(_m('Creating new account for OpenID that already has a user.'));
             return;
         }
@@ -291,8 +386,8 @@ class FinishopenidloginAction extends Action
         $location = '';
         if (!empty($sreg['country'])) {
             if ($sreg['postcode']) {
-                # XXX: use postcode to get city and region
-                # XXX: also, store postcode somewhere -- it's valuable!
+                // XXX: use postcode to get city and region
+                // XXX: also, store postcode somewhere -- it's valuable!
                 $location = $sreg['postcode'] . ', ' . $sreg['country'];
             } else {
                 $location = $sreg['country'];
@@ -305,14 +400,10 @@ class FinishopenidloginAction extends Action
             $fullname = '';
         }
 
-        if (!empty($sreg['email']) && Validate::email($sreg['email'], common_config('email', 'check_domain'))) {
-            $email = $sreg['email'];
-        } else {
-            $email = '';
-        }
+        $email = $this->getEmail();
 
-        # XXX: add language
-        # XXX: add timezone
+        // XXX: add language
+        // XXX: add timezone
 
         $args = array('nickname' => $nickname,
                       'email' => $email,
@@ -336,6 +427,9 @@ class FinishopenidloginAction extends Action
             common_rememberme($user);
         }
         unset($_SESSION['openid_rememberme']);
+
+        Event::handle('EndRegistrationTry', array($this));
+
         common_redirect(common_local_url('showstream', array('nickname' => $user->nickname)),
                         303);
     }
@@ -346,17 +440,19 @@ class FinishopenidloginAction extends Action
         $password = $this->trimmed('password');
 
         if (!common_check_user($nickname, $password)) {
+            // TRANS: OpenID plugin message.
             $this->showForm(_m('Invalid username or password.'));
             return;
         }
 
-        # They're legit!
+        // They're legit!
 
         $user = User::staticGet('nickname', $nickname);
 
         list($display, $canonical, $sreg) = $this->getSavedValues();
 
         if (!$display || !$canonical) {
+            // TRANS: OpenID plugin server error. A stored OpenID cannot be found.
             $this->serverError(_m('Stored OpenID not found.'));
             return;
         }
@@ -364,6 +460,7 @@ class FinishopenidloginAction extends Action
         $result = oid_link_user($user->id, $canonical, $display);
 
         if (!$result) {
+            // TRANS: OpenID plugin server error. The user or user profile could not be saved.
             $this->serverError(_m('Error connecting user to OpenID.'));
             return;
         }
@@ -387,7 +484,7 @@ class FinishopenidloginAction extends Action
     {
         $url = common_get_returnto();
         if ($url) {
-            # We don't have to return to it again
+            // We don't have to return to it again
             common_set_returnto(null);
            $url = common_inject_session($url);
         } else {
@@ -400,8 +497,7 @@ class FinishopenidloginAction extends Action
 
     function bestNewNickname($display, $sreg)
     {
-
-        # Try the passed-in nickname
+        // Try the passed-in nickname
 
         if (!empty($sreg['nickname'])) {
             $nickname = $this->nicknamize($sreg['nickname']);
@@ -410,7 +506,7 @@ class FinishopenidloginAction extends Action
             }
         }
 
-        # Try the full name
+        // Try the full name
 
         if (!empty($sreg['fullname'])) {
             $fullname = $this->nicknamize($sreg['fullname']);
@@ -419,7 +515,7 @@ class FinishopenidloginAction extends Action
             }
         }
 
-        # Try the URL
+        // Try the URL
 
         $from_url = $this->openidToNickname($display);
 
@@ -427,16 +523,14 @@ class FinishopenidloginAction extends Action
             return $from_url;
         }
 
-        # XXX: others?
+        // XXX: others?
 
         return null;
     }
 
     function isNewNickname($str)
     {
-        if (!Validate::string($str, array('min_length' => 1,
-                                          'max_length' => 64,
-                                          'format' => NICKNAME_FMT))) {
+        if (!Nickname::isValid($str)) {
             return false;
         }
         if (!User::allowed_nickname($str)) {
@@ -457,11 +551,10 @@ class FinishopenidloginAction extends Action
         }
     }
 
-    # We try to use an OpenID URL as a legal StatusNet user name in this order
-    # 1. Plain hostname, like http://evanp.myopenid.com/
-    # 2. One element in path, like http://profile.typekey.com/EvanProdromou/
-    #    or http://getopenid.com/evanprodromou
-
+    // We try to use an OpenID URL as a legal StatusNet user name in this order
+    // 1. Plain hostname, like http://evanp.myopenid.com/
+    // 2. One element in path, like http://profile.typekey.com/EvanProdromou/
+    //    or http://getopenid.com/evanprodromou
     function urlToNickname($openid)
     {
         return common_url_to_nickname($openid);
@@ -474,8 +567,8 @@ class FinishopenidloginAction extends Action
         if (!$base) {
             return null;
         } else {
-            # =evan.prodromou
-            # or @gratis*evan.prodromou
+            // =evan.prodromou
+            // or @gratis*evan.prodromou
             $parts = explode('*', substr($base, 1));
             return $this->nicknamize(array_pop($parts));
         }
@@ -490,8 +583,7 @@ class FinishopenidloginAction extends Action
         }
     }
 
-    # Given a string, try to make it work as a nickname
-
+    // Given a string, try to make it work as a nickname
     function nicknamize($str)
     {
         return common_nicknamize($str);