Merge branch 'redironlogin' of http://git.gitorious.org/~evan/statusnet/evans-mainline into redironlogin

This commit is contained in:
root 2010-01-10 00:24:20 +00:00
commit 4ffc28e1a5
2 changed files with 49 additions and 6 deletions

View File

@ -259,6 +259,16 @@ class RegisterAction extends Action
// Re-init language env in case it changed (not yet, but soon)
common_init_language();
if (common_config('ssl', 'sometimes') && // mixed environment
common_config('site', 'server') != common_config('site', 'sslserver')) {
$url = common_local_url('all',
array('nickname' =>
$user->nickname));
$this->redirectFromSSL($user, $url, $this->boolean('rememberme'));
return;
}
$this->showSuccess();
} else {
$this->showForm(_('Invalid username or password.'));
@ -578,5 +588,32 @@ class RegisterAction extends Action
$nav = new LoginGroupNav($this);
$nav->show();
}
function redirectFromSSL($user, $returnto, $rememberme)
{
try {
$login_token = Login_token::makeNew($user);
} catch (Exception $e) {
$this->serverError($e->getMessage());
return;
}
$params = array();
if (!empty($returnto)) {
$params['returnto'] = $returnto;
}
if (!empty($rememberme)) {
$params['rememberme'] = $rememberme;
}
$target = common_local_url('otp',
array('user_id' => $login_token->user_id,
'token' => $login_token->token),
$params);
common_redirect($target, 303);
}
}

View File

@ -150,9 +150,18 @@ class Status_network extends DB_DataObject
}
if (!empty($sn)) {
if (!empty($sn->hostname) && 0 != strcasecmp($sn->hostname, $servername)) {
$sn->redirectToHostname();
// Redirect to the right URL
if (!empty($sn->hostname) &&
empty($SERVER['HTTPS']) &&
0 != strcasecmp($sn->hostname, $servername)) {
$sn->redirectTo('http://'.$sn->hostname.$_SERVER['REQUEST_URI']);
} else if (!empty($SERVER['HTTPS']) &&
0 != strcasecmp($sn->sitename.'.'.$wildcard, $servername)) {
$sn->redirectTo('https://'.$sn->sitename.'.'.$wildcard.$_SERVER['REQUEST_URI']);
}
$dbhost = (empty($sn->dbhost)) ? 'localhost' : $sn->dbhost;
$dbuser = (empty($sn->dbuser)) ? $sn->nickname : $sn->dbuser;
$dbpass = $sn->dbpass;
@ -179,11 +188,8 @@ class Status_network extends DB_DataObject
// (C) 2006 by Heiko Richler http://www.richler.de/
// LGPL
function redirectToHostname()
function redirectTo($destination)
{
$destination = 'http://'.$this->hostname;
$destination .= $_SERVER['REQUEST_URI'];
$old = 'http'.
(($_SERVER['HTTPS'] == 'on') ? 'S' : '').
'://'.