3 * StatusNet - the distributed open-source microblogging tool
4 * Copyright (C) 2008, 2009, StatusNet, Inc.
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
16 * You should have received a copy of the GNU Affero General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
22 require_once INSTALLDIR.'/plugins/OpenID/openid.php';
24 class OpenidloginAction extends Action
26 function handle($args)
28 parent::handle($args);
29 if (common_is_real_login()) {
30 $this->clientError(_m('Already logged in.'));
31 } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
32 $openid_url = $this->trimmed('openid_url');
35 $token = $this->trimmed('token');
36 if (!$token || $token != common_session_token()) {
37 $this->showForm(_m('There was a problem with your session token. Try again, please.'), $openid_url);
41 $rememberme = $this->boolean('rememberme');
43 common_ensure_session();
45 $_SESSION['openid_rememberme'] = $rememberme;
47 $result = oid_authenticate($openid_url,
50 if (is_string($result)) { # error message
51 unset($_SESSION['openid_rememberme']);
52 $this->showForm($result, $openid_url);
55 $openid_url = oid_get_last();
56 $this->showForm(null, $openid_url);
60 function getInstructions()
62 if (common_logged_in() && !common_is_real_login() &&
63 common_get_returnto()) {
64 // rememberme logins have to reauthenticate before
65 // changing any profile settings (cookie-stealing protection)
66 return _m('For security reasons, please re-login with your ' .
67 '[OpenID](%%doc.openid%%) ' .
68 'before changing your settings.');
70 return _m('Login with an [OpenID](%%doc.openid%%) account.');
74 function showPageNotice()
77 $this->element('div', array('class' => 'error'), $this->error);
79 $instr = $this->getInstructions();
80 $output = common_markup_to_html($instr);
81 $this->elementStart('div', 'instructions');
83 $this->elementEnd('div');
87 function showScripts()
89 parent::showScripts();
90 $this->autofocus('openid_url');
95 return _m('OpenID Login');
98 function showForm($error=null, $openid_url)
100 $this->error = $error;
101 $this->openid_url = $openid_url;
105 function showContent() {
106 $formaction = common_local_url('openidlogin');
107 $this->elementStart('form', array('method' => 'post',
108 'id' => 'form_openid_login',
109 'class' => 'form_settings',
110 'action' => $formaction));
111 $this->elementStart('fieldset');
112 $this->element('legend', null, _m('OpenID login'));
113 $this->hidden('token', common_session_token());
115 $this->elementStart('ul', 'form_data');
116 $this->elementStart('li');
117 $this->input('openid_url', _m('OpenID URL'),
119 _m('Your OpenID URL'));
120 $this->elementEnd('li');
121 $this->elementStart('li', array('id' => 'settings_rememberme'));
122 $this->checkbox('rememberme', _m('Remember me'), false,
123 _m('Automatically login in the future; ' .
124 'not for shared computers!'));
125 $this->elementEnd('li');
126 $this->elementEnd('ul');
127 $this->submit('submit', _m('Login'));
128 $this->elementEnd('fieldset');
129 $this->elementEnd('form');
132 function showLocalNav()
134 $nav = new LoginGroupNav($this);