* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-require_once(INSTALLDIR.'/plugins/OpenID/User_openid.php');
+if (!defined('STATUSNET')) {
+ exit(1);
+}
require_once('Auth/OpenID.php');
require_once('Auth/OpenID/Consumer.php');
require_once('Auth/OpenID/SReg.php');
require_once('Auth/OpenID/MySQLStore.php');
-# About one year cookie expiry
+// About one year cookie expiry
define('OPENID_COOKIE_EXPIRY', round(365.25 * 24 * 60 * 60));
define('OPENID_COOKIE_KEY', 'lastusedopenid');
{
static $store = null;
if (!$store) {
- # Can't be called statically
+ // Can't be called statically
$user = new User();
$conn = $user->getDatabaseConnection();
$store = new Auth_OpenID_MySQLStore($conn);
function oid_link_user($id, $canonical, $display)
{
+ global $_PEAR;
$oid = new User_openid();
$oid->user_id = $id;
$oid->canonical = $canonical;
$oid->display = $display;
- $oid->created = DB_DataObject_Cast::dateTime();
+ $oid->created = common_sql_now();
if (!$oid->insert()) {
- $err = PEAR::getStaticProperty('DB_DataObject','lastError');
+ $err = &$_PEAR->getStaticProperty('DB_DataObject','lastError');
return false;
}
function oid_get_user($openid_url)
{
$user = null;
- $oid = User_openid::staticGet('canonical', $openid_url);
+ $oid = User_openid::getKV('canonical', $openid_url);
if ($oid) {
- $user = User::staticGet('id', $oid->user_id);
+ $user = User::getKV('id', $oid->user_id);
}
return $user;
}
function oid_authenticate($openid_url, $returnto, $immediate=false)
{
+ $openid_url = Auth_OpenID::normalizeUrl($openid_url);
+ if (!common_valid_http_url($openid_url)) {
+ throw new ClientException(_m('No valid URL provided for OpenID.'));
+ }
$consumer = oid_consumer();
if (!$consumer) {
- common_server_error(_m('Cannot instantiate OpenID consumer object.'));
- return false;
+ // TRANS: OpenID plugin server error.
+ throw new ServerException(_m('Cannot instantiate OpenID consumer object.'));
}
common_ensure_session();
// Handle failure status return values.
if (!$auth_request) {
- return _m('Not a valid OpenID.');
+ common_log(LOG_ERR, __METHOD__ . ": mystery fail contacting $openid_url");
+ // TRANS: OpenID plugin message. Given when an OpenID is not valid.
+ throw new ServerException(_m('Not a valid OpenID.'));
} else if (Auth_OpenID::isFailure($auth_request)) {
- return sprintf(_m('OpenID failure: %s'), $auth_request->message);
+ common_log(LOG_ERR, __METHOD__ . ": OpenID fail to $openid_url: $auth_request->message");
+ // TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
+ // TRANS: %s is the failure message.
+ throw new ServerException(sprintf(_m('OpenID failure: %s.'), $auth_request->message));
}
$sreg_request = Auth_OpenID_SRegRequest::build(// Required
$trust_root = common_root_url(true);
$process_url = common_local_url($returnto);
- if ($auth_request->shouldSendRedirect()) {
+ // Net::OpenID::Server as used on LiveJournal appears to incorrectly
+ // reject POST requests for data submissions that OpenID 1.1 specs
+ // as GET, although 2.0 allows them:
+ // https://rt.cpan.org/Public/Bug/Display.html?id=42202
+ //
+ // Our OpenID libraries would have switched in the redirect automatically
+ // if it were detecting 1.1 compatibility mode, however the server is
+ // advertising itself as 2.0-compatible, so we got switched to the POST.
+ //
+ // Since the GET should always work anyway, we'll just take out the
+ // autosubmitter for now.
+ //
+ //if ($auth_request->shouldSendRedirect()) {
$redirect_url = $auth_request->redirectURL($trust_root,
$process_url,
$immediate);
- if (!$redirect_url) {
- } else if (Auth_OpenID::isFailure($redirect_url)) {
- return sprintf(_m('Could not redirect to server: %s'), $redirect_url->message);
- } else {
- common_redirect($redirect_url, 303);
+ if (Auth_OpenID::isFailure($redirect_url)) {
+ // TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
+ // TRANS: %s is the failure message.
+ throw new ServerException(sprintf(_m('Could not redirect to server: %s.'), $redirect_url->message));
}
+ common_redirect($redirect_url, 303);
+ /*
} else {
// Generate form markup and render it.
$form_id = 'openid_message';
$form_html = $auth_request->formMarkup($trust_root, $process_url,
$immediate, array('id' => $form_id));
- # XXX: This is cheap, but things choke if we don't escape ampersands
- # in the HTML attributes
+ // XXX: This is cheap, but things choke if we don't escape ampersands
+ // in the HTML attributes
$form_html = preg_replace('/&/', '&', $form_html);
// Display an error if the form markup couldn't be generated;
// otherwise, render the HTML.
if (Auth_OpenID::isFailure($form_html)) {
+ // TRANS: OpenID plugin server error if the form markup could not be generated.
+ // TRANS: %s is the failure message.
common_server_error(sprintf(_m('Could not create OpenID form: %s'), $form_html->message));
} else {
$action = new AutosubmitAction(); // see below
$action->handle(array('action' => 'autosubmit'));
}
}
+ */
}
-# Half-assed attempt at a module-private function
+// Half-assed attempt at a module-private function
function _oid_print_instructions()
{
common_element('div', 'instructions',
+ // TRANS: OpenID plugin user instructions.
_m('This form should automatically submit itself. '.
'If not, click the submit button to go to your '.
'OpenID provider.'));
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!
$profile->location = $sreg['postcode'] . ', ' . $sreg['country'];
} else {
$profile->location = $sreg['country'];
}
}
- # XXX save language if it's passed
- # XXX save timezone if it's passed
+ // XXX save language if it's passed
+ // XXX save timezone if it's passed
if (!$profile->update($orig_profile)) {
+ // TRANS: OpenID plugin server error.
common_server_error(_m('Error saving the profile.'));
return false;
}
}
if (!$user->update($orig_user)) {
+ // TRANS: OpenID plugin server error.
common_server_error(_m('Error saving the user.'));
return false;
}
return;
}
}
- throw new ClientException(_m("Unauthorized URL used for OpenID login."), 403);
+ // TRANS: OpenID plugin client exception (403).
+ throw new ClientException(_m('Unauthorized URL used for OpenID login.'), 403);
}
}
var $form_html = null;
var $form_id = null;
- function handle($args)
+ function handle()
{
- parent::handle($args);
+ parent::handle();
$this->showPage();
}
function title()
{
+ // TRANS: Title
return _m('OpenID Login Submission');
}
function showContent()
{
$this->raw('<p style="margin: 20px 80px">');
- // @fixme this would be better using standard CSS class, but the present theme's a bit scary.
+ // @todo FIXME: This would be better using standard CSS class, but the present theme's a bit scary.
$this->element('img', array('src' => Theme::path('images/icons/icon_processing.gif', 'base'),
// for some reason the base CSS sets <img>s as block display?!
'style' => 'display: inline'));
+ // TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
$this->text(_m('Requesting authorization from your login provider...'));
$this->raw('</p>');
$this->raw('<p style="margin-top: 60px; font-style: italic">');
+ // TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
$this->text(_m('If you are not redirected to your login provider in a few seconds, try pushing the button below.'));
$this->raw('</p>');
$this->raw($this->form_html);