'title' => null,
) + $this->mRequest->getQueryValues();
$url = $title->getFullURL( $query, false, PROTO_HTTPS );
- if ( $wgSecureLogin && wfCanIPUseHTTPS( $this->getRequest()->getIP() ) ) {
+ if ( $wgSecureLogin
+ && wfCanIPUseHTTPS( $this->getRequest()->getIP() )
+ && !$this->mFromHTTP ) // Avoid infinite redirect
+ {
$url = wfAppendQuery( $url, 'fromhttp=1' );
$this->getOutput()->redirect( $url );
// Since we only do this redir to change proto, always vary
// Normalize the name so that silly things don't cause "invalid username"
// errors. User::newFromName does some rather strict checking, rejecting
- // e.g. leading/trailing/multiple spaces.
+ // e.g. leading/trailing/multiple spaces. But first we need to reject
+ // usernames that would be treated as titles with a fragment part.
+ if ( strpos( $this->mUsername, '#' ) !== false ) {
+ return Status::newFatal( 'noname' );
+ }
$title = Title::makeTitleSafe( NS_USER, $this->mUsername );
if ( !is_object( $title ) ) {
return Status::newFatal( 'noname' );
wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
if ( $injected_html !== '' ) {
- $this->displaySuccessfulAction( $this->msg( 'loginsuccesstitle' ),
+ $this->displaySuccessfulAction( 'success', $this->msg( 'loginsuccesstitle' ),
'loginsuccess', $injected_html );
} else {
$this->executeReturnTo( 'successredirect' );
*/
wfRunHooks( 'BeforeWelcomeCreation', array( &$welcome_creation_msg, &$injected_html ) );
- $this->displaySuccessfulAction( $this->msg( 'welcomeuser', $this->getUser()->getName() ),
- $welcome_creation_msg, $injected_html );
+ $this->displaySuccessfulAction(
+ 'signup',
+ $this->msg( 'welcomeuser', $this->getUser()->getName() ),
+ $welcome_creation_msg, $injected_html
+ );
}
/**
- * Display an "successful action" page.
+ * Display a "successful action" page.
*
+ * @param string $type condition of return to; see `executeReturnTo`
* @param string|Message $title Page's title
* @param string $msgname
* @param string $injected_html
*/
- private function displaySuccessfulAction( $title, $msgname, $injected_html ) {
+ private function displaySuccessfulAction( $type, $title, $msgname, $injected_html ) {
$out = $this->getOutput();
$out->setPageTitle( $title );
if ( $msgname ) {
$out->addHTML( $injected_html );
- $this->executeReturnTo( 'success' );
+ $this->executeReturnTo( $type );
}
/**
*
* @param string $type One of the following:
* - error: display a return to link ignoring $wgRedirectOnLogin
+ * - signup: display a return to link using $wgRedirectOnLogin if needed
* - success: display a return to link using $wgRedirectOnLogin if needed
* - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
* @param string $returnTo
*
* @param string $type One of the following:
* - error: display a return to link ignoring $wgRedirectOnLogin
+ * - signup: display a return to link using $wgRedirectOnLogin if needed
* - success: display a return to link using $wgRedirectOnLogin if needed
* - successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
*/
$returnToQuery = wfCgiToArray( $this->mReturnToQuery );
}
+ // Allow modification of redirect behavior
+ wfRunHooks( 'PostLoginRedirect', array( &$returnTo, &$returnToQuery, &$type ) );
+
$returnToTitle = Title::newFromText( $returnTo );
if ( !$returnToTitle ) {
$returnToTitle = Title::newMainPage();