custom-mediawiki-extensions/UserloginHTTPS/UserloginHTTPS.php

59 lines
1.6 KiB
PHP

<?php
# Alert the user that this is not a valid entry point to MediaWiki if they try to access the special pages file directly.
if (!defined('MEDIAWIKI')) {
echo <<<EOT
To install my extension, put the following line in LocalSettings.php:
require_once( "\$IP/extensions/UserloginHTTPS/UserloginHTTPS.php" );
EOT;
exit( 1 );
}
$wgExtensionCredits['specialpage'][] = array(
'name' => 'UserloginHTTPS',
'author' => 'Magnus Kristiansen',
'url' => 'http://www.mediawiki.org/wiki/Extension:UserloginHTTPS',
'description' => 'Redirect Special:Userlogin to HTTPS if accessed via HTTP',
'descriptionmsg' => 'userloginhttps-desc',
'version' => '1.0.0',
);
$wgHooks['SpecialPage_initList'][] = 'ulh_overrideUserlogin';
function ulh_overrideUserlogin(&$list) {
global $ulh_originalData;
$ulh_originalData = $list['Userlogin'];
$list['Userlogin'] = array('SpecialPage', 'Userlogin', '', true, 'ulh_SpecialUserlogin', __FILE__);
return true;
}
function ulh_SpecialUserlogin($par) {
global $wgRequest, $wgOut, $ulh_originalData;
$url = $wgRequest->getFullRequestURL();
if (substr($url, 0, 5) == 'http:') {
$new_url = 'https:' . substr($url, 5);
$wgOut->redirect($new_url);
return;
}
$rec = $ulh_originalData;
if ( is_string( $rec ) ) {
$className = $rec;
$sp = new $className;
} elseif ( is_array( $rec ) ) {
$className = array_shift( $rec );
$sp = wfCreateObject( $className, $rec );
} else {
$wgOut->showErrorPage('Internal error', 'Error in Userlogin override.');
return;
}
require_once($sp->getFile());
wfSpecialUserlogin($par);
}
?>