/**
* Work out the IP address based on various globals
* For trusted proxies, use the XFF client IP (first of the chain)
+ * @param $reset boolean Used to reset the internal static variable
+ * tracking the IP address. Set to anything non empty to reset it, for
+ * example: wfGetIP( 'reset' ); (default: false).
* @return string
*/
-function wfGetIP() {
+function wfGetIP( $reset = false ) {
global $wgUsePrivateIPs, $wgCommandLineMode;
static $ip = false;
+ if( $reset ) {
+ $ip = false;
+ }
+
# Return cached result
if ( !empty( $ip ) ) {
return $ip;
* TODO: need to cover the part dealing with XFF headers.
*/
class wfGetIPTest extends MediaWikiTestCase {
- // constant used to reset wfGetIP() internal static variable
- const doReset = true;
/** helper */
public function assertIP( $expected, $msg = '' ) {
$this->assertEquals(
$expected,
- wfGetIP( wfGetIPTest::doReset ),
+ wfGetIP( 'reset' ),
$msg );
}
public function assertIPNot( $expected, $msg = '' ) {
$this->assertNotEquals(
$expected,
- wfGetIP( wfGetIPTest::doReset ),
+ wfGetIP( 'reset' ),
$msg );
}
- /**
- * @group Broken
- */
function testGetLoopbackAddressWhenInCommandLine() {
global $wgCommandLineMode;
$save = $wgCommandLineMode;
$wgCommandLineMode = $save;
}
- /**
- * @group Broken
- */
function testGetFromServerRemoteAddr() {
global $_SERVER;
$save = null;
} else {
$_SERVER['REMOTE_ADDR'] = $save;
}
+ # Restore internal static altered above
+ wfGetIP( 'reset' );
}
/**
* @expectedException MWException
* @group Broken
+ * This is broken since it alter $wgCommandLineMode which is needed
+ * by our exception handler. Until someone find a correct way to handle
+ * this case, the test should stay in the Broken group.
+ *
*/
function testLackOfRemoteAddrThrowAnException() {
global $wgCommandLineMode;
# PHPUnit runs from the command line
$wgCommandLineMode = false;
# Next call throw an exception about lacking an IP
- wfGetIP( wfGetIPTest::doReset );
+ wfGetIP( 'reset' );
$wgCommandLineMode = $save;
}