Setup cookies security based on user preference
authorcsteipp <csteipp@wikimedia.org>
Thu, 22 Aug 2013 03:42:32 +0000 (20:42 -0700)
committerChad Horohoe <chadh@wikimedia.org>
Sat, 24 Aug 2013 18:04:23 +0000 (11:04 -0700)
Use the user pref instead of the login form checkbox for setting up
cookie security on login.

The preferences menu is still broken (always shows checked, even if
preference has been turned off), but this will log the user in (over
https), and then redirect them back to http if they have selected to
not use https. Likewise, if they have the default preference to use
https, they get the forceHTTPS cookie and other cookies secure.

Change-Id: I08f67b35f355ef193ae86cb9cca3799e247ead4e

includes/DefaultSettings.php
includes/SkinTemplate.php
includes/specials/SpecialUserlogin.php
includes/templates/Userlogin.php

index c04402e..92cbab3 100644 (file)
@@ -3999,13 +3999,6 @@ $wgUserrightsInterwikiDelimiter = '@';
  */
 $wgSecureLogin = false;
 
-/**
- * By default, keep users logged in via HTTPS when $wgSecureLogin is also
- * true. Users opt-out of HTTPS when they login by de-selecting the checkbox.
- * @since 1.21
- */
-$wgSecureLoginDefaultHTTPS = true;
-
 /** @} */ # end user accounts }
 
 /************************************************************************//**
index bb31bdf..2739df3 100644 (file)
@@ -618,10 +618,6 @@ class SkinTemplate extends Skin {
                        }
                }
 
-               if ( $wgSecureLogin && $request->detectProtocol() === 'https' ) {
-                       $a['wpStickHTTPS'] = true;
-               }
-
                $returnto = wfArrayToCgi( $a );
                if ( $this->loggedin ) {
                        $personal_urls['userpage'] = array(
index d4784a5..db8ddcd 100644 (file)
@@ -105,7 +105,8 @@ class LoginForm extends SpecialPage {
                $this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );
                $this->mAction = $request->getVal( 'action' );
                $this->mRemember = $request->getCheck( 'wpRemember' );
-               $this->mStickHTTPS = $request->getBool( 'wpStickHTTPS' );
+               $this->mFromHTTP = $request->getBool( 'fromhttp', false );
+               $this->mStickHTTPS = ( !$this->mFromHTTP && $request->detectProtocol() === 'https' ) || $request->getBool( 'wpForceHttps', false );
                $this->mLanguage = $request->getText( 'uselang' );
                $this->mSkipCookieCheck = $request->getCheck( 'wpSkipCookieCheck' );
                $this->mToken = ( $this->mType == 'signup' ) ? $request->getVal( 'wpCreateaccountToken' ) : $request->getVal( 'wpLoginToken' );
@@ -175,10 +176,10 @@ class LoginForm extends SpecialPage {
                        $query = array(
                                'returnto' => $this->mReturnTo,
                                'returntoquery' => $this->mReturnToQuery,
-                               'wpStickHTTPS' => $this->mStickHTTPS
                        );
                        $url = $title->getFullURL( $query, false, PROTO_HTTPS );
                        if ( $wgSecureLogin && wfCanIPUseHTTPS( $this->getRequest()->getIP() ) ) {
+                               $url = wfAppendQuery( $url, 'fromhttp=1' );
                                $this->getOutput()->redirect( $url );
                                return;
                        } else {
@@ -1041,7 +1042,7 @@ class LoginForm extends SpecialPage {
                global $wgEnableEmail, $wgEnableUserEmail;
                global $wgHiddenPrefs, $wgLoginLanguageSelector;
                global $wgAuth, $wgEmailConfirmToEdit, $wgCookieExpiration;
-               global $wgSecureLogin, $wgSecureLoginDefaultHTTPS, $wgPasswordResetRoutes;
+               global $wgSecureLogin, $wgPasswordResetRoutes;
 
                $titleObj = $this->getTitle();
                $user = $this->getUser();
@@ -1124,15 +1125,6 @@ class LoginForm extends SpecialPage {
                        $template->set( 'link', '' );
                }
 
-               // Decide if we default stickHTTPS on
-               if ( $wgSecureLoginDefaultHTTPS
-                       && $this->mAction != 'submitlogin'
-                       && !$this->mLoginattempt
-                       && wfCanIPUseHTTPS( $this->getRequest()->getIP() ) )
-               {
-                       $this->mStickHTTPS = true;
-               }
-
                $resetLink = $this->mType == 'signup'
                        ? null
                        : is_array( $wgPasswordResetRoutes ) && in_array( true, array_values( $wgPasswordResetRoutes ) );
@@ -1162,7 +1154,7 @@ class LoginForm extends SpecialPage {
                $template->set( 'usereason', $user->isLoggedIn() );
                $template->set( 'remember', $user->getOption( 'rememberpassword' ) || $this->mRemember );
                $template->set( 'cansecurelogin', ( $wgSecureLogin === true ) );
-               $template->set( 'stickHTTPS', (int)$this->mStickHTTPS );
+               $template->set( 'stickhttps', (int) $this->mStickHTTPS );
 
                if ( $this->mType === 'signup' && $user->isLoggedIn() ) {
                        $template->set( 'createAnother', true );
index 46a0235..030b479 100644 (file)
@@ -170,7 +170,7 @@ class UserloginTemplate extends BaseTemplate {
                <?php } ?>
 <?php if ( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
 <?php if ( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
-<?php if ( $this->data['cansecurelogin'] ) {?><input type="hidden" name="wpStickHTTPS" value="<?php $this->text( 'stickHTTPS' ); ?>" /><?php } ?>
+<?php if ( $this->data['cansecurelogin'] ) {?><input type="hidden" name="wpForceHttps" value="<?php $this->text( 'stickhttps' ); ?>" /><?php } ?>
 </form>
 </div>
 </div>